目錄
4臺主機,1主、2從、1MHA
一、環境軟件介紹
- 阿里雲服務器-:master
- ucloud服務器:兩個slave 及 mha
- 系統版本:4臺服務器均爲centos 7 64位
- 遠程工具:xshell 、xftp
二、服務器介紹
ip | 角色 |
---|---|
8.131.87.12 | master |
106.75.32.128 | slave1 |
106.75.47.125 | slave2 |
106.75.75.142 | mha |
三、配置主從同步
步驟參考這個筆記,不再贅述
mysql集羣之主從同步
四、配置半同步
步驟參考這個筆記,不再贅述
mysql集羣之半同步複製
五、mha搭建
(一)四臺機器ssh互通
1、在四臺服務器上分別執行下面命令,生成公鑰和私鑰
注意,需要確認的項,直接回車採用默認值即可
生成的祕鑰查看:cat /root/.ssh/id_rsa.pub
ssh-keygen -t rsa
2、在三臺MySQL服務器分別執行下面命令,密碼輸入系統密碼,將公鑰拷到MHA Manager服務器上
ssh-copy-id 106.75.75.142
備註:
以在MHA Manager服務器上檢查下,看.ssh/authorized_keys文件是否包含3個公鑰
cat /root/.ssh/authorized_keys
3、將MHA Manager的公鑰添加到authorized_keys文件中(此時應該包含4個公鑰)
cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
4、MHA Manager服務器執行下面命令,向其他三臺MySQL服務器分發公鑰信息。
scp /root/.ssh/authorized_keys root@8.131.87.12:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@106.75.32.128:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@106.75.47.125:/root/.ssh/authorized_keys
提示【authorized_keys】表示成功,有錯誤的話會提示具體的報錯信息
5、測試四臺服務器之間ssh是否配置成功
可以MHA Manager執行下面命令,檢測下與三臺MySQL是否實現ssh互通。
ssh 8.131.87.12
exit
ssh 106.75.32.128
exit
ssh 106.75.47.125
exit
可以正常登陸就表示ssh通了
(二)下載node和manager
上傳到相應的服務器
- 三臺MySQL服務器需要安裝node
- MHA Manager服務器需要安裝manager和node
(三)MHA node安裝
MHA的Node依賴於perl-DBD-MySQL,所以要先安裝perl-DBD-MySQL。
yum install perl-DBD-MySQL -y
rpm -ivh mha4mysql-node-0.58-0.el7.centos.noarch.rpm
(四)MHA manager安裝
MHA的manager又依賴了perl-Config-Tiny、perl-Log-Dispatch、perl-Parallel-ForkManager,也分別
進行安裝。
首先安裝依賴
yum install perl-Config-Tiny
yum install perl-Log-Dispatch
yum install perl-Parallel-ForkManager
安裝manager
rpm -ivh mha4mysql-manager-0.58-0.el7.centos.noarch.rpm
(五)MHA 配置
MHA Manager服務器需要爲每個監控的 Master/Slave 集羣供一個專用的配置文件,而所有的Master/Slave 集羣也可共享全局配置。
1、初始化配置目錄
#目錄說明
#/var/log (CentOS目錄)
# /mha (MHA監控根目錄)
# /app1 (MHA監控實例根目錄)
# /manager.log (MHA監控實例日誌文件)
mkdir -p /var/log/mha/app1
touch /var/log/mha/app1/manager.log
2、在主庫創建mha用戶
create user 'mha'@'%' identified by 'mha123';
grant all on *.* to mha@'%' identified by 'mha123';
flush privileges;
3、配置監控全局配置文件
在master mysql的主庫建一個新用戶
create user ‘mha’@’%’ identified by ‘mha123’;
grant all on . to mha@’%’ identified by ‘mha123’;
flush privileges;
vim /etc/masterha_default.cnf
[server default]
user=mha
password=mha123
port=3306
#ssh登錄賬號
ssh_user=root
#從庫複製賬號和密碼
repl_user=root
repl_password=root
port=3306
#ping次數
ping_interval=1
#二次檢查的主機
secondary_check_script=masterha_secondary_check -s 8.131.87.12 -s 106.75.32.128 -s 106.75.47.125 # 一主兩從三個庫的ip
4、配置監控實例配置文件
etc下創建mha文件夾,文件加內創建app1.cnf文件
mkdir -p /etc/mha
vim /etc/mha/app1.cnf
app1.cnf配置如下:
[server default]
#MHA監控實例根目錄
manager_workdir=/var/log/mha/app1
#MHA監控實例日誌文件
manager_log=/var/log/mha/app1/manager.log
#[serverx] 服務器編號
#hostname 主機名
#candidate_master 可以做主庫
#master_binlog_dir binlog日誌文件目錄
[server1]
hostname=8.131.87.12
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server2]
hostname=106.75.32.128
candidate_master=1
master_binlog_dir="/var/lib/mysql"
[server3]
hostname=106.75.47.125
candidate_master=1
master_binlog_dir="/var/lib/mysql"
(六)MHA 配置檢測
1、執行ssh通信檢測
在MHA Manager服務器上執行:
masterha_check_ssh --conf=/etc/mha/app1.cnf
遇到的問題:
- 問題1:CentOS8權限問題沒搞懂,root用戶下authorized_keys文件只讀不能修改,採取最笨的辦法,改成centos7
- 問題2:剛開始執行失敗,後來網絡切換了一下就好了-_-||
2、檢測MySQL主從複製
在MHA Manager服務器上執行:
masterha_check_repl --conf=/etc/mha/app1.cnf
出現“MySQL Replication Health is OK.”證明MySQL複製集羣沒有問題
遇到的問題:
[error][/usr/share/perl5/vendor_perl/MHA/ServerManager.pm, ln443] Binlog filtering check failed on 106.75.32.128(106.75.32.128:3306)! All log-bin enabled servers must have same binlog filtering rules (same binlog-do-db and binlog-ignore-db). Check SHOW MASTER STATUS output and set my.cnf correctly.
Sat Jan 30 03:27:19 2021 - [warning] Bad Binlog/Replication filtering rules:
8.131.87.12 (current_master)
Binlog_Do_DB: lagou
Binlog_Ignore_DB: information_schema,performance_schema,sys
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
106.75.32.128
Binlog_Do_DB:
Binlog_Ignore_DB:
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
106.75.47.125
Binlog_Do_DB:
Binlog_Ignore_DB:
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln359] Slave configurations is not valid.
Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln427] Error happened on checking configurations. at /usr/bin/masterha_check_repl line 48.
Sat Jan 30 03:27:19 2021 - [error][/usr/share/perl5/vendor_perl/MHA/MasterMonitor.pm, ln525] Error happened on monitoring servers.
Sat Jan 30 03:27:19 2021 - [info] Got exit code 1 (Not master dead).
MySQL Replication Health is NOT OK!
問題思考:
意思就是主庫和從庫的my.cnf中配置的binlog-ignore-db和binlog-do-db要保持一致
解決方案:
把兩臺從庫中的my.cnf配置進行調整
binlog-ignore-db=performance_schema
binlog-ignore-db=information_schema
binlog-ignore-db=sys
binlog-do-db=lagou
3、MHA Manager啓動
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --
ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
查看監控狀態命令如下:
masterha_check_status --conf=/etc/mha/app1.cnf
查看監控日誌命令如下:
tail -f /var/log/mha/app1/manager.log
六、測試
(一)主從同步、半同步測試
MySQL主從複製結構下,如何判定是異步複製還是半同步複製?
show global status like '%Rpl_semi%';
(二)mha測試
1、mha通過ssh登錄3臺mysql服務器
ssh 8.131.87.12
ssh 106.75.32.128
ssh 106.75.47.125
2、執行第六步MHA 配置檢測
①執行ssh通信檢測
在MHA Manager服務器上執行:
masterha_check_ssh --conf=/etc/mha/app1.cnf
②檢測MySQL主從複製
在MHA Manager服務器上執行:
masterha_check_repl --conf=/etc/mha/app1.cnf
3、啓動mha服務之後,查看日誌及狀態
啓動mha
nohup masterha_manager --conf=/etc/mha/app1.cnf --remove_dead_master_conf --
ignore_last_failover < /dev/null > /var/log/mha/app1/manager.log 2>&1 &
查看監控狀態命令如下:
masterha_check_status --conf=/etc/mha/app1.cnf
查看監控日誌命令如下:
tail -f /var/log/mha/app1/manager.log
4、模擬主機出故障,從庫能自動切換功能
①master停止mysql服務
systemctl stop mysqld
②查看mha日誌,確認可以正常切換
③去當前從庫查看主庫情況
④在切換後的主節點機器上查看狀態展示效果
⑤在切換後的主節點機器數據庫添加數據,分別查詢主從庫數據一致
⑥將那個掛掉的數據庫重新啓動,然後試試手動切換主庫(將它重新指定成主庫)
masterha_master_switch --conf=/etc/mha/app1.cnf --master_state=alive --orig_master_is_new_slave --new_master_host=8.131.87.12 --new_master_port=3306
七、注意事項
1、三臺mysql服務器的配置最好一致
因爲每一臺都有可能在mha的處理指標變成主庫。如,執行以下命令檢測mysql主從複製的時候,如果主庫和從庫的my.cnf中配置的binlog-ignore-db和binlog-do-db不一致,會檢測不通過
masterha_check_repl --conf=/etc/mha/app1.cnf
2、master宕機切換master之後,原來的master節點配置會從app1.cnf中自動刪除
如果想用回原來的節點,需要先把原來的master的節點信息配置進去