MHA:Master High Availability 主節點高可用
一、基本介紹
場景: 一主多從複製架構中,主服務器宕機,自動在從服務器中選擇一個與主服務器複製數據最接近的提升爲主;
實現軟件工具MHA:
對主節點進行監控,可實現自動故障轉移至其它從節點;通過提升某一從節點爲新的主節點,基於主從複製實現,還需要客戶端配合實現,目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器
項目官網:
https://code.google.com/archive/p/mysql-master-ha/
集羣架構
二、搭建配置:
Manager 管理節點
1.安裝manger節點和node節點
[root@manager ~]#ll /data/
-rw-r--r-- 1 root root 87119 Nov 10 2017 mha4mysql-manager-0.56-0.el6.noarch.rpm
-rw-r--r-- 1 root root 36326 Nov 10 2017 mha4mysql-node-0.56-0.el6.noarch.rpm
[root@manager data]#yum install mha*.rpm
2.配置基於Key的SSHkey相互訪問
[root@manager data]#ssh-keygen
[root@manager ~]#ls -a .ssh/
. .. id_rsa id_rsa.pub
[root@manager ~]#ssh-copy-id 192.168.37.100
[root@manager ~]#ls .ssh/
authorized_keys id_rsa id_rsa.pub known_hosts
[root@manager ~]#scp -r .ssh/ 192.168.37.102:/root
[root@manager ~]#scp -r .ssh/ 192.168.37.103:/root
[root@manager ~]#scp -r .ssh/ 192.168.37.20:/root
3.配置MHA配置文件:配置文件位置可隨便指定
[root@manager ~]#mkdir /data/mha
[root@manager ~]#vim /data/mha/app1.cnf
[server default]
user=mhauser
password=centos
manager_workdir=/data/mastermha/app1
manager_log=/data/mastermha/app1/manager.log
remote_workdir=/data/mastermha/app1/
ssh_user=root
repl_user=replslave
repl_password=123456
ping_interval=1
[server1]
hostname=192.168.37.102
candidate_master=1
[server2]
hostname=192.168.37.103
candidate_master=1
[server3]
hostname=192.168.37.20
[root@manager ~]#masterha_check_ssh --conf=/data/mha/app1.cnf
Wed Jul 17 10:45:33 2019 - [info] All SSH connection tests passed successfully.
[root@manager ~]#masterha_check_repl --conf=/data/mha/app1.cnf
MySQL Replication Health is OK.
4.開啓MHA監控服務
#應通過如screen放入後臺執行,防止因遠程連接窗口關閉導致進程關閉!
[root@manager ~]#masterha_manager --conf=/data/mha/app1.cnf
Master 主節點
1.啓用主從複製功能,修改my.cnf
[root@master data]#vim /etc/my.cnf
[mysqld]
server-id=102
log-bin
skip_name_resolve=1
2.登錄數據庫,創建複製用戶以及管理節點管理賬戶
MariaDB [(none)]> show master logs;
+-------------------+-----------+
| Log_name | File_size |
+-------------------+-----------+
| master-bin.000001 | 329 |
+-------------------+-----------+
MariaDB [(none)]> grant replication slave on *.* to replslave@'192.168.37.%' identified by '123456';
MariaDB [(none)]> grant all on *.* to mhauser@'192.168.37.%' identified by 'centos';
3.安裝mha的node節點
[root@master data]#yum install mha*.rpm
Slave1 從節點
1.啓用主從複製功能,修改my.cnf
[root@slave1 ~]#vim /etc/my.cnf
[mysqld]
server-id=103
log-bin
read-only
relay_log_purge=0
skip_name_resolve=1
[root@slave1 ~]#systemctl restart mariadb
2.登錄數據庫,指定master主節點,並啓動服務
MariaDB [(none)]> change master to master_host='192.168.37.102',master_user='replslave',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=329;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
3.安裝mha的node節點
[root@master data]#yum install mha*.rpm
Slave2 從節點
1.啓用主從複製功能,修改my.cnf
[root@slave2 ~]#vim /etc/my.cnf
[mysqld]
server-id=20
log-bin
read-only
relay_log_purge=0
skip_name_resolve=1
[root@slave1 ~]#systemctl restart mariadb
2.登錄數據庫,指定master主節點,並啓動服務
MariaDB [(none)]> change master to master_host='192.168.37.102',master_user='replslave',master_password='123456',master_port=3306,master_log_file='master-bin.000001',master_log_pos=329;
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G
3.安裝mha的node節點
[root@master data]#yum install mha*.rpm
測試:
(一)測試原master服務宕機,MHA提升新主節點過程
1.開啓manager管理節點日誌跟蹤,持續查看
[root@manager ~]#tail -f /data/mastermha/app1/manager.log
檢測到原主已經宕機:
新主已經啓動:
2.master主服務器寫入數據
MariaDB [none] use test
create table testlog (id int auto_increment primary key,name char(10),age int default 20);
delimiter $$
create procedure sp_testlog()
begin
declare i int;
set i = 1;
while i <= 100000
do insert into testlog(name,age) values (concat('wang',i),i);
set i = i +1;
end while;
end$$
delimiter ;
MariaDB [test]> call sp_testlog;
3.主服務器寫入數據過程中,停掉主服務器的數據庫服務
[root@master ~]#systemctl stop mariadb
4.查看manager管理節點監控進程
前臺進程已經關閉
(二)測試提升新主前後,數據庫複製情況
1.查看主節點二進制日誌
[root@master ~]#mysqlbinlog /var/lib/mysql/master-bin.000001 -vvv
2.查看新主和從節點數據庫數據複製狀態
新主(Slave1)狀態
從(Slave)狀態: