(五)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自動的連線到了備用庫,驗證結果為通過。