MySQL-MMM集羣部署node
MMM(Master-Master replication managerfor Mysql,Mysql主主複製管理器)是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。mysql
mmm_mond:監控進程,負責全部的監控工做,決定和處理全部節點角色活動。此腳本須要在監管機上運行。c++
mmm_agentd:運行在每一個mysql服務器上的代理進程,完成監控的探針工做和執行簡單的遠端服務設置。此腳本須要在被監管機上運行。sql
mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令。數據庫
實驗拓撲圖vim
實驗環境準備服務器
五臺虛擬機器 IP 主機名分別爲:tcp
192.168.4.10 主機名:mysql10 ide
192.168.4.11 主機名:mysql11 測試
192.168.4.12 主機名:mysql12
192.168.4.13 主機名:mysql13
192.168.4.120 主機名:client120
每臺虛擬機關閉防火牆和SELinux的限制 以方便實驗
10-13 安裝mysql數據庫服務
一,配置主從同步結構
1.1 配置主主結構 10 / 11
共同配置
虛擬機10上:用戶受權 啓動binlog日誌 重啓數據庫服務 管理員登陸指定主庫信息
mysql> grant replication slave on *.* to slaveuser@"%" identified by '123456';
[root@mysql10 ~]# vim /etc/my.cnf
[mysqld]
server_id=10
log-bin=master10
binlog_format="mixed"
[root@mysql10 ~]# systemctl restart mysqld
mysql> show master status;
| master10.000001 | 154 |
mysql> change master to master_host="192.168.4.11", master_user="slaveuser",master_password="123456",master_log_file="master11.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
Relay_Master_Log_File: master13.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
虛擬機11上:用戶受權 啓用binlog日誌 並容許級聯複製 重啓數據庫服務 管理員登陸指定主庫信息
mysql> grant replication slave on *.* to slaveuser@"%" identified by '123456';
[root@mysql11 mysql]# vim /etc/my.cnf
[mysqld]
server_id=11
log-bin=master11
binlog_format="mixed"
log_slave_updates
[root@mysql11 mysql]# systemctl stop mysqld
[root@mysql11 mysql]# systemctl start mysqld
mysql> show master status;
| master11.000001 | 154 |
mysql> change master to master_host="192.168.4.10", master_user="slaveuser",master_password="123456",master_log_file="master10.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
Relay_Master_Log_File: master10.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
配置一主多從結構(把12,13分別配置11的從庫)
虛擬機12上
[root@mysql12 ~]# vim /etc/my.cnf
[mysqld]
server_id=12
[root@mysql12 ~]# systemctl stop mysqld
[root@mysql12 ~]# systemctl start mysqld
mysql> change master to master_host="192.168.4.11", master_user="slaveuser",master_password="123456",master_log_file="master11.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
虛擬機13上
[root@mysql13 ~]#vim /etc/my.cnf
[mysqld]
server_id=13
[root@mysql13 ~]#systemctl stop mysqld
[root@mysql13 ~]#systemctl start mysqld
mysql> change master to master_host="192.168.4.11", master_user="slaveuser",master_password="123456",master_log_file="master11.000001",master_log_pos=154;
mysql> start slave;
mysql> show slave status\G;
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
虛擬機10上:
在10主機上添加訪問用戶guser 可以在其餘3臺主機上也有相同的受權用戶
mysql> create database gamedb;
mysql> grant all on gamedb.* to guser@"%" identified by "123456";
在客戶端245 使用受權用戶guser 鏈接10服務器 產生的新數據放在其餘3臺主機上也有
[root@room1pc32 桌面]# mysql -h192.168.4.10 -uguser -p123456
MySQL [(none)]> create table gamedb.a(id int);
MySQL [(none)]> insert into gamedb.a values(100);
MySQL [(none)]> insert into gamedb.a values(100);
MySQL [(none)]> insert into gamedb.a values(100);
二,配置mysql-mmm
mysql-mmm介紹:
監控服務: 運行在管理節點上 用來監控數據節點
代理服務: 運行在數據節點 用來提供系統給監控主機
1)在全部主機上安裝mysql-mmm軟件 (10-13,120)
yum -y install perl-*
tar -zxvf mysql-mmm.zip
unzip mysql-mmm.zip
cd mysql-mmm/
tar -zxvf mysql-mmm-2.2.1.tar.gz
cd mysql-mmm-2.2.1/
make install
ls /etc/mysql-mmm/
mmm_agent.conf mmm_common.conf mmm_mon.conf mmm_tools.conf
2)修改配置文件
a.修改數據節點代理服務配置文件(10 11 12 13)
[root@mysql10 ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db10 #自定義名稱
[root@mysql11 ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db11
[root@mysql12 ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db12
[root@mysql13 ~]# vim /etc/mysql-mmm/mmm_agent.conf
include mmm_common.conf
this db13
b.修改管理節點監控服務的配置文件(120)
[root@client120 ~]# vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 192.168.4.120
pid_path /var/run/mmm_mond.pid
bin_path /usr/lib/mysql-mmm/
status_path /var/lib/misc/mmm_mond.status
ping_ips 192.168.4.10, 192.168.4.11, 192.168.4.12, 192.168.4.13
</monitor>
<host default>
monitor_user monitor #監視用戶名
monitor_password 123456 #監視用戶密碼
</host>
debug 0 0不顯示調試信息 1顯示調試信息
c.修改公共文件(10,11,12,13,120)
vim /etc/mysql-mmm/mmm_common.conf
10 replication_user slaveuser #代理用戶
11 replication_password 123456
12
13 agent_user agent #數據庫
14 agent_password 123456
17 <host db10> #修改四臺服務器
18 ip 192.168.4.10
19 mode master
20 peer db11
21 </host>
22
23 <host db11>
24 ip 192.168.4.11
25 mode master
26 peer db10
27 </host>
28
29 <host db12>
30 ip 192.168.4.12
31 mode slave
32 </host>
33
34 <host db13>
35 ip 192.168.4.13
36 mode slave
37 </host>
39 <role writer>
40 hosts db10, db11
41 ips 192.168.4.100
42 mode exclusive
43 </role>
44
45 <role reader>
46 hosts db12, db13
47 ips 192.168.4.102, 192.168.4.105
48 mode balanced
49 </role>
d.根據配置文件的設置,在數據節點上添加對應的受權用戶
monitor
agent
3)在虛擬機10上 受權
mysql> grant replication client on *.* to monitor@"%" identified by "123456";
mysql> grant replication client,process,super on *.* to agent@"%" identified by "123456";
4)其餘三臺測試
mysql> select user,host from mysql.user where user in ('agent','monitor');
三,啓動服務
a.啓動數據節點主機代理服務(10-13):安裝服務運行依賴軟件包 安裝獲取vip地址軟件包 啓動服務
cd /root/mysql-mmm/
tar -zxf Algorithm-Diff-1.1902.tar.gz
cd Algorithm-Diff-1.1902/
perl Makefile.PL
make
make install
cd /root/mysql-mmm/
tar -zxf Proc-Daemon-0.03.tar.gz
cd Proc-Daemon-0.03/
perl Makefile.PL
make
make install
cd /root/mysql-mmm/
rpm -ivh --nodeps perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
/etc/init.d/mysql-mmm-agent start
/etc/init.d/mysql-mmm-agent status
netstat -pantu | grep mmm
netstat -pantu | grep :9989
tcp 0 0 192.168.4.11:9989 0.0.0.0:* LISTEN 10059/mmm_agentd
yum -y install gcc gcc-c++
cd /root/mysql-mmm/
gunzip Net-ARP-1.0.8.tgz
tar -xf Net-ARP-1.0.8.tar
cd Net-ARP-1.0.8/
perl Makefile.PL
make
make install
b.啓動管理節點主機監控服務 (120):安裝服務運行軟件包 啓動服務
cd /root/mysql-mmm/
tar -zxf Algorithm-Diff-1.1902.tar.gz
cd Algorithm-Diff-1.1902/
perl Makefile.PL
make
make install
cd /root/mysql-mmm/
tar -zxf Proc-Daemon-0.03.tar.gz
cd Proc-Daemon-0.03/
perl Makefile.PL
make
make install
cd /root/mysql-mmm/
rpm -ivh --nodeps perl-Log-Log4perl-1.26-1.el6.rf.noarch.rpm
/etc/init.d/mysql-mmm-monitor start
/etc/init.d/mysql-mmm-monitor status
netstat -pantu | grep mmm_mond
netstat -pantu | grep 9988
tcp 0 0 192.168.4.120:9988 0.0.0.0:* LISTEN 30047/mmm_mond
四,驗證mysql-mmm的配置
a 查看數據庫節點上的數據庫服務是運行的
IO線程和SQ線程 是否OK
[root@mysql12 ~]# mysql -uroot -p123456 -e"show slave status\G;" | grep -i yes
mysql: [Warning] Using a password on the command line interface can be insecure.
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
b.在監控服務器本機登陸管理界面查看,查看數據庫服務狀態
[root@client120 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
db10(192.168.4.10) master/AWAITING_RECOVERY. Roles:
db11(192.168.4.11) master/AWAITING_RECOVERY. Roles:
db12(192.168.4.12) slave/AWAITING_RECOVERY. Roles:
db13(192.168.4.13) slave/AWAITING_RECOVERY. Roles:
[root@client120 ~]# mmm_control set_online db10
[root@client120 ~]# mmm_control set_online db11
[root@client120 ~]# mmm_control set_online db12
[root@client120 ~]# mmm_control set_online db13
[root@client120 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
db10(192.168.4.10) master/ONLINE. Roles: writer(192.168.4.100)
db11(192.168.4.11) master/ONLINE. Roles:
db12(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.105)
db13(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.102)
c.在數據接待年本機查看是否獲取到vip地址
[root@client120 ~]# ping -c 2 192.168.4.100
PING 192.168.4.100 (192.168.4.100) 56(84) bytes of data.
64 bytes from 192.168.4.100: icmp_seq=1 ttl=64 time=0.367 ms
64 bytes from 192.168.4.100: icmp_seq=2 ttl=64 time=0.383 ms
[root@mysql10 Net-ARP-1.0.8]# ip addr show | grep 192.168.4.
inet 192.168.4.10/24 brd 192.168.4.255 scope global eth0
inet 192.168.4.100/32 scope global eth0
[root@mysql12 ~]# ip addr show | grep 192.168.4.
inet 192.168.4.12/24 brd 192.168.4.255 scope global eth0
inet 192.168.4.105/32 scope global eth0
[root@mysql13 ~]# ip addr show | grep 192.168.4.
inet 192.168.4.13/24 brd 192.168.4.255 scope global eth0
inet 192.168.4.102/32 scope global eth0
d.客戶端鏈接VIP訪問數據庫服務
[root@room1pc32 桌面]# mysql -h192.168.4.100 -uguser -p123456
MySQL [(none)]> select @@hostname;
+---------------------+
| @@hostname |
+---------------------+
| mysql10 |
+---------------------+
模擬 虛擬機10掛掉
[root@mysql10 ~]# systemctl stop mysqld
[root@client120 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
db10(192.168.4.10) master/HARD_OFFLINE. Roles:
db11(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.100)
db12(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.105)
db13(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.102)
[root@mysql13 ~]# ip addr show | grep 192.168.4
inet 192.168.4.11/24 brd 192.168.4.255 scope global eth0
inet 192.168.4.100/32 scope global eth0
MySQL [(none)]> select @@hostname;
ERROR 2006 (HY000): MySQL server has gone away
No connection. Trying to reconnect...
Connection id: 1900
Current database: *** NONE ***
+---------------------+
| @@hostname |
+---------------------+
| mysql11 |
+---------------------+
1 row in set (0.00 sec)
模擬 虛擬機10 故障修好了
[root@mysql10 ~]# systemctl start mysqld
[root@client120 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
db10(192.168.4.10) master/AWAITING_RECOVERY. Roles
db11(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.100):
db12(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.105)
db13(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.102)
[root@client120 ~]# mmm_control set_online db10
[root@client120 ~]# mmm_control show
defined(@array) is deprecated at /usr/share/perl5/vendor_perl/Log/Log4perl/Config.pm line 863.
(Maybe you should just omit the defined()?)
db10(192.168.4.10) master/ONLINE. Roles:
db11(192.168.4.11) master/ONLINE. Roles: writer(192.168.4.100)
db12(192.168.4.12) slave/ONLINE. Roles: reader(192.168.4.105)
db13(192.168.4.13) slave/ONLINE. Roles: reader(192.168.4.102)
10不會當即佔用VIP地址 當11 出現故障時 10 會從新得到VIP地址