MHA—MySQL 主從之Master高可用

MHA—MySQL 主從之Master高可用

實驗準備工作

  • 主機角色劃分:
192.168.50.9     node9      MySQL主節點
192.168.50.10    node10     MySQL從節點
192.168.50.16    node16     MySQL從節點
192.168.50.17  172.16.50.17  node17     MasterHA Manager & ProxySQL
  1. 主節點
#修改配置文件
vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=1
log_bin=master-log
relay_log=relay-log
#重啓服務
systemctl restart mariadb
  1. 兩個從節點分別執行(不同主機注意修改自己的server_id)
#修改配置文件
vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON

server_id=2
relay_log=relay-log
log_bin=master-log
relay_log_purge=0
read-only=1
#重啓服務
systemctl restart mariadb
  1. 創建ssh密鑰,使任意兩臺主機間能夠通過ssh自由通信

此處爲了操作簡單,可以使所有主機的密鑰相同,具體做法爲:在任意一臺主機上生成一對密鑰,將密鑰發送至所有主機的對應目錄下

#假如在node9節點主機上執行
ssh-keygen -t rsa -P ''
ssh-copy-id -i id_rsa.pub root@192.168.50.9
#測試ssh連接可用性並更新know_hosts文件內容
ssh root@192.168.50.9 'ip a'
ssh root@192.168.50.10 'ip a'
ssh root@192.168.50.16 'ip a'
ssh root@192.168.50.17 'ip a'
#
scp -p id_rsa authorized_keys id_rsa.pub known_hosts root@192.168.50.10:/root/.ssh/
scp -p id_rsa authorized_keys id_rsa.pub known_hosts root@192.168.50.16:/root/.ssh/
scp -p id_rsa authorized_keys id_rsa.pub known_hosts root@192.168.50.17:/root/.ssh/
  1. 獲取mha4mysql-manager和mha4mysql-node兩個程序包並安裝

    • 在manager主機上需要同時安裝manager和node包
yum install ./mha4mysql-manager-0.56-0.el6.noarch.rpm ./mha4mysql-node-0.56-0.el6.noarch.rpm
  • 在node主機上僅需安裝mha4mysql-node包
yum install ./mha4mysql-node-0.56-0.el6.noarch.rpm
  1. 初始化MHA

因爲192.168.50.16從節點主機未開啓日誌同步,故此處僅設置192.168.50.10作爲主節點的備用節點

#創建目錄
mkdir /etc/masterha
#創建、修改並增加配置文件內容
vim /etc/masterha/app1.cnf
[server default]
user=mhaadmin
password=mhapass
manager_workdir=/data/masterha/app1
manager_log=/data/masterha/app1/manager.log
remote_workdir=/data/masterha/app1
ssh_user=root
repl_user=repladmin
repl_password=replpass
ping_interval=1

[server1]
hostname=192.168.50.9
candidate_master=1

[server2]
hostname=192.168.50.10
candidate_master=1

[server3]
hostname=192.168.50.16
candidate_master=0
  1. 在node9主節點服務器上爲mha創建並授權用戶
GRANT ALL ON *.* TO 'mhaadmin'@'192.168.50.%' IDENTIFIED BY 'mhapass';
GRANT ALL ON *.* TO 'repladmin'@'192.168.50.%' IDENTIFIED BY 'replpass';
FLUSH PRIVILEGES;
  1. 驗證各主機是否可以基於ssh實現自由通信
masterha_check_ssh --conf=/etc/masterha/app1.cnf
#成功信息
[info] All SSH connection tests passed successfully
  1. 對各mysql主機進行健康狀態監測
masterha_check_repl --conf=/etc/masterha/app1.cnf
#成功信息
MySQL Replication Health is OK.
  1. 啓動進程
nohup masterha_manager --conf=/etc/masterha/app1.cnf &>> /data/masterha/app1/manager.log &
  1. 監測狀態
masterha_check_status --conf=/etc/masterha/app1.cnf 
#顯示結果
app1 (pid:4663) is running(0:PING_OK), master:192.168.50.9
  1. 驗證failover效果

    • 在node9上停止mysql服務
killall -9 mysqld mysqld_safe
  • 在mha主機上會出現以下提示
[1]+  Done                    nohup masterha_manager --conf=/etc/masterha/app1.cnf &>>/data/masterha/app1/manager.log
  • 查看mha日誌
less /data/masterha/app1/manager.log
#出現如下內容
----- Failover Report -----

app1: MySQL Master failover 192.168.50.9(192.168.50.9:3306) to 192.168.50.10(192.168.50.10:3306) succeeded

Master 192.168.50.9(192.168.50.9:3306) is down!

Check MHA Manager logs at localhost.localdomain:/data/masterha/app1/manager.log for details.

Started automated(non-interactive) failover.
The latest slave 192.168.50.10(192.168.50.10:3306) has all relay logs for recovery.
Selected 192.168.50.10(192.168.50.10:3306) as a new master.
192.168.50.10(192.168.50.10:3306): OK: Applying all logs succeeded.
192.168.50.16(192.168.50.16:3306): This host has the latest relay log events.
Generating relay diff files from the latest slave succeeded.
192.168.50.16(192.168.50.16:3306): OK: Applying all logs succeeded. Slave started, replicating from 192.168.50.10(192.168.50.10:3306)
192.168.50.10(192.168.50.10:3306): Resetting slave info succeeded.
Master failover to 192.168.50.10(192.168.50.10:3306) completed successfully.
  • 修改node2(新的主節點)數據庫的內容,從節點會同步執行

    1. 停止MHA的方法:
masterha_stop --conf=/etc/masterha/app1.cnf
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章