MYSQL高可用集羣架構-MHA架構

簡介node

MHA(Master High Availability)目前在MySQL高可用方面是一個相對成熟的解決方案,它由日本DeNA公司youshimaton(現就任於Facebook公司)開發,是一套優秀的做爲MySQL高可用性環境下故障切換和主從提高的高可用軟件。在MySQL故障切換過程當中,MHA能作到在0~30秒以內自動完成數據庫的故障切換操做,而且在進行故障切換的過程當中,MHA能在最大程度上保證數據的一致性,以達到真正意義上的高可用。mysql

 

該軟件由兩部分組成:MHA Manager(管理節點)和MHA Node(數據節點)。MHA Manager能夠單獨部署在一臺獨立的機器上管理多個master-slave集羣,也能夠部署在一臺slave節點上。MHA Node運行在每臺MySQL服務器上,MHA Manager會定時探測集羣中的master節點,當master出現故障時,它能夠自動將最新數據的slave提高爲新的master,而後將全部其餘的slave從新指向新的master。整個故障轉移過程對應用程序徹底透明。linux

 

在MHA自動故障切換過程當中,MHA試圖從宕機的主服務器上保存二進制日誌,最大程度的保證數據的不丟失,但這並不老是可行的。例如,若是主服務器硬件故障或沒法經過ssh訪問,MHA無法保存二進制日誌,只進行故障轉移而丟失了最新的數據。使用MySQL 5.5的半同步複製,能夠大大下降數據丟失的風險。MHA能夠與半同步複製結合起來。若是隻有一個slave已經收到了最新的二進制日誌,MHA能夠將最新的二進制日誌應用於其餘全部的slave服務器上,所以能夠保證全部節點的數據一致性。sql

 

目前MHA主要支持一主多從的架構,要搭建MHA,要求一個複製集羣中必須最少有三臺數據庫服務器,一主二從,即一臺充當master,一臺充當備用master,另一臺充當從庫,由於至少須要三臺服務器,出於機器成本的考慮,淘寶也在該基礎上進行了改造,目前淘寶TMHA已經支持一主一從。MHA 適合任何存儲引擎, 只要能主從複製的存儲引擎它都支持,不限於支持事物的 innodb 引擎。數據庫

官方介紹:https://code.google.com/p/mysql-master-ha/服務器

 下圖展現如何經過MHA Manager管理多組主從複製架構

能夠將MHA工做原理總結爲以下:app

(1)從宕機崩潰的master保存二進制日誌事件(binlog events);
(2)識別含有最新更新的slave;
(3)應用差別的中繼日誌(relay log)到其餘的slave;
(4)應用從master保存的二進制日誌事件(binlog events);
(5)提高一個slave爲新的master;
(6)使其餘的slave鏈接新的master進行復制;

 

MHA軟件由兩部分組成,Manager工具包和Node工具包,具體的說明以下。ssh

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線程)

注意:

爲了儘量的減小主庫硬件損壞宕機形成的數據丟失,所以在配置MHA的同時建議配置成MySQL 5.5的半同步複製。關於半同步複製原理各位本身進行查閱。(不是必須)

 

1.部署MHA

接下來部署MHA,具體的搭建環境以下(全部操做系統均爲CentOS7.4 64bit):

IP地址

主機名

角色

軟件

192.168.1.30

linzi

manager

mha4mysql-manager、mha4mysql-node

192.168.1.25

KVM1

master

mha4mysql-node

192.168.1.26

KVM2

Slave1,Candicate master

mha4mysql-node

192.168.1.27

KVM3

Slave2

mha4mysql-node

 

其中master對外提供寫服務,備選Candicate master(實際爲slave1)提供讀服務,slave2也提供讀服務,一旦master宕機,將會把備選master提高爲新的master,slave指向新的master

 

(1)在全部節點安裝MHA node所需的perl模塊(DBD:mysql),安裝腳本以下: 

先要安裝epel源,

Centos6安裝源:rpm -ivh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm

Centos7安裝源: rpm -ivh http://www.rpmfind.net/linux/epel/7/x86_64/Packages/e/epel-release-7-11.noarch.rpm

如下設置爲CentOS6操做:

[epel]
name=Extra Packages for Enterprise Linux 6 - $basearch
baseurl=http://download.fedoraproject.org/pub/epel/6/$basearch #將註釋的#去掉
#mirrorlist=https://mirrors.fedoraproject.org/metalink?repo=epel-6&arch=$basearch#前面加上#

yum clean all yum list

使用yum安裝所有依賴

yum -y install perl-DBD-MySQL perl-Config-Tiny perl-Log-Dispatch perl-Parallel-ForkManager --skip-broken

 

(2)上傳MHA相關包,在全部的節點安裝mha-node:

相關文章
相關標籤/搜索