更新:本次更新是修複本文圖檔不顯示問題。
了解keepalived
- 基于VRRP協定:路由器和作業系統層面的協定,虛拟路由器動态轉移IP;
- 需要安裝keepalived軟體;
- 需要配置:有主備(master/backup)兩個角色,可以配置多重定期監控來實作應用的高可用性;
- keepalived指令直接指定配置檔案啟動,生産環境需要配置自啟動。
不僅可以做Nginx的高可用,也可以做其他的例如Mysql高可用。
一個機器可以綁定多個IP,可以在Nginx上使用keepalived綁定一個虛拟IP,當某一台Nginx出現問題,這個虛拟IP就會自動轉移到另一台。
高可用故障切換轉移原理
Keepalived高可用故障切換,是通過VRRP虛拟路由器備援協定來實作的。
在Keepalived服務正常工作時,主Master節點會不斷地向備節點發送(多點傳播的方式)心跳消息,用以告訴備Backup節點自己還活着,當主Master節點發生故障時,就無法發送心跳消息,備節點無法檢測到來自主Master節點心跳了,于是調用自身的接管程式,接管主Master節點的IP資源及服務。而當主Master節點恢複時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢複到原來的備用角色。
VRRP協定
虛拟路由備援協定,可以認為是實作路由器高可用的協定,即将N台提供相同功能的路由器組成一個路由器組,這個組裡面有一個master和多個backup,master上面有一個對外提供服務的vip(該路由器所在區域網路内其他機器的預設路由/網關為該vip),master會發多點傳播,當backup收不到vrrp包時就認為master宕掉了,這時就需要根據VRRP的優先級來選舉一個backup當master。這樣的話就可以保證路由器的高可用了。
keepalived主要有三個子產品
分别是core、check和vrrp。 core子產品為keepalived的核心,負責主程序的啟動、維護以及全局配置檔案的加載和解析。 check負責健康檢查,包括常見的各種檢查方式。 vrrp子產品是來實作VRRP協定的。
傳統的高可用思路
tomcat的高可用的思路,是在tomcat叢集前面加一層負載服務nginx。如下圖
這種做法,解決了tomcat的高可用問題。但是引入了前面的負載機器的高可用問題(Nginx如果挂了,玩完)
如果nginx沿用此思路,總會有一個最前端是單機的,存在當機玩完的風險(雞生蛋蛋生雞無窮盡)
15.2. lvs 思想解決高可用問題
如上圖,由伺服器叢集虛拟出來一台 虛拟網關vip(不真實存在,自然不存在當機問題),
此vip由兩台機器共同協商生成。當有一台機器當機時,另一台機器一樣能維持vip。這保證了,隻要兩台機器不同時當機,vip就存在
15.3. keepalived配置LVS過程
前提
1.關閉selinux,打開/etc/sysconfig/selinux設定其中值 à SELINUX=disabled
2.安裝必須的依賴包
yum -y install libnl libnl-devel libnfnetlink-devel
keepalived安裝
下載下傳源碼包--不能使用yum方式安裝(有bug) --wget
https://www.keepalived.org/software/keepalived-1.3.4.tar.gz配置(指定安裝目錄和配置目錄,否則檔案太散亂) --./configure --prefix=/usr/local/keepalived --sysconf=/etc
make && make install
keepalived主機配置
打開/etc/keepalived/keepalived.conf,隻需要配置如下一段。(其它是多餘配置,删除)
啟動keepalived,檢視機器ip位址,可發現多出一個244.200的ip
此時,使用原ip位址244.253能打開的頁面,使用244.200也能打開
keepalived從機配置
從機配置與主機過程完全一樣,配置檔案内以下辨別id與優先級稍作變化即可
啟動從機的keepalived後,可發現其ip位址無變化
keepalived校驗LVS效果
1、此時,殺掉主機上的keepalived,244.200的ip将從主機上消失。而出現的從機的ip中
2、再次啟動主機的keepalived,244.200的ip将被主機重新奪回
3、此效果是單主單備方式。備機資源有一定的浪費。可以重複前面的動作,虛拟出第二個ip,将主從機優先級颠倒,進而利用起備機服務
keepalived監控服務軟體
以上操作中,keepalived很好的實作了LVS功能,即叢集機器共同虛拟一個vip,并實作在叢集中自動漂移。
但假如實體機狀況良好,并不能保障其上運作的服務軟體ok,是以需要借助keepalived來監控服務軟體。
a、使用keepalived來監控nginx
編輯一個sh監控腳本,sh腳本:
#!/bin/bash
A=`ps -C nginx --no-header |wc -l` #統計nginx程序是否存在
if [ $A -eq 0 ];then #為0,表明nginx停止了
/usr/local/nginx/sbin/nginx #嘗試重新開機nginx
if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then #nginx重新開機失敗,則keepalived自殺,進行VIP轉移
killall keepalived #殺掉,vip就漫遊到另一台機器
fi
fi
b、在配置檔案中加入以下兩處配置:
c、重新開機keepalived,測試監控效果,如下圖操作:
nginx已變成不死鳥