keepalived高可用服務搭建

1. Keepalived介紹linux

Keepalived 是一個基於 vrrp 協議來實現的服務器高可用解決方案,能夠利用其實現避免IP單點故障,相似的工具還有 heartbeat  corosync 。不過其不會單獨出現,而是搭配着 LVS、Nginx、HAproxy,一塊兒協同工做達到高可用的目的。nginx

 

1.1 VRRP協議bash

VRRP 全稱Vritual Router Redundancy Protocol,虛擬路由冗餘協議。經過把幾臺提供路由功能的設備組成一個虛擬路由設備,使用必定的機制保證虛擬路由的高可用,從而達到保持業務的連續性與可靠性。服務器

在這組成的一個虛擬路由器中,有 master  backup 之分。master是主節點,在一個虛擬路由器中,只能有一個master,但能夠有多個backup;backup是備用節點,也就是當master掛掉以後,backup接手master節點的全部資源,當有多個backup節點時,根據其 priority (優先級)的值的大小,來選擇誰做爲master的替代者。當backup節點的優先級值相同時,根據其IP地址的大小,來決定。網絡

 

1.2 VRRP工做邏輯ide

image.png

 

2.配置前提工具

2.1 各節點時間必須同步測試

可使用 ntp  chrony 等工具進行時間同步spa

 

2.2 確保iptables和selinux規則清空3d

實驗環境下,咱們直接將防火牆規則清空,關閉selinux

iptables -F
systemctl stop firewalld.service
setenforce 0

在vrrp協議中咱們要將咱們虛擬路由器中各節點的優先級進行廣播,這樣在咱們故障時,其餘節點發如今多播域內本身的優先級最高,能夠實現故障切換。

多播地址(組播): 224.0.0.0 -- 239.255.255.255

查看是否支持多播

ifconfig | grep MULTICAST    #查看是否支持多播
ip link set multicast on dev eth0    #開啓多播功能



3.配置Keepalived+Nginx

3.1 拓撲結構

         MASTER              keep alived              BACKUP

+-------------+          +------------+         +--------------+

|   Nginx-1   |--------|  virtualIP  |--------|   Nginx-2   |

+-------------+          +------------+         +--------------+

     172.31.208.91       172.31.208.95     172.31.208.92


3.2 安裝Keepalived

本機環境是 CentOS7

yum install keepalived
keepalived -v

image.png

3.3 keepalive配置文件

Keepalvie配置文件路徑爲:/etc/keepalived/keepalived.conf

如下爲 MASTER 配置文件示例:請注意 MASTER 與 BACKUP 不一樣, 須要更改的地方,多餘配置請刪除

! Configuration File for keepalived

