mysql-8、MySQL集羣架構之MHA

目錄


4臺主機,1主、2從、1MHA

一、環境軟件介紹

  1. 阿里雲服務器-:master
  2. ucloud服務器:兩個slave 及 mha
  3. 系統版本:4臺服務器均爲centos 7 64位
  4. 遠程工具: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. 問題1:CentOS8權限問題沒搞懂,root用戶下authorized_keys文件只讀不能修改,採取最笨的辦法,改成centos7
  2. 問題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的節點信息配置進去
在這裏插入圖片描述


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章