1. 程式人生 > >用keepalived配置高可用集群

用keepalived配置高可用集群

keepalived

1 keepalived是什麽?

  Keepalived軟件起初是專為LVS負載均衡軟件設計的,用來管理並監控LVS集群系統中各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此,Keepalived除了能夠管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、MySQL等)的高可用解決方案軟件。

  Keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router RedundancyProtocol(虛擬路由器冗余協議)的縮寫,VRRP出現的目的就是為了解決靜態路由單點故障問題的,它能夠保證當個別節點宕機時,整個網絡可以不間斷地運行。

  所以,Keepalived 一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網絡服務的高可用功能。

keepalived官網http://www.keepalived.org

2 keepalived服務的三個重要功能

  管理LVS負載均衡軟件

  實現LVS集群節點的健康檢查中

  作為系統網絡服務的高可用性(failover)

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

  Keepalived高可用服務對之間的故障切換轉移,是通過 VRRP (Virtual Router Redundancy Protocol ,虛擬路由器冗余協議)來實現的。

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

  那麽,什麽是VRRP呢?

  VRRP ,全 稱 Virtual Router Redundancy Protocol ,中文名為虛擬路由冗余協議 ,VRRP的出現就是為了解決靜態踣甶的單點故障問題,VRRP是通過一種競選機制來將路由的任務交給某臺VRRP路由器的。

4 keepalived 原理

技術分享圖片


5 keepalived部署

實驗配置環境:

系統:centos 6.5

主:master 192.168.11.130

從:backup 192.168.11.131

vip: 192.168.11.100

主從都關閉防火墻或清除規則

主從都安裝keepalived和nginx

#yum install -y keepalived

#yum install -y nginx

1編輯主上配置文件:

# vim /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 {    #check模塊,檢測一個服務是否正常,需要寫腳本
    script "/usr/local/sbin/check_ng.sh"    #檢測腳本
    interval 3       #檢測的時間間斷
}
vrrp_instance VI_1 {     #定義master相關
    state master     #狀態參數 master/backup 只是說明
    interface eth0     #虛IP地址放置的網卡位置
    virtual_router_id 51    #同一家族要一直,同一個集群id一致
    priority 100        # 優先級決定是主還是備    越大越優先
    advert_int 1
    authentication {    #認證相關的信息
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {    #vip
        192.168.11.100
    }

編輯主上監控腳本

# vim /usr/local/sbin/check_ng.sh

#!/bin/bash

#時間變量,用於記錄日誌
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
        service nginx restart
        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
                service keepalived stop
        fi
fi

給腳本755權限

# chmod 755 /usr/local/sbin/check_ng.sh

啟動keepalived

service keepalived start

啟動keepalived後,nginx會自動加載啟動

編輯從上配置文件:

# vim /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 {    #check模塊,檢測一個服務是否正常,需要寫腳本
    script "/usr/local/sbin/check_ng.sh"    #檢測腳本
    interval 3       #檢測的時間間斷
}
vrrp_instance VI_1 {     #定義master相關
    state backup        #狀態參數 master/backup 只是說明
    interface eth0     #虛IP地址放置的網卡位置
    virtual_router_id 51    #同一家族要一直,同一個集群id一致
    priority 90        # 優先級決定是主還是備    越大越優先
    advert_int 1
    authentication {    #認證相關的信息
        auth_type PASS
        auth_pass aminglinux>com
    }
    virtual_ipaddress {    #vip
        192.168.11.100
    }

編輯從上監控腳本

# vim /usr/local/sbin/check_ng.sh

#!/bin/bash

#時間變量,用於記錄日誌
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
        service nginx restart
        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
                service keepalived stop
        fi
fi

給腳本755權限

# chmod 755 /usr/local/sbin/check_ng.sh

啟動keepalived

service keepalived start

啟動keepalived後,nginx會自動加載啟動

測試高可用:

先確定好兩臺機器上nginx差異

主上:# echo master11111111111111 > /usr/share/nginx/html/index.html

從上:# echo backup22222222222222 > /usr/share/nginx/html/index.html

測試1:關閉master上的nginx服務
測試2:在master上增加iptabls規則
iptables -I OUTPUT -p vrrp -j DROP
測試3:關閉master上的keepalived服務
測試4:啟動master上的keepalived服務

瀏覽器緩存測試不準,用另外一臺虛擬機curl測試

# curl 192.168.11.100

參考文章: https://www.cnblogs.com/clsn/p/8052649.html




用keepalived配置高可用集群