MMM(MySQL主主復制管理器)是一套支持雙主故障切換和雙主日常管理的腳本程序。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)復制,雖然叫做雙主復制,但是業務上同一時刻只允許對一個主進行寫入,另一臺備選主上提供部分讀服務,以加速在主主切換時備選主的預熱,可以說MMM這套腳本程序一方面實現了故障切換的功能,另一方面其內部附加的工具腳本也可以實現多個Slave的read負載均衡。
MMM提供了自動和手動兩種方式移除一組服務器中復制延遲較高的服務器的虛擬IP,同時它還可以備份數據,實現兩節點之間的數據同步等。由于MMM無法完全保證數據的一致性,所以MMM適用于對數據的一致性要求不是很高,但是又想最大程度地保證業務可用性的場景。對于那些數據一致性要求很高的業務,非常不建議采用MMM這種高可用架構。
MMM是一套靈活的腳本程序,基于perl實現,用來對mysql replication進行監控和故障遷移,并能管理MySQL Master-Master復制的配置。
關于MMM高可用架構的說明如下
- mmm_mon:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此腳本需要在監管機上面運行
- mmm_agent:運行在每個MySQL服務器上的代理進程,完成監控的探針工作和執行簡單的遠端服務設置。此腳本需要在監管機上面運行
- mmm_control:一個簡單的腳本,提供mmm_mond進程的命令
- mysql_mmm的監管端會提供多個虛擬IP(VIP),包括一個可寫VIP,多個可讀VIP,通過監管的管理。這些IP會綁定在可用MySQL之上,當某一臺MySQL宕機時,監管會將VIP遷移至其他MySQL。
在整個監管過程中,需要在MySQL中添加相關授權用戶,以便讓MySQL可以支持監理機的維護。授權的用戶包括一個mmm_monitor用戶和一個mmm_agent用戶,如果想使用MMM的備份工具則還要添加一個mmm_tools用戶。
MariaDB數據庫管理系統是MySQL的一個分支,主要由開源社區在維護,采用GPL授權許可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能輕松成為MySQL的代替品。在存儲引擎方面,使用XtraDB來代替MySQL的InnoDB。MariaDB基于事務的Maria存儲引擎,替換了MySQL的MyISAM存儲引擎,它使用了Percona的 XtraDB,InnoDB的變體,分支的開發者希望提供訪問即將到來的MySQL 5.4 InnoDB性能。這個版本還包括了 PrimeBase XT (PBXT) 和 FederatedX存儲引擎。
本次項目使用五臺centos7服務器模擬搭建
主機 | 操作系統 | IP地址 | VIP | 主要軟件 |
---|---|---|---|---|
MariaDB-m1 主服務器 | CentOS-7-x86_64 | 172.16.10.23 | 172.16.10.100 | MariaDB、MMM |
MariaDB-m2 主服務器 | CentOS-7-x86_64 | 172.16.10.20 | 172.16.10.100 | MariaDB、MMM |
MariaDB-m3 從服務器 | CentOS-7-x86_64 | 172.16.10.24 | 172.16.10.110 | MariaDB、MMM |
MariaDB-m4 從服務器 | CentOS-7-x86_64 | 172.16.10.22 | 172.16.10.120 | MariaDB、MMM |
MariaDB-monitor | CentOS-7-x86_64 | 172.16.10.21 | MMM |
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum -y install epel-release
yum clean all && yum makecache //清空所有,重新更新元數據緩存
配置epel源須在五臺服務器上都操作
yum -y install mariadb-server mariadb
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
以上三個步驟在另外三臺數據庫服務器上一摸一樣,重復三遍
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=10 //id每臺都不相同
log_slave_updates=true //開啟同步
sync_binlog=1 //1為安全值
auto_increment_increment=2
auto_increment_offset=1
systemctl start mariadb //開啟服務
netstat -anpt | grep 3306 //查看服務狀態
配置文件修改時,只需將原有的[mysqld]直接刪除,大約九行。替換為以上內容,四臺服務器(MariaDB-m1、MariaDB-m2、MariaDB-m3、MariaDB-m4)的修改方法基本一致,唯一的不同是server_id不可相同,只要不同即可。
mysql //登陸數據庫
show master status;
#MariaDB-m1
grant replication slave on *.* to 'replication'@'172.16.10.%' identified by '123456';
//使用賬戶為replication 密碼為123456
change master to master_host='172.16.10.20',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
//當在MariaDB-m1上執行時,master_host地址為MariaDB-m2地址
···
#MariaDB-m2
grant replication slave on *.* to 'replication'@'172.16.10.%' identified by '123456';
//在兩臺master上分別執行,slave不需要執行
change master to master_host='172.16.10.23',master_user='replication',master_password='123456',master_log_file='mysql_bin.000003',master_log_pos=245;
//當在MariaDB-m2上執行時,master_host地址為MariaDB-m1地址
start slave;
show slave status\G;
在主服務器上創建一個庫,然后查看從服務器上是否有新創建的庫,若新創建庫存在;則再嘗試在從服務器上刪除新創建的庫,若是此時主服務器上的庫被成功刪除,則表示主主復制創建成功。
在MariaDB-m3、MariaDB-m4上進行操作
mysql
show master status;
注意日志文件和位置參數的改變
change master to master_host='172.16.10.23',master_user='replication',master_password='123456',master_log_file='mysql_bin.000004',master_log_pos=245;
start slave;
show slave status\G;
我們在最開始的操作中已經對所有的五臺服務器都安裝了epel源,所以這里只需要使用yum安裝即可,所有的服務器都需安裝mysql-mmm*
yum -y install mysql-mmm*
五臺服務器中的該配置文件都是相同的
vim /etc/mysql-mmm/mmm_common.conf
active_master_role writer
<host default>
cluster_interface ens33
pid_path /run/mysql-mmm-agent.pid
bin_path /usr/libexec/mysql-mmm/
replication_user replication
replication_password 123456
agent_user mmm_agent
agent_password 123456
</host>
<host db1>
ip 172.16.10.23
mode master
peer db2
</host>
<host db2>
ip 172.16.10.20
mode master
peer db1
</host>
<host db3>
ip 172.16.10.24
mode slave
</host>
<host db4>
ip 172.16.10.22
mode slave
</host>
<role writer>
hosts db1, db2
ips 172.16.10.100
mode exclusive
</role>
<role reader>
hosts db3, db4
ips 172.16.10.110, 172.16.10.120
mode balanced
</role>
</host>
<host db4>
ip 172.16.10.22
mode slave
</host>
<role writer>
hosts db1, db2
ips 172.16.10.100
mode exclusive
</role>
<role reader>
hosts db3, db4
ips 172.16.10.110, 172.16.10.120
mode balanced
</role>
scp /etc/mysql-mmm/mmm_common.conf root@172.16.10.20:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@172.16.10.24:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@172.16.10.22:/etc/mysql-mmm/
scp /etc/mysql-mmm/mmm_common.conf root@172.16.10.21:/etc/mysql-mmm/
vim /etc/mysql-mmm/mmm_agent.conf
this db1 //按著順序分別修改為db1、db2、db3、db4
grant super, replication client, process on *.* to 'mmm_agent'@'172.16.10.%' identified by '123456';
grant replication client on *.* to 'mmm_monitor'@'172.16.10.%' identified by '123456';
flush privileges;
systemctl start mysql-mmm-agent.service //開啟服務
systemctl enable mysql-mmm-agent.service //加入開機自啟動
vim /etc/mysql-mmm/mmm_mon.conf
include mmm_common.conf
<monitor>
ip 127.0.0.1
pid_path /run/mysql-mmm-monitor.pid
bin_path /usr/libexec/mysql-mmm
status_path /var/lib/mysql-mmm/mmm_mond.status
ping_ips 172.16.10.23,172.16.10.20,172.16.10.24,172.16.10.22
auto_set_online 10
# 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 mmm_monitor
monitor_password 123456
</host>
debug 0
systemctl disable firewalld.service
systemctl stop firewalld.service
setenforce 0
systemctl start mysql-mmm-monitor.service
ERROR: Can't connect to monitor daemon!,如若出現報錯,可嘗試重啟服務解決
mmm_control checks all //檢查結果需為全部ok
systemctl stop mariadb.service //關閉m1
systemctl start mariadb.service //開啟m1 主不會搶占
systemctl stop mariadb.service //關閉m3
systemctl start mariadb.service //開啟m3,VIP會重新回到各自服務器上
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。