????????????? MySQLMHA高可用環(huán)境搭建
簡(jiǎn)介:
MHA(Master High
Availability)目前在MySQL高可用方面是一個(gè)相對(duì)成熟的解決方案。
該軟件由兩部分組成:MHA Manager(管理節(jié)點(diǎn))和MHA Node(數(shù)據(jù)節(jié)點(diǎn))。MHA Manager可以單獨(dú)部署在一臺(tái)獨(dú)立的機(jī)器上管理多個(gè)master-slave集群,也可以部署在一臺(tái)slave節(jié)點(diǎn)上。MHA Node運(yùn)行在每臺(tái)MySQL服務(wù)器上,MHA Manager會(huì)定時(shí)探測(cè)集群中的master節(jié)點(diǎn),當(dāng)master出現(xiàn)故障時(shí),它可以自動(dòng)將最新數(shù)據(jù)的slave提升為新的master,然后將所有其他的slave重新指向新的master。整個(gè)故障轉(zhuǎn)移過程對(duì)應(yīng)用程序完全透明。
目前MHA主要支持一主多從的架構(gòu),要搭建MHA,要求一個(gè)復(fù)制集群中必須最少有三臺(tái)數(shù)據(jù)庫服務(wù)器,一主二從,即一臺(tái)充當(dāng)master,一臺(tái)充當(dāng)備用master,另外一臺(tái)充當(dāng)從庫,因?yàn)橹辽傩枰_(tái)服務(wù)器。
官方介紹:https://code.google.com/p/mysql-master-ha/
圖01展示了如何通過MHA Manager管理多組主從復(fù)制??梢詫HA工作原理總結(jié)為如下:
(1)從宕機(jī)崩潰的master保存二進(jìn)制日志事件(binlog events);
(2)識(shí)別含有最新更新的slave;
(3)應(yīng)用差異的中繼日志(relay log)到其他的slave;
(4)應(yīng)用從master保存的二進(jìn)制日志事件(binlog events);
(5)提升一個(gè)slave為新的master;
(6)使其他的slave連接新的master進(jìn)行復(fù)制;
MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明如下。
Manager工具包主要包括以下幾個(gè)工具:
復(fù)制代碼
masterha_check_ssh????????????? 檢查MHA的SSH配置狀況
masterha_check_repl???????????? 檢查MySQL復(fù)制狀況
masterha_manger???????????????? 啟動(dòng)MHA
masterha_check_status?????????? 檢測(cè)當(dāng)前MHA運(yùn)行狀態(tài)
masterha_master_monitor???????? 檢測(cè)master是否宕機(jī)
masterha_master_switch????????? 控制故障轉(zhuǎn)移(自動(dòng)或者手動(dòng))
masterha_conf_host????????????? 添加或刪除配置的server信息
復(fù)制代碼
Node工具包(這些工具通常由MHA
Manager的腳本觸發(fā),無需人為操作)主要包括以下幾個(gè)工具:
save_binary_logs??????????????? 保存和復(fù)制master的二進(jìn)制日志
apply_diff_relay_logs?????????? 識(shí)別差異的中繼日志事件并將其差異的事件應(yīng)用于其他的slave
filter_mysqlbinlog????????????? 去除不必要的ROLLBACK事件(MHA已不再使用這個(gè)工具)
purge_relay_logs??????????????? 清除中繼日志(不會(huì)阻塞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 服務(wù)器安裝部署
?分別在三臺(tái)機(jī)器上分別部署mysql(基于GTID,ROW模式)
參照鏈接http://www.cnblogs.com/zfxJava/p/6004188.html配置
用戶名和密碼設(shè)置相同root/Pnt2017
[if !supportLists]2.? [endif]把上面的三個(gè)mysql節(jié)點(diǎn)配置成1主兩從(192.168.60.57主,192.168.60.58從,192.168.60.59從)
1、配置主庫:
1)、授權(quán)給從數(shù)據(jù)庫服務(wù)器
在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的狀態(tài),如果下面兩項(xiàng)值為YES,則表示配置正確:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
三臺(tái)機(jī)器相互免密登錄配置
分別在192.168.60.57,192.168.60.58,192.168.60.59上執(zhí)行下面的
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
驗(yàn)證免密碼登錄配置成功:
在192.168.60.57,192.168.60.58,192.168.60.59上執(zhí)行,sshroot@192.168.60.58;sshroot@192.168.60.59;ssh root@192.168.60.57如果不提示輸入密碼則表示配置好了;
創(chuàng)建MHA管理用戶,在master192.168.60.57上創(chuàng)建。
mysql> grant all privileges on *.* to
'mha'@'192.168.60.%' identified? by 'mhapwd';? ??
mysql> flush? privileges;
Mha node和管理節(jié)點(diǎn)安裝部署
1.把虛IP漂移perl腳本,mha 檢測(cè)腳本,mha管理節(jié)點(diǎn),mha node節(jié)點(diǎn)ftp到服務(wù)器/home/admin/soft
Mha node安裝
在192.168.60.57,192.168.60.58,192.168.60.59
? 查看perl版本號(hào)
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]確認(rèn)你的CentOS?的版本首先通過以下命令確認(rèn)你的CentOS?版本
$?cat?/etc/redhat-release?CentOS?release?6.4?(Final)
2.
下載EPEL?的rpm?安裝包現(xiàn)在從上面的地址下載CentOS?版本所對(duì)應(yīng)的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
在主節(jié)點(diǎn)192.168.60.57上創(chuàng)建虛IP
/sbin/ifconfig eth0:1 192.168.60.90/24
用ip addr 查看配置情況
注釋掉(刪除VIP:/sbin/ifconfig eth0:1 down)
mha管理節(jié)點(diǎn)配置
在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檢測(cè)命令以及啟動(dòng)監(jiān)控
[if !supportLists]1.??? [endif]檢查SSH配置(node5 Monitor 監(jiān)控節(jié)點(diǎn)上操作),如下:
# masterha_check_ssh--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]2.??? [endif]檢查整個(gè)復(fù)制環(huán)境狀況(node5 監(jiān)控節(jié)點(diǎn)上操作),如下:
# masterha_check_repl--conf=/etc/mha/mysql_mha.cnf
[if !supportLists]3.????[endif]開啟MHA Manager監(jiān)控()如下:
# 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 &
參數(shù)說明:?
--remove_dead_master_conf??? #該參數(shù)代表當(dāng)發(fā)生主從切換后,老的主庫的ip將會(huì)從配置文件中移除。???
--manger_log????????????????? #日志存放位置???
--ignore_last_failover??????? #在缺省情況下,如果MHA檢測(cè)到連續(xù)發(fā)生宕機(jī),會(huì)生成mysql_mha.failover.complete文件,會(huì)造成MHA管理進(jìn)程無法啟動(dòng)。
4. 查看MHA Manager監(jiān)控是否正常:
# masterha_check_status --conf=/etc/mha/mysql_mha.cnf?
5. 查看啟動(dòng)日志(node5操作)如下:
# tail -n20 /mnt/db/mysql_mha/manager.log
6. 關(guān)閉MHA Manage監(jiān)控:
(1) 關(guān)閉
# masterha_stop --conf=/etc/mha/mysql_mha.cnf
(2) 啟動(dòng)
# 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. 自動(dòng)Failover切換
(1) 模擬master mysql關(guān)閉
在192.168.60.57上執(zhí)行servicemysqld stop
?(2)VIP將會(huì)切換到node2???
(3) /etc/mha/mysql_mha.cnf中將原主服務(wù)器配置文件清掉。???
(4) masterha_manager監(jiān)控進(jìn)程會(huì)自動(dòng)退出關(guān)閉,并在/mnt/db/mysql_mha下生成mysql_mha.failover.complete文件,manager.log會(huì)記錄全過程,從服務(wù)器會(huì)自動(dòng)從新的主服務(wù)器復(fù)制。???
(5) 原主服務(wù)器mysqld啟動(dòng)的,需要清掉/mnt/db/mysql_mha 下生成mysql_mha.failover.complete文件,添加node1配置文件到/etc/mha/mysql_mha.cnf,通過manager.log中的記錄的故障點(diǎn),重新同步主服務(wù)器,成為從節(jié)點(diǎn)。
在57上用ip addr 查看虛IP是否 漂移
在58上用ip addr查看虛IP 90是否漂移過來
在59上執(zhí)行show slave
status\G 查看主節(jié)點(diǎn)是否已經(jīng)是58了.
重啟57上的mysql 服務(wù):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的主節(jié)點(diǎn)已經(jīng)是58了,后續(xù)可以類似的down掉58上的mysql 服務(wù),虛IP飄到57上,主節(jié)點(diǎn)切到57上;
也可以進(jìn)行手動(dòng)切換命令如下:
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