MMM簡介:
MMM即Master-Master Replication Manager for MySQL(mysql主主複製管理器)關於mysql主主複製配置的監控、故障轉移和管理的一套可伸縮的腳本套件(在任何時候只有一個節點可以被寫入),這個套件也能對居於標準的主從配置的任意數量的從服務器進行讀負載均衡,所以你可以用它來在一組居於複製的服務器啓動虛擬ip,除此之外,它還有實現數據備份、節點之間重新同步功能的腳本。
MySQL本身沒有提供replication failover的解決方案,通過MMM方案能實現服務器的故障轉移,從而實現mysql的高可用。
Mmm高可用架構說明 :
mmm_mon 負責所有的監控工作的監控守護進程,決定節點的移除等等
mmm_agent 運行在mysql服務器上的代理守護進程,通過簡單遠程服務集提供給監 控節點
mmm_control 通過命令行管理mmm_mond進程
mysql-mmm 監管端會提供多個虛擬IP,包括一個可寫,多個可讀,這些IP會綁定在可用mysql上,當一臺發生宕機時,監管會將VIP遷移至其他mysql上
實驗拓撲:
實驗環境
主機 | 操作系統 | IP地址 | 虛擬IP |
---|---|---|---|
mysql- master1(db1) | CentOS-7-x86_64 | 192.168.37.128 | 192.168.37.150 |
mysql- master2(db2) | CentOS-7-x86_64 | 192.168.37.130 | 192.168.37.150 |
mysql- slave1(db3) | CentOS-7-x86_64 | 192.168.37.131 | 192.168.37.160 |
mysql- slave2(db4) | CentOS-7-x86_64 | 192.168.37.132 | 192.168.37.160 |
monitor | CentOS-7-x86_64 | 192.168.37.1326 | --- |
實驗過程:
一、主從服務器安裝mariadb
1、配置ALL源(yum源):
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
2、配置epel源
yum -y install epel-release
3、加載元數據緩存
yum clean all && yum makecache
4、安裝mariadb
yum install mariadb-sever mariadb -y
5、關閉防火牆、安全功能
systemctl stop firewalld.service
setenforce 0
二、修改配置文件
6、vim /etc/my.cnf
[mysqld]
log_error=/var/lib/mysql/mysql.err #錯誤日誌
log=/var/lib/mysql/mysql_log.log #訪問日誌
log_slow_queries=/var/lib/mysql_slow_queris.log #慢日誌
binlog-ignore-db=mysql,information_schema #mysql,information_schema 不生成二進制日誌文件
character_set_server=utf8 #字符集
log_bin=mysql_bin #開啓二進制文件
server_id=1 #進行修改
log_slave_updates=true #同步開啓
sync_binlog=1 #同步二進制日誌,1設爲安全值
auto_increment_increment=2 #自增列,起點爲1,增量爲2
auto_increment_offset=1
7、配置文件複製到其他三臺服務器
scp /etc/my.cnf [email protected]:/etc/
scp /etc/my.cnf [email protected]:/etc/
scp /etc/my.cnf [email protected]:/etc/
#複製時需要輸入對方的root密碼,並修改其他三臺服務器的server-id
8、開啓mariadb服務
systemctl start mariadb.service
三、主服務器授權同步
9、在master1上授權
grant replication slave on . to 'replication'@'192.168.37.%' identified by '123456';
show master status; #查看master2 的日誌及位置參數
change master to master_host='192.168.37.130',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
start slave; #開啓同步
show slave status\G ; #查看master1同步情況
10、在master2上授權
grant replication slave on . to 'replication'@'192.168.37.%' identified by '123456';
show master status; #查看master1的日誌及位置參數
change master to master_host='192.168.37.128',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=410;
start slave; #開啓同步
show slave status\G ; #查看master2同步情況
四、從服務器同步主服務器
11、兩臺從服務器執行同樣操作:
change master to master_host='192.168.37.128',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=410;
#注意要同步的主服務器的日誌及位置參數變化,使用最新的。
12、測試四臺服務器同步:在master1中新建數據庫school,查看其它服務器是否也存在數據庫school
測試成功!
五、安裝MMM高羣集(四臺服務器)
13、yum安裝mmm
yum install mysql-mmm* -y
14、編輯配置文件
vim /etc/mysql-mmm/mmm_common.conf
<host default>
cluster_interface ens33 #網卡
pid_path /run/mysql-mmm-agent.pid
bin_path /usr/libexec/mysql-mmm/
replication_user replication #授權的mysql用戶
replication_password 123456 #授權用戶密碼
agent_user mmm_agent #代理用戶
agent_password 123456
</host>
<host db1>
ip 192.168.37.128
mode master
peer db2
</host><host db2>
ip 192.168.37.130
mode master
peer db1
</host><host db3>
ip 192.168.37.131
mode slave
</host><host db4>
ip 192.168.37.132
mode slave
</host><role writer>
hosts db1, db2
ips 192.168.37.150
mode exclusive
</role><role reader>
hosts db3, db4
ips 192.168.37.160, 192.168.100.37.170
mode balanced
15、然後將配置複製給其它服務器,複製完回車後,輸入對方root密碼
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
六、安裝monitor
16、配置ALL源(yum源):
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
17、配置epel源
yum -y install epel-release
18、加載元數據緩存
yum clean all && yum makecache
19、yum安裝mmm
yum install mysql-mmm* -y
20、在master1上覆制給monitor
scp mmm_common.conf [email protected]:/etc/mysql-mmm/
21、編輯配置文件
vim /etc/mysql-mmm/ mmm_mon.conf
22、在所有數據庫上爲mmm_agent授權
grant super,replication client,process on . to 'mmm_agent'@'192.168.37.%' identified by '123456';
23、在所有數據庫上爲mmm_monitor授權
grant replication client on . to 'mmm_monitor'@'192.168.37.%' identified by '123456';
flush privileges; #授權後刷新權限
24、在所有服務器上修改mmm_agent.conf
vim /etc/mysql-mmm/mmm_agent.conf
this is db1/2/3/4
25、在所有服務器上啓動mysql-mmm-agent
systemctl start mysql-mmm-agent.service #開啓服務
systemctl enable mysql-mmm-agent.service #開機自啓動
26、在monitor上啓動監控服務
systemctl start mysql-mmm-monitor.service
systemctl stop firewalld.service
setenforce 0
27、查看各節點情況
mmm_control show
#如果不能連接 在master1上執行 mysql>flush privileges;
28、虛擬IP手動切換
mmm_control move_role writer db2 #虛擬IP轉給db2
29、故障測試:
1)斷掉主服務器sdb1,則虛擬IP會漂移到主服務器sdb2,但是如果sdb1恢復,不會搶佔,只可以手動切換。
2)斷掉從服務器sdb3,則虛擬IP會漂移到從服務器sdb4,如果sdb3恢復,則重新搶佔。
這樣,如果其中一臺主服務器或者從服務器宕機,虛擬IP會漂移到另一臺可用的服務器上,從而實現高可用羣集。