標籤:rem ESS mysql 兩種 名稱 art sch auto date
MMM簡介
? MMM(Master-Master replication manager for MySQL)是一套支援雙主故障切換和雙主日常管理的指令碼程式。MMM使用Perl語言開發,主要用來監控和管理MySQL Master-Master(雙主)複製,雖然叫做雙主複製,但是業務上同一時刻只允許對一個主進行寫入,另一台備選主上提供部分讀服務,以加速在主主切換時刻備選主的預熱,可以說MMM這套指令碼程式一方面實現了故障切換的功能,另一方面其內部附加的工具指令碼也可以實現多個slave的read負載平衡。
? MMM提供了自動和手動兩種方式移除一組伺服器中複寫延遲較高的伺服器的虛擬ip,同時它還可以備份資料,實現兩節點之間的資料同步等。由於MMM無法完全的保證資料一致性,所以MMM適用於對資料的一致性要求不是很高,但是又想最大程度的保證業務可用性的情境。對於那些對資料的一致性要求很高的業務,非常不建議採用MMM這種高可用架構。
MySQL-MMM優缺點
優點:高可用性,擴充性好,出現故障自動切換,對於主主同步,在同一時間只提供一台資料庫寫操作,保證的資料的一致性。
缺點:Monitor節點是單點,可以結合Keepalived實現高可用,對主機的數量有要求,需要實現讀寫分離,對程式來說是個挑戰。
MySQL-MMM工作原理
?MMM(Master-Master replication managerfor Mysql,Mysql主主複製管理器)是一套靈活的指令碼程式,基於perl實現,用來對mysql replication進行監控和故障遷移,並能管理mysql Master-Master複製的配置(同一時間只有一個節點是可寫的)。
- mmm_mond:監控進程,負責所有的監控工作,決定和處理所有節點角色活動。此指令碼需要在監管機上運行。
- mmm_agentd:運行在每個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的一個分支 節省安裝時間它代替mysql)
主機 |
IP |
主要軟體 |
mysql主伺服器 1 |
192.168.126.129 |
epel-release、mysql-mmm、mariadb |
mysql主伺服器 2 |
192.168.126.130 |
epel-release、mysql-mmm 、mariadb |
mysql從伺服器1 |
192.168.126.131 |
epel-release、mysql-mmm 、mariadb |
mysql從伺服器2 |
192.168.126.132 |
epel-release、mysql-mmm 、mariadb |
Monitor |
192.168.126.132 |
epel-release、mysql-mmm |
搭建本地YUM源(4台mysql伺服器 不同處已標註)
#yum -y install mariadb-server mariadb#systemctl stop firewalld.service#setenforce 0#vi /etc/my.cnf (9dd 刪除原有的配置 添加下面的) [mysqld]log_error=/var/lib/mysql/mysql.errlog=/var/lib/mysql/mysql_log.loglog_slow_queries=/var/lib/mysql_slow_queris.logbinlog-ignore-db=mysql,information_schema //不需要同步的資料庫名稱character_set_server=utf8log_bin=mysql_bin //開啟binlog日誌用於主從複製server_id=1 //4台id設定不同log_slave_updates=truesync_binlog=1auto_increment_increment=2 //欄位一次遞增多少auto_increment_offset=1 //自增欄位的起始值:1,3,5,7...等 奇數ID# systemctl start mariadb //開啟服務
- 配置主主同步
主伺服器1
mysal> grant replication slave on *.* to ‘replication‘@‘192.168.126.%‘ identified by ‘123456‘; 主2 : 查看檔案名稱 和位移量mysql> show master status;主1 :在主1上指定主2的IP 、記錄檔、 位移量mysql> change master to master_host=‘192.168.126.130‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=775;mysql> start slave; //開啟同步mysql> show slave status\G; //查看同步情況
主伺服器2
mysal> grant replication slave on *.* to ‘replication‘@‘192.168.126.%‘ identified by ‘123456‘; 主1 : 查看檔案名稱 和位移量mysql> show master status;主2 :在主2上指定主1的IP 、記錄檔、 位移量mysql> change master to master_host=‘192.168.126.129‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=775;mysql> start slave;
兩台從伺服器
主1 : 查看檔案名稱 和位移量mysql> show master status;兩台從伺服器:在從伺服器上指定主1的IP 、記錄檔、 位移量mysql> change master to master_host=‘192.168.126.129‘,master_user=‘replication‘,master_password=‘123456‘,master_log_file=‘mysql_bin.000001‘,master_log_pos=775;mysql> start slave;
安裝MMM 在所有伺服器上安裝 ,epel源要配置好
# yum -y install mysql-mmm*# cd /etc/mysql-mmm/# vi /etc/mysql-mmm/mmm_common.conf //所有主機上都要配置
……
<host default>
cluster_interface ens33
……
replication_user replication ? ? ? ? //複製使用者密碼
replication_password 123456 ? ? ? ? //複製使用者
agent_user mmm_agent ? ? ? ? //代理使用者
agent_password 123456 ? ? ? ? //代理使用者密碼
<host db1> ? ? ? ? ? //master-db1的host名稱
ip 192.168.126.129
mode master ? ? ? //主
peer db2 ? ? ? //與master-db1對等的伺服器的host名,也就是master-db2的伺服器host名
</host>
<host db2>
ip 192.168.126.130
mode master
peer db1
</host>
<host db3>
ip 192.168.126.131
mode slave ? ? ? ? // 從
</host>
<host db4>
ip 192.168.126.132
mode slave
</host>
<role writer>
hosts db1, db2
ips 192.168.126.200 ? ? ? ? //對外提供的寫操作的虛擬IP
mode exclusive ? ? ? ? //exclusive代表只允許存在一個主,也就是只能提供一個寫的IP
</role>
<role reader>
hosts db3, db4
ips 192.168.126.210, 192.168.126.220 ? ? ? ?//對外提供讀操作的虛擬ip
mode balanced ? ? ? ?//balanced代表負載平衡
</role>
複製給其他伺服器
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/# scp mmm_common.conf [email protected]:/etc/mysql-mmm/
Monitor伺服器配置
# cd /etc/mysql-mmm/# vi mmm_mon.confping_ips 192.168.126.129,192.168.126.130,192.168.126.131,192.168.126.132 //資料庫伺服器地址auto_set_online 10 //自動上線時間 10秒.....<host default> monitor_user mmm_monitor monitor_password 123456</host>
在所有資料庫上為mmm_agent 和 mmm_moniter 授權
mysql> grant super, replication client, process on *.* to ‘mmm_agent‘@‘192.168.126.%‘ identified by ‘123456‘;mysql> grant replication client on *.* to ‘mmm_monitor‘@‘192.168.126.%‘ identified by ‘123456‘;mysql> flush privileges; //重新整理許可權
修改所有資料庫的mmm_agent.conf
# vi /etc/mysql-mmm/mmm_agent.conf....this db1 //主1為db1、 主2為db2、 從1為db3 、 從2為db4
在所有伺服器上重啟伺服器
systemctl start mysql-mmm-agent.service# systemctl enable mysql-mmm-agent.service # systemctl start mysql-mmm-monitor.service
Monitor伺服器
# mmm_control show //查看各節點的情況# mmm_control checks all // 檢測監控功能是否完善 全是OK# mmm_control move_role writer db1 //切換虛擬IP 綁定的主機 db1
部署MySQL-MMM高可用群集