1. 程式人生 > >MySQL高可用之MHA

MySQL高可用之MHA

ha高可用 filter 保存 yum mysql 復制 ast 詳細 ima ssh

MHA,MySQL的高可用架構,在基於主從架構的模式下,當主服務器掛掉之後,由MHA中manager來決定從哪臺slave從服務器當中選擇一臺作為master主服務器,通常是比較從服務器中的數據,哪個最全,最新,更新時間的長短來判斷,當決定使用哪臺從服務器作為新的主服務器後,MHA會從其他節點處獲取額外信息,避免數據不一致的情況發生,使數據一致。

MHA有兩種角色:

1.MHA manager

用於統籌管理一個主從架構集群的master轉換,數據復制權限,以及數據庫操作權限等設置,通常作為單臺服務器進行配置。每一個master/slave集群都作為一個application。

2.MHA node

MySQL集群當中的節點,所有在該集群中的服務器都是一個節點,如manager,master,slave1,slave2四臺服務器,則有四個node節點。它通過監控具備解 析和清理 logs 功能的腳本來加快故障轉移。

MHA架構集群:

manager 172.16.25.104

master 172.16.25.101 server_id=11

slave1 172.16.25.102 server_id=22

slave2 172.16.25.103 server_id=33

①首先配置好一主兩從的數據庫架構,這一塊就不詳細描述了,需要註意的是,因為MHA高可用架構的關系,任何一臺MySQL服務器都有可能成為主服務器,所以不能像普通主從架構一般,給主服務器開啟binlog,給從服務器開啟relay_log,需要在主從服務器上都開啟binlog與relay_log。

如該/etc/my.cnf配置

技術分享圖片

②MHA高可用的實現首先需要構建主從集群,其次,需要將各個節點之間的ssh通信無障礙。

設置密鑰通信

如master172.16.25.101需要向其余三個節點傳送密鑰,使之能夠無密碼訪問

#ssh-keygen -t rsa -P ""

#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

#ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]

其余三個節點如是。

③安裝MHA

MHA manager

#yum install -y mha4mysql-manager-0.56-0.el6.noarch.rpm

該manager安裝需要依賴於許多epel源中的插件,聯網安裝

MHA node

#yum install -y mha4mysql-node-0.56-0.el6.noarch.rpm

四個節點都需要安裝


④配置manager,使manager能夠管理主從集群,手動設置一個配置文件

在/etc/masterha/app1.cnf(自定義)

技術分享圖片

server default針對於所有MySQL服務器的設置。

user,password用於對數據庫進行管理的賬號密碼,這個是需要在MySQL集群中,即master,slave1,slave2中授權。

技術分享圖片

ssh_user則是通信時使用的用戶,為root。

repl_user,repl_password用於主從數據庫之間復制轉移的賬戶密碼,當主服務器down後,從服務器起來,需要在從服務器中進行的change master授權。

manager_workdir,manager_log則是用於設置manager的工作目錄以及日誌存放路徑。

master_binlog_dir用於告訴managermaster的binlog日誌放置路徑。

ping_interval用於設置訪問的間隔,使用ping方式訪問。

server1,server2,server3則是三臺MySQL服務器,指定其hostname,可用IP地址代替,若要使用主機名,則需要將主機名寫入/etc/hosts中。

candidate_master=1,用於設置該服務器是否有資格成為主服務器,若為0則無資格。

MHA manager的安裝,會提供諸多工具程序,其常見的如下所示。

Manager 節點:

- masterha_check_ssh:MHA 依賴的 SSH 環境檢測工具;

- masterha_check_repl:MySQL 復制環境檢測工具;

- masterha_manager:MHA 服務主程序;

- masterha_check_status:MHA 運行狀態探測工具;

- masterha_master_monitor:MySQL master 節點可用性監測工具;

- masterha_master_switch:master 節點切換工具;

- masterha_conf_host:添加或刪除配置的節點;

- masterha_stop:關閉 MHA 服務的工具;

Node 節點:

- save_binary_logs:保存和復制 master 的二進制日誌;

- apply_diff_relay_logs:識別差異的中繼日誌事件並應用於其它 slave;

- filter_mysqlbinlog:去除不必要的 ROLLBACK 事件(MHA 已不再使用這個工具);

- purge_relay_logs:清除中繼日誌(不會阻塞 SQL 線程);

使用masterha_check_ssh測試通信環境是否正常

技術分享圖片

技術分享圖片

通信環境正常

使用masterha_check_repl測試數據庫之間復制是否正常

技術分享圖片

技術分享圖片

復制環境正常


開啟manager,放入後臺,並將輸出結果放置在manager.log中

技術分享圖片

將master 172.16.25.101mysqld,mysqld_safe服務停掉,查看主服務器是否變更

技術分享圖片

172.16.25.101 is down

經manager比較,172.16.25.102的數據最為接近,選定172.16.25.102即slave1作為新的master,並將數據與172.16.25.103同步


若172.16.25.101服務重新啟動,則需要將其與現任主服務器中的數據進行同步,授權後即可加入到該MySQL集群當中。

MySQL高可用之MHA