1. 程式人生 > >keepalived 雙機熱備

keepalived 雙機熱備

keepalived 高可用

1. keepalived 雙機熱備的原理

首先,要知道 keepalived 有三個模塊,分別是core、check和vrrp。其中core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析,check模塊負責健康檢查,vrrp模塊是來實現VRRP協議的。

keepalived 工作在網絡層,通過VRRP 協議,將信號廣播到網絡內的所有機器。當網絡組中的主機收到廣播後,就會檢測自己的優先級,如果發現本機的優先級是最高,則將VIP綁定到本機的網卡。

所以,keepalived 軟件主要是靠VRRP 協議通信。所以,當keepalived 機器組裏的機器不能正常通信後,就會出現腦裂問題——即有兩臺以上的主機在搶占VIP 。

keepalived 通常用在組建雙機熱備,當master 出現故障後,備機會獲得vip綁定,替代出現故障的機器提供服務。當然熱備的主機數量可以不止兩臺。

2. 搭建雙機熱備的思路

有兩臺nginx 提供web服務功能,在nginx 服務器上各安裝keepalived 軟件,其中一臺配置為master,另一臺配置成backup。keepalived 的配置文件可以統一完成這些需求。keepalived 還可以自定義檢測nginx健康情況的腳本。這個檢測nginx的腳本功能是,當keepalive發現nginx服務出現問題後,先嘗試重啟nginx服務,如果重啟nginx服務失敗,則keepalived 軟件自動停止。當keepalived 停止工作後,master主機將不再對網絡組內的機器發送vrrp 廣播。這時,其他的backup 主機,就會根據優先值大小,較大優先值的主機有權將vip 綁定到自己的網卡。這個切換過程是自動完成,對請求服務的客戶來說,幾乎察覺不到。

3. keepalived 搭建雙機熱備的過程

3.1. 搭建環境說明

兩臺 centos7 系統的主機 : cenvm71 和 cenvm72

3.2. 在兩臺主機上安裝keepalived 軟件

yum  install   -y   keepalived 

說明,安裝keepalived 的方法有很多,除了用yum 安裝,也可以下載安裝包,經過編譯安裝。

3.3. 在兩臺機器上安裝nginx 服務

為了簡化測試的過程,我這裏直接用yum 安裝nginx 服務

1. 安裝:
yum  install  -y   nginx

2. 修改 html 頁面用於後面的測試:
vi   /var/share/nginx/html/index.html
分別在兩臺主機的nginx 的默認html頁面寫入不同的內容,只要能區分兩臺服務器就可以了。

3. 啟動nginx
   systemctl   start   nginx 

3.4. 修改master 主機的keepalived 配置文件

keepalived 的配置文件所在路徑,默認安裝的,在 /etc/keepalived/ 目錄

[root@cenvm71 default]# cat  /etc/keepalived/keepalived.conf 
global_defs {              # global_defs 這個模塊的設置不需要管
   notification_email {
     [email protected]      # 這個是郵件設置,當主機的 keepalived 有問題後,將發郵件
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"     #  這是用來檢測nginx 服務健康情況的腳本,需要自己寫
    interval 3                                             #   檢測時間間隔是3秒
}
vrrp_instance VI_1 {
    state MASTER                                 # master 名字
    interface  eno16777736                   # 綁定的網卡,網卡名字根據自己機器而不同
    virtual_router_id 51                          # 工作組號,master 和 backup 所有的機器配置都一樣,表示工作在一個組內
    priority 100                                  # 這個就是 優先級,範圍0-255,值越大優先級越高
    advert_int 1
    authentication {
        auth_type PASS    
        auth_pass hell>com                    # 用於傳輸認證,master 和 backup 上都要一樣
    }
    virtual_ipaddress {
        192.168.188.109                        # 這個是虛擬 ip 地址,即 vip ,實際生產環境是一個對外的外網 IP;
    }
    track_script {
        chk_nginx                  # 監測調用的模塊,就是上面  vrrp_script 模塊的名字。調用腳本,檢查nginx 服務。
    }
}

3.5. 修改 backup 主機上的keepalived 配置文件

backup 主機上的配置文件和 master 主機的幾乎一致,只需要修改 優先級即可,最好根據自己的實際情況修改。

[root@cenvm72 html]# cat /etc/keepalived/keepalived.conf 
global_defs {
   notification_email {
     [email protected]
   }
   notification_email_from [email protected]
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id LVS_DEVEL
}
vrrp_script chk_nginx {
    script "/usr/local/sbin/check_ng.sh"    # 腳本,用來監測 nginx 服務的工作情況。
    interval 3
}
vrrp_instance VI_1 {
    state BACKUP
    interface eno16777736
    virtual_router_id 51
    priority 90                                # 這裏的優先級比 master 上的要低
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass hell>com
    }
    virtual_ipaddress {
        192.168.188.109
    }
    track_script {
        chk_nginx
    }
}

3.6. 在master 和 backup 上創建 nginx服務監測腳本

[root@cenvm72 html]# cat /usr/local/sbin/check_ng.sh 
#時間變量,用於記錄日誌
d=`date --date today +%Y%m%d_%H:%M:%S`
#計算nginx進程數量
n=`ps -C nginx --no-heading|wc -l`
#如果進程為0,則啟動nginx,並且再次檢測nginx進程數量,
#如果還為0,說明nginx無法啟動,此時需要關閉keepalived
if [ $n -eq "0" ]; then
        systemctl start nginx
        n2=`ps -C nginx --no-heading|wc -l`
        if [ $n2 -eq "0"  ]; then
                echo "$d nginx down,keepalived will stop" >> /var/log/check_ng.log
                systemctl stop keepalived
        fi
fi

4. 測試 keepalived 高可用

首先看看兩臺主機的ip :

ip   add   show

技術分享圖片
可以看到在 master 上,已經出現vip 192.168.188.109 被綁定在網卡上了。

在瀏覽器訪問一下 vip 192.168.188.109:
技術分享圖片
可以看到,現在訪問的nginx服務是master 主機(cenvm71)上的html頁面。

將cenvm71 主機上的keepalived 服務停止:

systemctl   stop   keepalived 

看看結果:技術分享圖片
可以看到,當master 主機上的 keepalived 服務停止後,vip 馬上就切換到 backup 機器了。

接著,用瀏覽器再訪問一次 vip :
技術分享圖片
可以看到,客戶端(瀏覽器)訪問vip ,返回的頁面已經是 backup 上的nginx 提供的頁面了。

最後,在master 機器上重新啟動keepalived 服務:

systemctl   start   keepalived 

看看結果:
技術分享圖片
可以看到,vip 馬上切換會 master 主機了。

5. 總結

通過以上的實驗,可以看出,通過keepalived 實現雙機熱備切換,配置還是挺方便的,切換速度也很快。在實際環境中,當keepalived 監測的服務出現故障後,keepalived 才會自動停止。keepalived 停止工作,則vrrp 廣播也停止了。其他的backup機器就會通過優先級判斷誰將頂替master 對外提供服務。所以,監測腳本需要根據實際生產需求,重新編寫。

keepalived 雙機熱備