Keepalived高可用集羣

介紹

Keepalived軟件起初是專門爲LVS負載均衡軟件設計的用來管理並監控LVS集羣系統中各個服務節點的狀態,後來又加入了能夠實現高可用的VRRP功能。所以,Keepalived除了可以管理LVS軟件外,還能夠做爲其餘服務的高可用解決方案軟件。ios

Keepalived軟件主要是經過VRRP協議實現高可用功能的,VRRP是Virtual Router Redundancy Protocol(虛擬路由器冗餘協議)的縮寫.VRRP出現的目的就是爲了解決靜態路由單點故障問題的nginx

VRRP原理

1.master在工做狀態會不斷羣發一個廣播包(內涵優先參數)算法

2.其餘路由收到收到廣播後會和本身的優先參數做對比,若是優先參數小於本身則什麼都不執行,若是優先參數大於本身則開啓爭搶機制vim

3.若是啓動了爭搶機制,他就會羣發本身的優先參數,最終優先參數最小的稱爲master路由.bash

keepalived的三個核心模塊

core核心模塊 chech健康監測  vrrp虛擬路由冗餘協議服務器

 Keepalived服務的三個重要功能

1.管理LVS    2.對LVS集羣節點檢查      3.做爲系統網絡服務的高可用功能網絡

#其中3高可用可做爲任意網絡功能負載均衡

Keepalived高可用故障切換轉移原理

Keepalived高可用故障切換,是經過VRRP虛擬路由器冗餘協議來實現的。  ssh

在Keepalived服務正常工做時,主Master節點會不斷地向備節點發送(多播的方式)心跳消息,用以告訴備Backup節點本身還活着,當主Master節點發生故障時,就沒法發送心跳消息,備節點沒法檢測到來自主Master節點心跳了,因而調用自身的接管程序,接管主Master節點的IP資源及服務。而當主Master節點恢復時,備Backup節點又會釋放主節點故障時自身接管的IP資源及服務,恢復到原來的備用角色。oop

 

keepalived搭建

yum -y install keepalived                #安裝keepalived 
vim /etc/keepalived/keepalived.conf          #修改主keepalived配置文件
yum -y install openssh-clients             #安裝scp 
scp /etc/keepalived/keepalived.conf root@192.168.50.149:/etc/keepalived/    #發從給從
/etc/init.d/keepalived start              #啓動keepalived

Keepalived配置文件說明

! Configuration File for keepalived              

global_defs {                        #全局定義部分
   notification_email {              #設置警報郵箱
     acassen@firewall.loc            #郵箱
     failover@firewall.loc
     sysadmin@firewall.loc
   }
   notification_email_from Alexandre.Cassen@firewall.loc      #設置發件人地址
   smtp_server 192.168.50.1 #設置smtp server地址
   smtp_connect_timeout 30 #設置smtp超時鏈接時間 以上參數能夠不配置
   router_id LVS_DEVEL               #是Keepalived服務器的路由標識在一個局域網內,這個標識(router_id)是惟一的
}

