1. 程式人生 > >(五)mysql高可用搭建,keepalived配置

(五)mysql高可用搭建,keepalived配置

(一)使用主主複製

在前面的文章裡我們搭建了mysql主從複製,主主複製,多從節點的負載均衡,下面我們用圖來表示出來:

 

如圖,所有的讀操作到haproxy,寫操作到Master主庫,讀寫庫分離,提高效能,同時,多個從庫能提高讀效能,而且還實現了資料備份。

那麼,主主複製在上述架構中體現什麼作用呢?為什麼要使用兩個Master主主同步呢?

是實現資料熱備嗎?不是,因為主從就實現了熱備。

在圖中可以看到寫操作的目標只有一個庫,如果這個庫宕機或者出現問題了,那麼會導致我們整個專案都癱瘓,直接導致專案的所有寫操作不能正常使用,雖然能讀資料。

所以可以使用另外一個Master庫做備庫,如果第一個Master宕機,就實時把所有寫操作切換到預備好的Master庫,這樣,就算其中有一個出問題也能保證整個專案正常運作。

怎麼保證出現問題時兩個Master之間實現智慧切換?實現高可用?

我們使用Keepalived實現。

(二)Keepalived是什麼

   Keepalived是Linux下一個輕量級別的高可用解決方案。高可用(High Avalilability,HA),其實兩種不同的含義:廣義來講,是指整個系統的高可用行,狹義的來講就是之主機的冗餘和接管

Keepalived高可用故障切換轉移原理:

Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗餘協議)來實現的。

  在 Keepalived服務正常工作時,主 Master節點會不斷地向備節點發送(多播的方式)心跳訊息,用以告訴備Backup節點自己還活看,當主 Master節點發生故障時,就無法傳送心跳訊息,備節點也就因此無法繼續檢測到來自主 Master節點的心跳了,於是呼叫自身的接管程式,接管主Master節點的 IP資源及服務。而當主 Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。

(三)Keepalived搭建

引入keepalived之後,我們重新架構上圖:

接下來我們來搭建Keepalived,實現高可用

 

首先搭建好兩Master,Master1和Master2,實現主主複製,之前的文章中有過程。

下載Keepalived,http://www.keepalived.org/download.html,下載keepalived-2.0.8.tar

(由於最新版本2.0.8安裝出現問題,改用了1.3.5版本安裝)

把tar包傳輸到Master1和Master2節點linux伺服器中,這裡都放在/root/soft下:

進行解壓:

進入到解壓目錄,執行configure檢測安裝環境:

 

檢測,沒有c編譯器,使用yum安裝編譯器yum install gcc-c++;

還需要安裝openssl:yum install openssl openssl-devel

再次./configure檢測發現this build will not support ipvs with ipv6,依次安裝:yum -y install libnl libnl-devel,yum install -y libnfnetlink-devel可解決

然後再編譯和安裝Keepalived:make && make install

安裝完檢視Keepalived的配置檔案和可執行檔案:

配置檔案:/usr/local/etc/keepalived/keepalived.conf

執行檔案:/usr/local/sbin/keepalived

安裝完keepalived之後進行配置:

分配ip:Master1的Iip為:192.168.199.166,Master2的ip為192.168.199.167

我們還需要虛擬出一個節點,我們設定它的ip為192.168.199.200

再來編輯keepalived.conf配置檔案,先只保以下內容:

 

啟用的節點(主庫)配置:

備份的節點配置:

兩個節點的happalived的配置有所不同,virtual_ipaddress中的ip為之前指定好的虛擬節點的ip

再啟動兩keepalived,./keepalived -D -f /usr/local/etc/keepalived/keepalived.conf

啟動成功
啟動之後檢視keepalived程序,有三個程序:

再看主庫的ip資訊,用命令ip a檢視資訊,可以看到多了一個inet,這就是之前配置的虛擬節點,而備庫節點則沒有:

表示啟動成功。

 

接下來我們用虛擬ip來連線mysql,使用者名稱密碼為兩主節點mysql共同有的使用者,即可登陸msyql

我們用一張表的有無來區別兩msyql,啟用的有product表,備庫沒有product表:

啟用庫
​​​​​備庫

 我們用另外一個虛擬機器的mysql來連線我們在keepalived中設定的ip,連線之後:

連線之後發現有product表,說明正是我們要連線的主庫。

 

(三)驗證Keepalived

搭建完成,我們來驗證keepalived

我們手動的模擬主庫節點出現問題,宕機了,再看連線的是哪個庫

把主庫的keepalived程序直接關閉:

可以看到把keepalived程序kill之後,ip a中沒有了虛擬節點。

再看備庫節點:

在備庫節點中出現了虛擬節點。

 

我們再來連線設定的虛擬節點:

可以看到,此時連線到的是備庫

當主庫宕機時,keepalived自動的連線到了備用庫,驗證結果為通過。