MMM介紹:
MMM全稱為Multi-Master Replication Manager for MySQL,即為主主復制管理器;根據MMM官網介紹,其工作原理類似于lvs,都是利用vip地址;但lvs只有一個組件便可以正常工作,而MMM則使用三個組件,分別是mysql-mmm、mysql-mmm-agent、mysql-mmm-monitor;使用mysql-mmm組件定義真實mysql各節點主機物理IP與ips地址的對應關系,然后利用mysql-mmm-agent檢查mysql各節點主機的工作狀態,最后使用mysql-mmm-monitor實現故障切換,讀寫分離。
實驗環境:
node1: 172.16.2.12 mysql主節點DB1 |
node2: 172.16.2.13 mysql主節點DB2 |
node3: 172.16.2.14 mysql從節點DB3 |
node4: 172.16.2.15 監控節點 |
write ips: 172.16.2.21 |
read ips: 172.16.2.22 172.16.2.23 172.16.2.24 |
實驗前提:
DB1與DB2是雙主模型,DB1與DB3是主從模型;確保都能正常運行
一、安裝mmm
1、創建監控時使用的用戶賬號和密碼
MariaDB [(none)]>GRANT REPLICATION CLIENT ON *.* TO 'monitor'@'172.16.2.%' IDENTIFIED BY 'monitor'; \\此賬戶用于監控各節點的 MariaDB [(none)]>GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'agent'@'172.16.2.%' IDENTIFIED BY 'agent'; \\此賬號用于mysql-agent使用
1、在DB1;DB2;DB3上安裝mysql-mmm,mysql-mmm-agent
[root@node1 ~]# yum -y install mysql-mmm mysql-mmm-agent
2、編輯mysql-mmm的配置文件,修改內容如下
[root@node1 ~]# vim /etc/mysql-mmm/mmm_common.conf active_master_role writer \\定義活動主節點的角色 <host default> \\定義主機信息 cluster_interface eth0 \\定義監聽接口 pid_path /var/run/mysql-mmm/mmm_agentd.pid \\定義pid文件存放位置 bin_path /usr/libexec/mysql-mmm/ \\mmm執行文件的路徑 replication_user test \\此處填寫主從或主主模型使用的用戶 replication_password test \\此處填寫主從或主主模型使用的用戶密碼 agent_user agent \\此處填寫運行代理(agent)的用戶 agent_password agent \\此處填寫運行代理(agent)的用戶密碼 </host> <host db1> \\定義主機類型 ip 172.16.2.12 \\定義db1主機的地址 mode master \\定義db1主機的角色 peer db2 \\定義對端主機名稱 </host> <host db2> ip 172.16.2.13 mode master peer db1 </host> <host db3> ip 172.16.2.14 mode slave \\定義db3為從節點 </host> <role writer> \\定義寫節點包含哪些主機 hosts db1, db2 \\定義寫節點主機 ips 172.16.2.21 \\定義寫節點的vip地址 mode exclusive \\類型為exclusive </role> <role reader> \\定義讀節點的主機 hosts db1, db2, db3 \\主機名稱 ips 172.16.2.22, 172.16.2.23, 172.16.2.24 \\讀節點的vip地址 mode balanced \\類型為輪詢 </role>
3、復制此配置文件到各個節點,包含監控節點
[root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node2:/etc/mysql-mmm/ [root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node3:/etc/mysql-mmm/ [root@node1 ~]# scp /etc/mysql-mmm/mmm_common.conf node4:/etc/mysql-mmm/
4、編輯mysql-mmm-agent配置文件,修改內容如下:
[root@node1 ~]# vim /etc/mysql-mmm/mmm_agent.conf include mmm_common.conf # The 'this' variable refers to this server. Proper operation requires # that 'this' server (db1 by default), as well as all other servers, have the # proper IP addresses set in mmm_common.conf. this db1 \\此處根據mysql-mmm的配置文件定義的主機名填寫,node1,node2,node3分別為db1,db2,db3
5、在監控主機安裝mysql-mmm-monitor
[root@node4 ~]# yum -y install mysql-mmm-monitor
5.1編輯mysql-mmm-monitor的配置文件
[root@node4 ~]# vim /etc/mysql-mmm/mmm_mon.conf include mmm_common.conf <monitor> ip 127.0.0.1 \\保持默認即可 pid_path /var/run/mysql-mmm/mmm_mond.pid \\mysql-mmm-monitor的pid路徑 bin_path /usr/libexec/mysql-mmm \\mysql-mmm-monitor運行程序路徑 status_path /var/lib/mysql-mmm/mmm_mond.status \\監控狀態存放路徑 ping_ips 172.16.2.1, 172.16.2.12, 172.16.2.13, 172.16.2.14 \\監控各個主機的狀態,172.16.2.1為主機的網關,這里也監控了網關 auto_set_online 60 \\設置自動上線時間 # The kill_host_bin does not exist by default, though the monitor will # throw a warning about it missing. See the section 5.10 "Kill Host # Functionality" in the PDF documentation. # # kill_host_bin /usr/libexec/mysql-mmm/monitor/kill_host # </monitor> <host default> monitor_user monitor \\用于監控的用戶名 monitor_password monitor \\用戶監控的用戶密碼 </host> debug 0 \\調試,0為關閉,1為開啟
6、在各個DB節點啟動agent,在監控點啟動monitor
[root@node1 ~]# /etc/init.d/mysql-mmm-agent start [root@node2 ~]# /etc/init.d/mysql-mmm-agent start [root@node3 ~]# /etc/init.d/mysql-mmm-agent start
[root@node4 ~]# /etc/init.d/mysql-mmm-monitor start
7、在monitor節點運行mmm_control show命令查看
[root@node4 ~]# mmm_control show db1(172.16.2.12) master/ONLINE. Roles: reader(172.16.2.23), writer(172.16.2.21) db2(172.16.2.13) master/ONLINE. Roles: reader(172.16.2.24) db3(172.16.2.14) slave/ONLINE. Roles: reader(172.16.2.22)
8、查看各個DB接的ip地址:
[root@node1 ~]# ip addr list eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:0e:c4:29 brd ff:ff:ff:ff:ff:ff inet 172.16.2.12/24 brd 172.16.2.255 scope global eth0 inet 172.16.2.23/32 scope global eth0 inet 172.16.2.21/32 scope global eth0 inet6 fe80::20c:29ff:fe0e:c429/64 scope link valid_lft forever preferred_lft forever
[root@node2 ~]# ip addr list eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:f8:d4:88 brd ff:ff:ff:ff:ff:ff inet 172.16.2.13/16 brd 172.16.255.255 scope global eth0 inet 172.16.2.24/32 scope global eth0 inet6 fe80::20c:29ff:fef8:d488/64 scope link valid_lft forever preferred_lft forever
[root@node3 ~]# ip addr list eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000 link/ether 00:0c:29:5a:4f:48 brd ff:ff:ff:ff:ff:ff inet 172.16.2.14/24 brd 172.16.2.255 scope global eth0 inet 172.16.2.22/32 scope global eth0 inet6 fe80::20c:29ff:fe5a:4f48/64 scope link valid_lft forever preferred_lft forever
9、模擬node1故障
[root@node4 ~]# mmm_control set_offline db1 \\使用monitor命令強制node1下線 OK: State of 'db1' changed to ADMIN_OFFLINE. Now you can wait some time and check all roles!
[root@node4 ~]# mmm_control show \\再次查看各節點的狀態,db1顯示不在線,db2為讀寫角色,db3為讀角色 db1(172.16.2.12) master/ADMIN_OFFLINE. Roles: db2(172.16.2.13) master/ONLINE. Roles: reader(172.16.2.24), writer(172.16.2.21) db3(172.16.2.14) slave/ONLINE. Roles: reader(172.16.2.22), reader(172.16.2.23)
10、到此,mysql-mmm可以正常工作了,當一個主節點故障,此主節點的ips地址會轉移的另一個主節點上,實現故障切換,同時從節點也會切換主節點的ip,進行數據同步。
此處只介紹了mmm的配置,如果大家在配置mysql雙主模型或主從模型時或配置mmm有問題時,大家可以一起研究。
相關連接:
http://mysql-mmm.org/mmm2:guide
原創文章,作者:馬行空,如若轉載,請注明出處:http://www.www58058.com/6726
哥,按照你的文檔做,我在安裝mysql-mmm mysql-agent的時候一直解決不了依賴關系啊,centos6.6 Rpm安裝mysql主主,主從已經配好,配置好了本地yum源和epel源Error Downloading Packages:
rrdtool-perl-1.3.8-7.el6.x86_64: failure: Packages/rrdtool-perl-1.3.8-7.el6.x86_64.rpm from base: [Errno 256] No more mirrors to try.
perl-MIME-Lite-3.027-2.el6.noarch: failure: Packages/perl-MIME-Lite-3.027-2.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
perl-Algorithm-Diff-1.1902-9.el6.noarch: failure: Packages/perl-Algorithm-Diff-1.1902-9.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
perl-Email-Date-Format-1.002-5.el6.noarch: failure: Packages/perl-Email-Date-Format-1.002-5.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
perl-MIME-Types-1.28-2.el6.noarch: failure: Packages/perl-MIME-Types-1.28-2.el6.noarch.rpm from base: [Errno 256] No more mirrors to try.
如果看到請聯系我
@xiaozhiqi:如果你可以翻墻的,可以到這個網站上看看:http://mysql-mmm.org/mmm2:guide
@馬行空:謝謝?。∥以谠囋?/p>
@xiaozhiqi:這上面都詳細介紹了所依賴的插件