主要作用
監控和管理MySQL的主主複製拓撲,並在當前的主伺服器失效時,進行主和主備伺服器之間的主從切換和故障轉移等工作。
主要功能:
- 監控MySQL主從複製健康狀況(主動主動模式下的主主複製(主主),主動被動模式的主主複製(主主備))
- 在主庫出現當機時進行故障轉移並自動配置其它從DB對新主DB的複製
- 提供可主,寫(讀)虛擬IP,在主從伺服器出現問題時可用自動遷移虛擬IP
架構:
資源:
部署:
- 配置主主複製及主從同步叢集
- 安裝主從節點所需要的支援包(perl)
- 安裝及配置MMM工具集
- 允許MMM監控服務
- 測試配置
- 演示:
- 拓撲圖(VIP: visual IP)
步驟:
1、配置主(100)<->主(101)[參考: [Tony 老師搭建 MySQL 主從伺服器](https://learnku.com/articles/31832)]
2、配置主(100)<->從(102) [參考: [Tony 老師搭建 MySQL 主從伺服器](https://learnku.com/articles/31832)]
3、 安裝
rpm -vih <http://dl.fedoraproject.org/pub/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm>
rpm -Uvh <http://rpms.remirepo.net/enterprise/remi-release-7.rpm>
4、 yum clean all && yum makecache
5、更改yum源配置
yum search mmm # 查詢mmm支援包
yum -y install mysql-mmm-agent.noarch #每個伺服器都需要安裝mmm代理
yum -y install mysql-mmm* #監控伺服器安裝監控服務
systemctl status mysql-mmm-agent
systemctl start mysql-mmm-agent
systemctl stop mysql-mmm-agent
systemctl restart mysql-mmm-agent
6、建立賬號
CREATE USER repl@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
CREATE USER mmm_monitor@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
CREATE USER mmm_agent@'192.168.71.%' identified by '123456'; //建立,建議從伺服器IP段 ①
7、賬號授權
GRANT replication client on *.* to 'mmm_monitor'@'192.168.71.%' identified by '123456'; #用於MMM監控伺服器使用,在master上建立
GRANT super,replication client ,process on *.* to 'mmm_agent'@'192.168.71.%' identified by '123456'; #MMM代理服務,改變故障轉移和主從切換
GRANT REPLICATION SLAVE ON *.* TO repl@'192.168.71.%'; //授權 複製賬號
8、配置MMM(資料庫節點配置,三臺均配置)
cd /etc/mysq-mmm/
vim mmm_common.conf
配置< host default >:
網口:cluster_interface
pid和bin路徑:預設
replication_user:repl
replication_password:123456
agent_user:mmm_agent
agent_password:123456
配置< host db1 >:
ip :192.168.71.244
mode :master
peer:db2
配置 < host db2 > :
ip:192.168.71.223
mode:master
peer:db1
配置< host db3 >:
ip:192.168.71.220
mode:slave
配置< role writer >
hosts : db1,db2
ips:192.168.71.90
mode:exclusive( 唯一的)
配置 < role reader >
hosts:db1,db2,db3
ips:192.168.71.91,192.168.71.92,192.168.71.93
mode:balanced(平衡的)
複製配置檔案到其他伺服器
scp mmm_common.conf root@192.168.71.223:/etc/mysql-mmm/
scp mmm_common.conf root@192.168.71.220:/etc/mysql-mmm/
vim mysql-agent.conf (三臺伺服器對應設定為:db1,db2,db3)
9、監控節點配置(192.168.71.220,只配置監控節點)
vim mmm_mon.conf #監控資料檔案
配置< host default >
monitor_user :mmm_monitor
monitor_password:123456
配置monitor
ping_ips:192.168.71.244,192.168.71.223,192.168.71.220
10、啟動MMM服務
/etc/init.d/mysql-mmm-agent start(三臺伺服器均啟動代理服務)
/etc/init.d/mysql-mmm-monitor start (監控伺服器啟動監控服務)
11、檢視監控資訊
mmm_control
mmm_control show #檢視叢集狀態
mmm_control checks all #檢查叢集狀態
mmm_control ping #檢查與監控伺服器連線狀態
mmm_control set_online/offline #設定伺服器上線/下線
mmm_control help #檢視幫助
12、檢視伺服器虛擬IP狀態
13、測試
關閉db1的資料庫:/etc/init.d/mysqld stop
檢視監控伺服器上叢集狀態:mmm_control show
檢視DB3的主從狀態
常見問題:
**通過mmm_control checks all 檢查伺服器狀態**
Q1:
UNKNOWN: Error occurred: install_driver(mysql) failed: Can't load '/usr/lib64/perl5/vendor_perl/auto/DBD/mysql/mysql.so' for module DBD::mysql: libmysqlclient.so.18: cannot open shared object file: No such file or directory at /usr/lib64/perl5/DynaLoader.pm line 190, <STDIN> line 1.
A1:
perl-DBD-MySQL安裝出問題
S1:rpm -qa |grep -i DBD #檢視DBD安裝
S2:rpm -e --nodeps perl-DBD-MySQL-4.023-6.el7.x86_64 #解除安裝DBD
S3:rpm -qa |grep -i DBD #檢視解除安裝狀態
S4:wget http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm #下載MySQLserver,可根據系統選擇具體版本
S5:rpm -ivh mysql-community-release-el7-5.noarch.rpm #rpm MySQLserver
S6:yum install mysql-community-server #yum安裝
S7:yum install perl-DBD-MySQL #重新安裝
S8:systemctl restart mysql-mmm-monitor #重啟
S9:mmm_control checks all + mmm_control show ->正常
Q2:
當M1當機時,MMM架構自動切換至M2,插入資料,S未更新,M1重啟時,S仍未更新
A2:
插入S一條空事務,記錄與M2時相同即可。
Q3:
handler error HA_ERR_KEY_NOT_FOUND; the event's master log mysql-bin.000002, end_log_pos 673 #跳過插入 | 更新 | 刪除
A3:
stop slave;
insert into user(`username`) values('1');
set global sql_slave_skip_counter=1;
start slave;
Q4:
The slave I/O thread stops because master and slave have equal MySQL server ids #切換主從發現,server_id相同
A4:
show variables like '**server_id**';
vim /etc/my.cnf 修改server_id 值
**配置多執行緒**
stop slave #在從上,停止鏈路複製
set global slave_parallel_type = 'logical_clock'; #設定邏輯時鐘的方式
set global slave_parallel_workers = 4; #設定併發執行緒數
start slave;
本作品採用《CC 協議》,轉載必須註明作者和本文連結