????????????? MySQLMHA高可用環境搭建
簡介:
MHA(Master High
Availability)目前在MySQL高可用方面是一個相對成熟的解決方案。
該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager可以單獨部署在一臺獨立的機器上管理多個master-slave集群,也可以部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集群中的master節點,當master出現故障時,它可以自動將最新數據的slave提升為新的master,然后將所有其他的slave重新指向新的master。整個故障轉移過程對應用程序完全透明。
目前MHA主要支持一主多從的架構,要搭建MHA,要求一個復制集群中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另外一臺充當從庫,因為至少需要三臺服務器。
官方介紹:https://code.google.com/p/mysql-master-ha/
圖01展示了如何通過MHA Manager管理多組主從復制??梢詫HA工作原理總結為如下:
(1)從宕機崩潰的master保存二進制日志事件(binlog events);
(2)識別含有最新更新的slave;
(3)應用差異的中繼日志(relay log)到其他的slave;
(4)應用從master保存的二進制日志事件(binlog events);
(5)提升一個slave為新的master;
(6)使其他的slave連接新的master進行復制;
MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明如下。
Manager工具包主要包括以下幾個工具:
復制代碼
masterha_check_ssh????????????? 檢查MHA的SSH配置狀況
masterha_check_repl???????????? 檢查MySQL復制狀況
masterha_manger???????????????? 啟動MHA
masterha_check_status?????????? 檢測當前MHA運行狀態
masterha_master_monitor???????? 檢測master是否宕機
masterha_master_switch????????? 控制故障轉移(自動或者手動)
masterha_conf_host????????????? 添加或刪除配置的server信息
復制代碼
Node工具包(這些工具通常由MHA
Manager的腳本觸發,無需人為操作)主要包括以下幾個工具:
save_binary_logs??????????????? 保存和復制master的二進制日志
apply_diff_relay_logs?????????? 識別差異的中繼日志事件并將其差異的事件應用于其他的slave
filter_mysqlbinlog????????????? 去除不必要的ROLLBACK事件(MHA已不再使用這個工具)
purge_relay_logs??????????????? 清除中繼日志(不會阻塞SQL線程)
部署
角色??????????????? IP地址?????????????
=========================?
Master????????????? 192.168.60.57?
Slave?????????????? 192.168.60.58???
Slave?????????????? 192.168.60.59????
Monitor host??????? 192.168.60.59
[if !supportLists]1.? [endif]Mysql 服務器安裝部署
?分別在三臺機器上分別部署mysql(基于GTID,ROW模式)
參照鏈接http://www.cnblogs.com/zfxJava/p/6004188.html配置
用戶名和密碼設置相同root/Pnt2017
[if !supportLists]2.? [endif]把上面的三個mysql節點配置成1主兩從(192.168.60.57主,192.168.60.58從,192.168.60.59從)
1、配置主庫:
1)、授權給從數據庫服務器
在192.168.60.57,192.168.60.58上
mysql> GRANTREPLICATION SLAVE ON *.* to 'rep'@'192.168.60.%' identified by 'reppasswd';
mysql>FLUSHPRIVILEGES;
2、配置從庫:
分別在192.168.60.58,192.168.60.59上
mysql>stopslave;
mysql> CHANGEMASTER TO MASTER_HOST='192.168.60.57', MASTER_USER='rep',MASTER_PASSWORD='reppasswd', MASTER_AUTO_POSITION=1;
mysql>startslave;
mysql> showslave status\G;
查看slave的狀態,如果下面兩項值為YES,則表示配置正確:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
三臺機器相互免密登錄配置
分別在192.168.60.57,192.168.60.58,192.168.60.59上執行下面的
sudo su - root
ssh-keygen 一直按回車
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.57
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.58
ssh-copy-id -i /root/.ssh/id_rsa -p 22 root@192.168.60.59
驗證免密碼登錄配置成功:
在192.168.60.57,192.168.60.58,192.168.60.59上執行,sshroot@192.168.60.58;sshroot@192.168.60.59;ssh root@192.168.60.57如果不提示輸入密碼則表示配置好了;
創建MHA管理用戶,在master192.168.60.57上創建。
mysql> grant all privileges on *.* to
'mha'@'192.168.60.%' identified? by 'mhapwd';? ??
mysql> flush? privileges;
Mha node和管理節點安裝部署
1.把虛IP漂移perl腳本,mha 檢測腳本,mha管理節點,mha node節點ftp到服務器/home/admin/soft
Mha node安裝
在192.168.60.57,192.168.60.58,192.168.60.59
? 查看perl版本號
perl -MShell -e "print\"module installed\n\""
perl -Mperl-DBD-MySQL -e?"print\"moduleinstalled\n\""
安裝perl支持包
yum -y install perl-DBD-MySQL ncftp perl-DBI
安裝mha node軟件包
rpm -ivh mha4mysql-node-0.57-0.el7.noarch.rpm
Mha manager安裝以及配置
在192.168.60.59上
[if !supportLists]1.????[endif]確認你的CentOS?的版本首先通過以下命令確認你的CentOS?版本
$?cat?/etc/redhat-release?CentOS?release?6.4?(Final)
2.
下載EPEL?的rpm?安裝包現在從上面的地址下載CentOS?版本所對應的EPEL?的版本
$?wgethttp://download.fedoraproject.org/pub/epel/6/i386/epel-release-6-8.noarch.rpm
3.?安裝EPEL
通過以下命令安裝EPEL?軟件包
$?sudo?rpm?-ivh?epel-release-6-8.noarch.rpm
安裝perl支持軟件包
yum -y install perl-Cofig-Tiny perl-Time-HiRes.x86_64perl-Parallel-ForkManager perl-Log-Dispatch-Perl.noarch perl-DBD-MySQL ncftp
安裝mha manager
rpm -ivh mha4mysql-manager-0.57......rpm
在主節點192.168.60.57上創建虛IP
/sbin/ifconfig eth0:1 192.168.60.90/24
用ip addr 查看配置情況
注釋掉(刪除VIP:/sbin/ifconfig eth0:1 down)
mha管理節點配置
在192.168.60.59上
mkdir -p /etc/mha
mkdir -p ?/home/mysql_mha
cd /etc/mha
vi mysql_mha.cnf
[server default]
user=mha
password=mhapwd
manager_workdir=/mnt/db/mysql_mha
manager_log=/mnt/db/mysql_mha/manager.log
remote_workdir=/mnt/db/mysql_mha
ssh_user=root
repl_user=rep
repl_password=reppasswd
ping_interval=1
master_binlog_dir=/mnt/db/mysql/data
master_ip_failover_script=/usr/bin/mha_master_ip_failover.pl
secondary_check_script=/usr/bin/masterha_secondary_check-s 192.168.60.58 -s 192.168.60.59 -s 192.168.60.57
[server1]
hostname=192.168.60.57
candidate_master=1
[server2]
hostname=192.168.60.58
candidate_master=1
[server3]
hostname=192.168.60.59
no_master=1
mha manager檢測命令以及啟動監控
[if !supportLists]1.??? [endif]檢查SSH配置(node5 Monitor 監控節點上操作),如下:
# masterha_check_ssh--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]2.??? [endif]檢查整個復制環境狀況(node5 監控節點上操作),如下:
# masterha_check_repl--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]3.????[endif]開啟MHA Manager監控()如下:
# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1 &
參數說明:?
--remove_dead_master_conf??? #該參數代表當發生主從切換后,老的主庫的ip將會從配置文件中移除。???
--manger_log????????????????? #日志存放位置???
--ignore_last_failover??????? #在缺省情況下,如果MHA檢測到連續發生宕機,會生成mysql_mha.failover.complete文件,會造成MHA管理進程無法啟動。
4. 查看MHA Manager監控是否正常:
# masterha_check_status --conf=/etc/mha/mysql_mha.cnf?
5. 查看啟動日志(node5操作)如下:
# tail -n20 /mnt/db/mysql_mha/manager.log
6. 關閉MHA Manage監控:
(1) 關閉
# masterha_stop --conf=/etc/mha/mysql_mha.cnf
(2) 啟動
# nohup masterha_manager --conf=/etc/mha/mysql_mha.cnf--remove_dead_master_conf --ignore_last_failover < /dev/null> /mnt/db/mysql_mha/manager.log 2>&1
六、MHA Failover切換
1. 自動Failover切換
(1) 模擬master mysql關閉
在192.168.60.57上執行servicemysqld stop
?(2)VIP將會切換到node2???
(3) /etc/mha/mysql_mha.cnf中將原主服務器配置文件清掉。???
(4) masterha_manager監控進程會自動退出關閉,并在/mnt/db/mysql_mha下生成mysql_mha.failover.complete文件,manager.log會記錄全過程,從服務器會自動從新的主服務器復制。???
(5) 原主服務器mysqld啟動的,需要清掉/mnt/db/mysql_mha 下生成mysql_mha.failover.complete文件,添加node1配置文件到/etc/mha/mysql_mha.cnf,通過manager.log中的記錄的故障點,重新同步主服務器,成為從節點。
在57上用ip addr 查看虛IP是否 漂移
在58上用ip addr查看虛IP 90是否漂移過來
在59上執行show slave
status\G 查看主節點是否已經是58了.
重啟57上的mysql 服務:service mysqld restart;
mysql -uroot -pPnt2017
mysql>stop slave;
mysql> CHANGE MASTER TOMASTER_HOST='192.168.60.58', MASTER_USER='rep', MASTER_PASSWORD='Pnt2017',MASTER_AUTO_POSITION=1;
mysql>start slave;
mysql> show slave status\G;
可以看到57的主節點已經是58了,后續可以類似的down掉58上的mysql 服務,虛IP飄到57上,主節點切到57上;
也可以進行手動切換命令如下:
masterha_master_switch--master_state=dead --conf=/etc/mha/mysql_mha.cnf--dead_master_host=192.168.60.57 --dead_master_port=3306--new_master_host=192.168.60.58 --new_master_port=3306 --ignore_last_failover
參考鏈接:http://www.linuxidc.com/Linux/2016-05/130925.htm
http://www.cnblogs.com/gomysql/p/3675429.html