1.MySQL-MMM概述mysql
MMM(Master-Master replication manager for MySQL)是一套支持雙主故障切換和雙主平常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫作雙主複製,可是業務上同一時刻只容許對一個主進行寫入,另外一臺備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,能夠說MMM這套腳本程序一方面實現了故障切換的功能,另外一方面其內部附加的工具腳本也能夠實現多個slave的read負載均衡
MMM提供了自動和手動兩種方式移除一組服務器中複製延遲較高的服務器的虛擬ip,同時它還能夠備份數據,實現兩節點之間的數據同步等。因爲MMM沒法徹底的保證數據一致性,因此MMM適用於對數據的一致性要求不是很高,可是又想最大程度的保證業務可用性的場景。對於那些對數據的一致性要求很高的業務,很是不建議採用MMM這種高可用架構sql
二、MySQL-MMM優缺點數據庫
優勢:高可用性,擴展性好,出現故障自動切換,對於主主同步,在同一時間只提供一臺數據庫寫操做,保證的數據的一致性
缺點:Monitor節點是單點,能夠結合Keepalived實現高可用vim
三、MySQL-MMM工做原服務器
MMM是一套靈活的腳本程序,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)架構
mmm_mond:監控進程,負責全部的監控工做,決定和處理全部節點角色活動。此腳本須要在監管機上運行負載均衡
mmm_agentd:運行在每一個mysql服務器上的代理進程,完成監控的探針工做和執行簡單的遠端服務設置。此腳本須要在被監管機上運行ide
mmm_control:一個簡單的腳本,提供管理mmm_mond進程的命令工具
mysql-mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,經過監管的管理,這些IP會綁定在可用mysql之上,當某一臺mysql宕機時,監管會將VIP遷移至其餘mysqlthis
在整個監管過程當中,須要在mysql中添加相關受權用戶,以便讓mysql能夠支持監理機的維護
master1 : 192.168.94.11 db1
master2 : 192.168.94.22 db2
slave1 : 192.168.94.33 db3
slave2 : 192.168.94.44 db4
monitor : 192.168.94.55 monitor
VIP :
192.168.94.250 writer
192.168.94.251 reader
192.168.94.252 reader
============================================================================================================================================
首先保證每一個服務器時間統一
分別在master一、master二、slave一、slave2上安裝MariaDB
[root@sqlmaster1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@sqlmaster1 ~]# yum -y install epel-release [root@sqlmaster1 ~]# yum clean all && yum makecache [root@sqlmaster1 ~]# yum -y install mariadb-server mariadb
修改master一、master2的my.cnf配置文件
[root@sqlmaster1 ~]# vim /etc/my.cnf # 在[mysqld]下添加如下內容 log-bin=mysql-bin log-slave-updates=true server-id=11 # id號不能相同 master2爲22 relay-log=relay-log-bin relay-log-index=relay-log-bin.index
修改slave一、slave2的my.cnf配置文件
[root@sqlslave1 ~]# vim /etc/my.cnf # 在[mysqld]下添加如下內容 server-id=33 # slave2 爲44 relay-log=relay-log-bin relay-log-index=relay-log-bin.index
啓動mariadb
[root@sqlmaster1 ~]# systemctl start mariadb [root@sqlmaster2 ~]# systemctl start mariadb [root@sqlslave1 ~]# systemctl start mariadb [root@sqlslave2 ~]# systemctl start mariadb
配置主主複製 , 兩個master互相授予權限
# master1 [root@sqlmaster1 ~]# mysql MariaDB [(none)]> grant replication slave on *.* to 'sqlsync'@'192.168.94.%' identified by '123123';
MariaDB [(none)]> flush privileges; # master2 作相同操做 [root@sqlmaster2 ~]# mysql MariaDB [(none)]> grant replication slave on *.* to 'sqlsync'@'192.168.94.%' identified by '123123';
MariaDB [(none)]> flush privileges; ===========================================================================================================
# master1 MariaDB [(none)]> show master status; # master2 MariaDB [(none)]> change master to master_host='192.168.94.11',master_user='sqlsync',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=358; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G;
# Slave_IO_Running、Slave_SQL_Running 都爲Yes便可
===========================================================================================================
# master2 MariaDB [(none)]> show master status; # master1 MraiaDB [(none)]> change master to master_host='192.168.94.22',master_user='sqlsync',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=358; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G;
# Slave_IO_Running、Slave_SQL_Running 都爲Yes便可
配置主從複製slave一、slave2
# slave1 [root@sqlslave1 ~]# mysql MariaDB [(none)]> change master to master_host='192.168.94.11',master_user='sqlsync',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=358; MariaDB [(none)]> start slave; MariaDB [(none)]> show slave status\G;
# Slave_IO_Running、Slave_SQL_Running 都爲Yes便可
# slave2作相同操做
[root@sqlslave2 ~]# mysql
MariaDB [(none)]> change master to master_host='192.168.94.11',master_user='sqlsync',master_password='123123',master_log_file='mysql_bin.000001',master_log_pos=358;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G;
# Slave_IO_Running、Slave_SQL_Running 都爲Yes便可
安裝MySQL-MMM服務器
# 全部服務器作相同操做 [root@sqlmaster1 ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo [root@sqlmaster1 ~]# yum -y install epel-release mysql-mmm*
配置MySQL-MMM
[root@sqlmaster1 ~]# vim /etc/mysql-mmm/mmm_common.conf
[root@sqlmaster1 ~]# scp /etc/mysql-mmm/mmm_common.conf 192.168.94.22:/etc/mysql-mmm/ [root@sqlmaster1 ~]# scp /etc/mysql-mmm/mmm_common.conf 192.168.94.33:/etc/mysql-mmm/ [root@sqlmaster1 ~]# scp /etc/mysql-mmm/mmm_common.conf 192.168.94.44:/etc/mysql-mmm/ [root@sqlmaster1 ~]# scp /etc/mysql-mmm/mmm_common.conf 192.168.94.55:/etc/mysql-mmm/
[root@sqlmaster1 ~]# vim /etc/mysql-mmm/mmm_agent.conf
# master1 爲 this db1 , master1 爲 this db2 , slave1 爲 this db3 , slave2 爲 this db4
在monitor服務器上編輯mmm_mon.conf配置文件
[root@monitor ~]# vim /etc/mysql-mmm/mmm_mon.conf
受權mmm-agent
# 每臺db都作相同操做 [root@monitor ~]# mysql MariaDB [(none)]> grant super, replication client, process on *.* to 'mmm_agent'@'192.168.94.%' identified by '123123';
MraidDB [(none)]> flush privileges;
開啓agent服務
# 全部服務器都作相同操做 [root@sqlmaster1 ~]# systemctl enable mysql-mmm-agent Created symlink from /etc/systemd/system/multi-user.target.wants/mysql-mmm-agent.service to /usr/lib/systemd/system/mysql-mmm-agent.service. [root@sqlmaster1 ~]# systemctl start mysql-mmm-agent
在monitor服務器上進行檢測