天天看點

如何保障nginx的高可用性(keepalived)(五)

了解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://yq.aliyun.com/go/articleRenderRedirect?url=https%3A%2F%2Fwww.keepalived.org%2Fsoftware%2Fkeepalived-1.3.4.tar.gz 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已變成不死鳥

雲伺服器ECS位址:阿裡雲·雲小站

繼續閱讀