vrrp_instance VI_1 {      #VRRP實例定義區塊名字是VI_1
    state MASTER          #表示當前實例VI_1的角色狀態這個狀態只能有MASTER和BACKUP兩種狀態,而且須要大寫這些字符ASTER爲正式工做的狀態,BACKUP爲備用的狀態
    interface eth0       
    virtual_router_id 51 #虛擬路由ID標識,這個標識最好是一個數字,在一個keepalived.conf配置中是惟一的, MASTER和BACKUP配置中相同實例的virtual_router_id必須是一致的.
    priority 100 #priority爲優先級 越大越優先
    advert_int 1 #爲同步通知間隔。MASTER與BACKUP之間通訊檢查的時間間隔,單位爲秒,默認爲1.
    authentication {           #authentication爲權限認證配置不要改動,同一vrrp實例的MASTER與BACKUP使用相同的密碼才能正常通訊。
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {         #設置虛擬IP地址 192.168.50.16         #此格式ip a顯示 ifconfig不顯示
        192.168.50.17/24 dev eth0 label eth0:1    #綁定接口爲eth0,別名爲eth0:1
   }
#至此爲止以上爲實現高可用配置,如只需使用高可用功能下邊配置可刪除 #如下爲虛擬服務器定義部分
virtual_server 192.168.50.16 80 {      #設置虛擬服務器,指定虛擬IP和端口
    delay_loop 6 #健康檢查時間爲6秒
    lb_algo rr                               #設置負載調度算法 rr算法
    lb_kind NAT                            #設置負載均衡機制 #有NAT,TUN和DR三種模式可選
    nat_mask 255.255.255.0 #非NAT模式註釋掉此行 註釋用!號
    persistence_timeout 50 #鏈接保留時間,50秒無響應則從新分配節點
    protocol TCP                           #指定轉發協議爲TCP 
    real_server 192.168.5.150 80 {      #RS節點1
        weight 1 #權重
        TCP_CHECK {             #節點健康檢查
        connect_timeout 8 #延遲超時時間
        nb_get_retry 3 #重試次數
        delay_before_retry 3 #延遲重試次數
        connect_port 80 #利用80端口檢查
    }
    }
    real_server 192.168.50.149 80 {      #RS節點2
        weight 1
        TCP_CHECK {
        connect_timeout 8
        nb_get_retry 3
        delay_before_retry 3
        connect_port 80 
    }
    }
}  

配置完畢後啓動keepalived 並檢測是否有虛擬端口

/etc/init.d/keepalived start
ip a | grep 192.168.50.16            #出現上述帶有vip:192.168.50.16行的結果表示lb01的Keepalived服務單實例配置成功

! Configuration File for keepalived
global_defs {
   notification_email {
    215379068@qq.com
   }
   notification_email_from Alexandre.Cassen@firewall.loc
   smtp_server 127.0.0.1
   smtp_connect_timeout 30
   router_id lb02               #此參數和lb01 MASTER不一樣
}
vrrp_instance VI_1 {            #和lb01 MASTER相同
    state BACKUP                #此參數和lb01 MASTER不一樣
    interface eth0              #和lb01 MASTER相同
    virtual_router_id 55 #和lb01 MASTER相同
    priority 90   #此參數和lb01 MASTER不一樣
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 1111
    }
    virtual_ipaddress {
    192.168.50.17/24 dev eth0 label eth0:1
    }
}            #如下都相同

配置完成後,啓動Keepalived服務  並模擬實驗 主從vip漂移(只需開啓關閉主 .關閉主,主VIP消失從顯示VIP ,開啓主 從VIP消失,主VIP顯示)

Keepalived單實例與多實例

單實主備配置文件的不一樣

router_id dd1                router_id dd2   路由標識

state MASTER     state BACKUP         主備狀態

priority 100      priority 90                優先級

Keepalived雙實例雙主模式配置 

啓動兩個vrrp   vrrp_instance VI_1和vrrp_instance VI_2   讓他倆互爲主從.

解決高可用服務只針對物理服務器的問題

Keepalived軟件僅僅在對方機器宕機或Keepalived停掉的時候纔會接管業務。但在實際工做中,有業務服務中止而Keepalived服務還在工做的狀況,這就會致使用戶訪問的VIP沒法找到對應的服務

實現方法1.能夠寫守護進程腳原本處理,。當服務有問題時,就停掉本地的Keepalived服務,實現IP漂移到對端繼續提供服務。

例 nginx高可用

#!/bin/sh
while true
do
    if [ `netstat -antup | grep nginx | wc -l` -ne 1 ];then
        /etc/init.d/keepalived stop
    fi
    sleep 5
done
#此腳本的基本思想是若沒有80端口存在,就停掉Keepalived服務實現釋放本地的VIP。在後臺執行上述腳本並檢查:

第二個方法:能夠使用Keepalived的配置文件參數觸發寫好的監測服務腳本。首先要開發檢測服務腳本,注意這個腳本與上一個腳本的不一樣。

#!/bin/bash
if [ `netstat -antup | grep nginx | wc -l` -ne 1 ];then
    /etc/init.d/keepalived stop
fi

在keepalived的配置文件加入如下模塊

vrrp_script chk_nginx_proxy {       #定義vrrp腳本,檢測HTTP端口
    script "/server/scripts/chk_nginx_proxy.sh" #執行腳本,當Nginx服務有問題,就停掉Keepalived服務
    interval 2 #間隔2秒
    weight 2

解決多組Keepalived服務器在一個局域網的衝突問題

當在同一個局域網內部署了多組Keepalived服務器對,而又未使用專門的心跳線通訊時,可能會發生高可用接管的嚴重故障問題。以前已經講解過Keepalived高可用功能是經過VRRP協議實現的,VRRP協議默認經過IP多播的形式實現高可用對之間的通訊,若是同一個局域網內存在多組Keepalived服務器對,就會形成IP多播地址衝突問題,致使接管錯亂,不一樣組的Keepalived都會使用默認的224.0.0.18做爲多播地址。此時的解決辦法是,在同組的Keepalived服務器全部的配置文件裏指定獨一無二的多播地址,配置以下:

global_defs {                                    #全局配置
router_id LVS_19                             #服務標識
vrrp_mcast_group4 224.0.0.19 #這個就是指定多播地址的配置
}
#提示: 1)不一樣實例的通訊認證密碼也最好不一樣,以確保接管正常。
2)另外一款高可用軟件Heartbeat,若是採用多播方式實現主備通訊,一樣會有多播地址衝突問題。    

開發檢測Keepalived裂腦的腳本

在備節點上執行腳本,若是能夠ping通主節點而且備節點有VIP就報警,讓人員介入檢查是否裂腦。

#!/bin/bash
lb01_vip=192.168.0.240
lb01_ip=192.168.0.221
while true
do
    ping -c 2 -W 3 $lb01_ip &>/dev/null
    if [ $? -eq 0 -a `ip a | grep "$lb01_vip" | wc -l` -eq 1 ];then
        echo "ha is split brain.warning."
    else
        echo "ha is OK"
    fi
    sleep 5
done

能夠將此腳本整合到Nagios或Zabbix監控服務裏,進行監控報警。

相關文章
相關標籤/搜索