MySQLMHA高可用環(huán)境搭建

????????????? 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

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容