keepalived原理和安裝

一、高可用原理

1、VRRP是什麼

keepalived主要使用的是VRRP功能,VRRP(VritrualRouterRedundancyProtocol,虛擬路由冗餘協議)出現的目的就是解決靜態路由出現的單點故障問題。

健康檢查和失敗切換是keepalived的兩大核心功能。所謂的健康檢查,就是採用tcp三次握手,icmp請求,http請求,udp echo請求等方式對負載均衡器後面的實際的服務器(通常是承載真實業務的服務器)進行保活;而失敗切換主要是應用於配置了主備模式的負載均衡器,利用VRRP維持主備負載均衡器的心跳,當主負載均衡器出現問題時,由備負載均衡器承載對應的業務,從而在最大限度上減少流量損失,並提供服務的穩定性。
 

2、VRRP選舉機制

VRRP路由器在運行過程中有三種狀態:
1. Initialize狀態: 系統啓動後就進入Initialize,此狀態下路由器不對VRRP報文做任何處理;
2. Master狀態;
3. Backup狀態;
一般主路由器處於Master狀態,備份路由器處於Backup狀態。

VRRP使用選舉機制來確定路由器的狀態,優先級選舉:
1.VRRP組中IP擁有者。如果虛擬IP地址與VRRP組中的某臺VRRP路由器IP地址相同,則此路由器爲IP地址擁有者,這臺路由器將被定位主路由器。
2.比較優先級。如果沒有IP地址擁有者,則比較路由器的優先級,優先級的範圍是0~255,優先級大的作爲主路由器
3.比較IP地址。在沒有Ip地址擁有者和優先級相同的情況下,IP地址大的作爲主路由器。

如下圖所示,虛擬IP爲10.1.1.254,在VRRP組中沒有IP地址擁有者,則比較優先級,很明顯RB和RA的優先級要大於RC,則比較RA和RB的IP地址,RB的IP地址大。所以RB爲組中的主路由器。

路由器使用VRRP 功能後,會根據優先級確定自己在備份組中的角色。優先級高的路由器成爲Master 路由器,優先級低的成爲Backup 路由器。Master 擁有對外服務的虛擬IP,提供各種網絡功能,並定期發送VRRP 報文,通知備份組內的其他設備自己工作正常;Backup 路由器只接收Master 發來的報文信息,用來監控Master 的運行狀態。當Master 失效時,Backup 路由器進行選舉,優先級高的Backup 將成爲新的Master 。

搶佔方式下,當Backup 路由器收到VRRP 報文後,會將自己的優先級與報文中的優先級進行比較。如果大於通告報文中的優先級,則成爲Master 路由器;否則將保持Backup狀態;

非搶佔方式下,只要Master 路由器沒有出現故障,備份組中的路由器始終保持Master 或Backup 狀態,Backup 路由器即使隨後被配置了更高的優先級也不會成爲Master 路由器;

如果Backup 路由器的定時器超時後仍未收到Master 路由器發送來的VRRP報文,則認爲Master 路由器已經無法正常工作,此時Backup 路由器會認爲自己是Master 路由器,並對外發送VRRP報文。備份組內的路由器根據優先級選舉出Master 路由 器,承擔報文的轉發功能。
 

二、安裝

1、環境

vip:192.168.0.16

server1:192.168.1.60

server2:192.168.1.65

centos 7

2、兩臺機器都安裝keepalived

# cd /usr/local/src 
# tar -zxvf keepalived-1.4.5.tar.gz 
# cd keepalived-1.4.5
# ./configure --prefix=/usr/local/keepalived 
# make && make install 

拷貝文件

mkdir /etc/keepalived 
cp /usr/local/keepalived/etc/keepalived/keepalived.conf /etc/keepalived/ 
cp /usr/local/keepalived/etc/rc.d/init.d/keepalived /etc/init.d/ #這個文件可能沒有,需要手動創建
cp /usr/local/keepalived/etc/sysconfig/keepalived /etc/sysconfig/ 
cp /usr/local/keepalived/sbin/keepalived  /usr/sbin/

這個文件可能沒有,需要手動創建,/usr/local/keepalived/etc/rc.d/init.d/keepalived ,內容:

#!/bin/sh
#
# Startup script for the Keepalived daemon
#
# processname: keepalived
# pidfile: /var/run/keepalived.pid
# config: /etc/keepalived/keepalived.conf
# chkconfig: - 21 79
# description: Start and stop Keepalived

