前言mysql
工做原理:sql
master1和master2之間雙向複製,同時Master1和Slave1與slave2之間是主從複製。這樣整個體系中存在兩個Master,正常狀況下只有一個master對外提供寫服務。若是對外提供服務的master意外宕機了,這是MySQL自己並不具有failover切換的能力,儘管集羣中仍然有一個正常的master節點,但應用仍不可用。mysql-mmm就是爲了解決這個問題誕生的。數據庫
MySQL-MMM是Master-Master Replication Manager for MySQL(mysql主主複製管理器)的簡稱,是Google的開源項目(Perl腳本),主要用來監控mysql主主複製並作失敗轉移。vim
其原理是將真實數據庫節點的IP(RIP)映射爲虛擬IP(VIP)集,在這個虛擬的IP集中,有一個專用於write的IP,多個用於read的IP,這個用於Write的VIP映射着數據庫集羣中的兩臺master的真實IP(RIP),以此來實現Failover的切換,其餘read的VIP能夠用來均衡讀(balance)。服務器
1、實驗環境ide
2、實驗步驟測試
1.搭建主主同步this
2.搭建主從同步spa
3.安裝配置mysql-mmm3d
4.配置monitor監控
5.測試
3、實驗內容
-------------------------------搭建主主同步-------------------
配置db1/db2/db3/db4服務器的配置文件
vim /etc/my.cnf [mysqld] log-bin=mysql_bin //開啓log-bin server-id = 11 //每臺的server-id不可相同 binlog-ignore-db=mysql,infomation_schema //不進行同步的庫 log-slave-updates=true //容許slave進行同步 sync_binlog=1 auto_increment_increment=2 auto_increment_offset=1 systemctl restart mysqld.service systemctl stop firewalld.service setenforce 0
注:配置四臺服務器時server-id必須互不相同
配置主主模式:db1/db2
db1:192.168.218.131
mysql -uroot -pgrant replication slave on *.* to 'replication'@'192.168.218.%' identified by 'abc123'; flush privileges; show master status; change master to master_host='192.168.218.137',master_user='replication',master_password='abc123',master_log_file='mysql_bin.000001',master_log_pos=426;
db2:192.168.218.137
mysql -uroot -pgrant replication slave on *.* to 'replication'@'192.168.218.%' identified by 'abc123'; flush privileges; show master status; change master to master_host='192.168.218.131',master_user='replication',master_password='abc123',master_log_file='mysql_bin.000002',master_log_pos=426;
配置完成後db1與db2均開啓slave:
start slave; show slave status \G; Slave_IO_Running: Yes Slave_SQL_Running: Yes //查看兩者需均爲yes Last_IO_Errno: 0 //若不爲yes可查看error信息 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error:
-------------------------------搭建主從同步-------------------
db3:192.168.218.14五、db4:192.168.218.139
mysql -uroot -p change master to master_host='192.168.218.131',master_user='replication',master_password='abc123',master_log_file='mysql_bin.000002',master_log_pos=426; start slave; show slave status \G; Slave_IO_Running: Yes //兩者均爲yes Slave_SQL_Running: Yes
注:每次change master時均須要去db1 master服務器show master status
----------------------------安裝配置mysql-mmm-------------------------
安裝在五臺服務器
wget -O /etc/yum.repos.d/CenOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum -y install epel-release yum clean all && yum makecache yum -y install mysql-mmm*
db1:192.168.218.131
vim /etc/mysql-mmm/mmm_common.conf<host default>cluster_interface pid_path /run/mysql-mmm-agent.pid bin_path /usr/libexec/mysql-mmm/ replication_user replicant replication_password abc123 agent_user mmm_agent agent_password abc123 </host> <host db1> ip 192.168.218.131 mode master peer db2 </host> <host db2> ip 192.168.218.137 mode master peer db1 </host> <host db3> ip 192.168.218.145 mode slave </host> <host db4> ip 192.168.218.139 mode slave </host> <role writer> hosts db1, db2 ips 192.168.218.250 mode exclusive </role> <role reader> hosts db3, db4 ips 192.168.218.251, 192.168.218.252 mode balanced </role>
cd /etc/mysql-mmm/
scp mmm_common.conf root@192.168.218.130:/etc/mysql-mmm/ scp mmm_common.conf root@192.168.218.137:/etc/mysql-mmm/ scp mmm_common.conf root@192.168.218.145:/etc/mysql-mmm/ scp mmm_common.conf root@192.168.218.139:/etc/mysql-mmm/
在全部數據庫上爲mmm_monitor、mmm-agant受權
grant super, replication client, process on *.* to 'mmm_agent'@'192.168.218.%' identified by 'abc123'; grant replication client on *.* to 'mmm_monitor'@'192.168.218.%' identified by 'abc123'; flush privileges;
修改全部數據庫的mmm_agent.conf
vim /etc/mysql-mmm/mmm_agent.conf this db1 //根據實驗環境修改db後的數值
在全部數據庫上啓動mysql-mmm-agent
systemctl start mysql-mmm-agent.service systemctl enable mysql-mmm-agent.service
---------------------------------配置monitor監控-------------------------
monitor:192.168.218.130
vim /etc/mysql-mmm/mmm_mon.conf systemctl start mysql-mmm-monitor.service
監控顯示結果OK
-------------------------------測試-----------------------------------
將db3 mysql宕掉,使reader vip均移至db4
db3:systemctl stop mysqld
測試無異常,實驗搭建成功。