global_defs {
   notification_email {		#定義通知郵箱
   yangchao@chucloud.com.cn
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1	#定義SMTP服務器地址
   smtp_connect_timeout 30
   router_id lb01  #定義id爲lb01,ID要惟一
}

vrrp_script chk_ngx  {		#定義vrrp腳本,檢測nginx服務狀態
script "/etc/keepalived/chk_ngx.sh"  #具體腳本位置,當nginx服務有問題時停掉keepalive服務

interval 2			    #間隔兩秒
weight 2
}

vrrp_instance VI_1 {	        #實例名字爲VI_1,相同的實例的備節點名字要和這個相同
    state MASTER	        #狀態爲MASTER,備節點狀態須要改成BACKUP
    interface ens192		#定義通訊接口爲eth0,此參數備節點和主節點相同
    virtual_router_id 55	#實例ID爲55.惟一
    priority 150		#優先級爲150,備節點的優先級必須比此數字低	
    advert_int 1		#通訊檢查檢查間隔時間爲1秒
    authentication {
        auth_type PASS		#認證類型,此參數備節點設置和主節點設置相同
        auth_pass 1111		#密碼是1111,此參數備節點設置和主節點相同
    }
    virtual_ipaddress {		#虛擬機IP,即VIP爲172.31.208.95/24,綁定接口爲eth0,別名爲eth0:1,此參數備節點設置和主節點相同
    	172.31.208.95/24 dev ens192 label ens192:1
    }
    track_script {
    chk_ngx			#觸發檢查
    }
}

如下爲BACKUP的配置文件

! Configuration File for keepalived

global_defs {
   notification_email {
   yangchao@chucloud.com.cn
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02
}
   vrrp_script chk_ngx  {		#定義vrrp腳本,檢測nginx服務狀態
   script "/etc/keepalived/chk_ngx.sh"  #具體腳本位置,當nginx服務有問題時停掉keepalive服務

   interval 2			    #間隔兩秒
   weight 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface ens192
    virtual_router_id 55
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
        172.31.208.95/24 dev ens192 label ens192:1 
    }
    track_script {
    chk_ngx			#觸發檢查
    }

}

說明:

一、vrr_instance實例,名字是VI_1,每一個實例能夠認爲是keepalived服務的一個或者多個業務服務,能夠有多個,注意,主節點的中的vrrp

二、state MASTER表明當前實例VI_1的角色狀態,當前角色爲MASTER,只有MATER和BACKUP兩個狀態,必須大寫

三、interface 爲網絡通訊接口

四、virtual_router_id爲虛擬機路由id表示,最好是數字,並且是配置文件中惟一的,MASTER和BACKUP配置中相同的實例id又必須一致

五、priority優先級,數字越大,優先級越高,MASTER必須高於BACKUP

六、advert_int 同步時間,默認1秒

七、authentication,認證, MASTER和BACKUP須要配置一致

八、virtual_ipaddress虛擬IP,注意,此IP能夠配置多個,一般爲須要跟域名綁定

九、vrrp_script,定義的腳本


3.4監控腳本編寫

默認狀況下,keepalived軟件僅僅在對方機器宕機或者keepalive停掉的時候纔會接管業務。可是有時候nginx服務停掉,可是keepalived服務還在工做,此時就會致使用戶的訪問的vip沒法找到對應的服務,因此須要編寫腳本,檢測nginx服務狀態,當服務中斷時,keepalive服務也中斷,腳本以下

#!/bin/bash
if [ `netstat -lntup|grep nginx|wc -l` -ne 1 ];then
 systemctl stop keepalived
fi

記得設定可執行權限


四、測試

開啓keepalived

systemctl start keepalived
systemctl enable keepalvied

注意,當配置文件有任何錯誤的時候,systemctl 不會提示keepalived啓動失敗,須要使用systemclt status檢查服務

當配置正確,MASTER會主機會有VIP

image.png


BACKUP上不會有vip

image.png


當模擬nginxi服務中止,MASTER的keepalived服務由於腳本會中止,這時BACKUP會爭搶使用vip

image.png

能夠看到MASTER上keepalived服務中止,沒有vip

而在BACKUP上爭搶到了vip

image.png


五、keepalived的裂腦的腳本

    因爲某些緣由,致使兩臺高可用服務器對在指定時間內,沒法檢測到對方的心跳消失,各自取得資源及服務的全部權,而此時的兩臺高可用服務器對都還活着而且在正常運行,

此時就會致使一個IP或者服務存在衝突,兩個服務器都會佔用同一個VIP,此時就被稱爲裂腦。

 若是出現了裂腦狀況,則須要儘快接入中間仲裁,關閉一臺服務器或者keepalived服務


腳本思路:

在BACKUP上執行腳本,若是能夠ping通MASTER,而且BACKUP有VIP就報警。

#!/bin/sh
MASTER_VIP=172.31.208.95
MASTER_IP=172.31.208.91
while true
do
ping -c 2 -W 3 $MASTER_IP &>/dev/null
 if [ $? -eq 0 -a `ip addr|grep "$MASTER_IP"|wc -l` -eq 1 ]
  then
    echo "HA is split brain.warning."
else
    echo "HA is OK!"
fi
sleep 5
done

加上可執行權限




image.png

相關文章
相關標籤/搜索