# Source function library
. /etc/rc.d/init.d/functions

# Source configuration file (we set KEEPALIVED_OPTIONS there)
. /etc/sysconfig/keepalived

RETVAL=0

prog="keepalived"

start() {
    echo -n $"Starting $prog: "
    daemon keepalived ${KEEPALIVED_OPTIONS}
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && touch /var/lock/subsys/$prog
}

stop() {
    echo -n $"Stopping $prog: "
    killproc keepalived
    RETVAL=$?
    echo
    [ $RETVAL -eq 0 ] && rm -f /var/lock/subsys/$prog
}

reload() {
    echo -n $"Reloading $prog: "
    killproc keepalived -1
    RETVAL=$?
    echo
}

# See how we were called.
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    reload)
        reload
        ;;
    restart)
        stop
        start
        ;;
    condrestart)
        if [ -f /var/lock/subsys/$prog ]; then
            stop
            start
        fi
        ;;
    status)
        status keepalived
        RETVAL=$?
        ;;
    *)
        echo "Usage: $0 {start|stop|reload|restart|condrestart|status}"
        RETVAL=1
esac

exit $RETVAL
chkconfig keepalived on #開機啓動

 

三、配置

1、配置server1(主)

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 
 
global_defs {
   router_id master #是運行keepalived的一個表示,多個集羣設置不同。
}
 
 
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
 
 
 
vrrp_instance VI_1 {
    state MASTER    #指定實例初始狀態,實際的MASTER和BACKUP是選舉決定的。
    interface em1    #  綁定虛擬 IP 的網絡接口,ifconfig 查看IP對應的網卡
    virtual_router_id 51 #設置VRID標記,多個集羣不能重複(0..255)
    mcast_src_ip 192.168.1.60 #localIP,可以不要該屬性
    priority 100 #設置優先級,優先級高的會被競選爲Master,Master要高於BACKUP,至少50
    nopreempt #設置爲不搶佔,說明:這個配置只能在BACKUP主機上面設置
    advert_int 1  #檢查的時間間隔,默認1s
    authentication {
        auth_type PASS
        auth_pass 123456
    }
 
 
    track_script {
        chk_nginx
    }
 
 
    virtual_ipaddress { #設置VIP,可以設置多個,用於切換時的地址綁定。
        10.1.125.244  #vip
    }
}

2、配置server2(備機)

vi /etc/keepalived/keepalived.conf

! Configuration File for keepalived
 
 
global_defs {
   router_id slave
}
vrrp_script chk_nginx {
    script "/etc/keepalived/nginx_check.sh"
    interval 2
    weight -20
}
 
 
vrrp_instance VI_1 {
    state BACKUP
    interface em1
    virtual_router_id 51
    mcast_src_ip 192.168.1.65 
    priority 90
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass 123456
    }
 
 
    track_script {
        chk_nginx
    }
 
 
    virtual_ipaddress {
        192.168.1.16
    }
}

vi /etc/keepalived/nginx_check.sh 

 #!/bin/bash
A=`ps -C nginx –no-header |wc -l`
if [ $A -eq 0 ];then
    /usr/local/nginx/sbin/nginx
    sleep 2
    if [ `ps -C nginx --no-header |wc -l` -eq 0 ];then
        killall keepalived
    fi
fi

授權
# chmod +x /etc/keepalived/nginx_check.sh 

兩臺機器都添加vrrp協議到防火牆,vi /etc/sysconfig/iptables

service iptables restart 重啓防火牆。

四、測試

我這裏只做keepalived測試,nginx的測試大家自行處理。

1、啓動

service keepalived start

2、通過 ip a 查看是不是隻有一個臺機器綁定的vip,正常應該只有一個臺機器有vip,如下圖192.168.1.60,

 

3、停掉主 keepalived,備機自動切換爲master,備機日誌:

4、啓動主機得keepalived,會自動搶佔爲master,備機日誌如下:

tail -200  /var/log/messages

 

這個架構nginx+keepalived方案的缺點:

只有一臺服務器對外提供服務,使用率是50%。可以採用雙nginx對外提供服務的架構方案,提高服務的使用率。

五、注意

1、當主機服務恢復後,vip的master會自動切回到主機。

2、查看keepalived日誌

tail -f  /var/log/messages

3、如果主備發生網絡不通分區的情況,可能讓keepalived集羣發生腦裂的情況,導致兩臺機器搶佔vip。比如當防火牆隔離了keepalived的通訊端口112。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章