一、概述
keepalived主要有三個模塊,分別是core、check和vrrp。core模塊為keepalived的核心,負責主進程的啟動、維護以及全局配置文件的加載和解析。check負責健康檢查,包括常見的各種檢查方式。vrrp模塊是來實現VRRP協議的。
Keepalived作為一個高性能集群軟件,它還能實現對集群中服務器運行狀態的監控及故障隔離。接下來介紹下Keepalived對服務器運行狀態監控和檢測的工作原理。 Keepalived工作在TCP/IP參考模型的第三、第四和第五層,也就是網絡層、傳輸層和應用層。根據TCP/IP參考模型各層所能實現的功能,Keepalived運行機制如下:
- 在網絡層,運行着四個重要的協議:互連網協議IP、互連網控制報文協議ICMP、地址轉換協議ARP以及反向地址轉換協議RARP。Keepalived在網絡層采用的最常見的工作方式是通過ICMP協議向服務器集群中的每個節點發送一個ICMP的數據包(類似於ping實現的功能),如果某個節點沒有返回響應數據包,那么就認為此節點發生了故障,Keepalived將報告此節點失效,並從服務器集群中剔除故障節點。
- 在傳輸層,提供了兩個主要的協議:傳輸控制協議TCP和用戶數據協議UDP。傳輸控制協議TCP可以提供可靠的數據傳輸服務,IP地址和端口,代表一個TCP連接的一個連接端。要獲得TCP服務,須在發送機的一個端口上和接收機的一個端口上建立連接,而Keepalived在傳輸層就是利用TCP協議的端口連接和掃描技術來判斷集群節點是否正常的。Keepalived一旦在傳輸層探測到端口沒有響應數據返回,就認為端口發生異常,然后強制將此端口對應的節點從服務器集群組中移除。
- 在應用層,可以運行FTP、TELNET、SMTP、DNS等各種不同類型的高層協議,Keepalived的運行方式也更加全面化和復雜化,用戶可以通過自定義Keepalived的工作方式,例如用戶可以通過編寫程序來運行Keepalived,而Keepalived將根據用戶的設定檢測各種程序或服務是否允許正常,如果Keepalived的檢測結果與用戶設定不一致時,Keepalived將把對應的服務從服務器中移除
二、部署
准備:
修改內核參數:
開啟IP轉發功能 :
net.ipv4.ip_forward = 1
開啟允許綁定非本機的IP:
net.ipv4.ip_nonlocal_bind = 1
如果使用LVS的DR或者TUN模式結合Keepalived需要在后端真實服務器上特別設置兩個arp相關的參數:
net.ipv4.conf.lo.arp_ignore = 1
net.ipv4.conf.lo.arp_announce = 2
net.ipv4.conf.all.arp_ignore = 1
net.ipv4.conf.all.arp_announce = 2
#sysctl -p
keepalived默認使用組播,進行ARP廣播,但是在雲服務器上是禁止進行ARP廣播的。容易造成ARP風暴。所以雲服務器上部署或物理機部署采用單播的方式實現。
下載源碼包進行編譯:
https://github.com/acassen/keepalived/releases
下載相應的版本進行編譯。
ubuntu:
master&backup
# tar xf keepalived-2.0.6.tar.gz
# cd keepalived-2.0.6
#./configure && make && make install
# cd keepalived-2.0.6/keepalived ; cp keepalived.service /etc/systemd/system/
#vim /etc/systemd/system/keepalived.service
修改如下配置:
ExecStart=/usr/local/sbin/keepalived $KEEPALIVED_OPTIONS -f /etc/keepalived/keepalived.conf
#mkdir /etc/keepalived
!!采用單播,單播必須要配置authentication:
authentication {
auth_type PASS
auth_pass KShcKlwmXCZcXlwlaWNqZmplanhsCg
}
auth_type有兩種方式PASS、AH,auth_pass,如果使用PASS模式,Password string (up to 8 characters),密碼長度8位及以上。
官網說明:https://github.com/acassen/keepalived/blob/master/doc/keepalived.conf.SYNOPSIS
# Note: authentication was removed from the VRRPv2 specification by RFC3768 in 2004.
# Use of this option is non-compliant and can cause problems; avoid using if possible,
# except when using unicast, when it can be helpful.
authentication { # Authentication block
auth_type PASS|AH # Simple password or IPSEC AH
auth_pass <STRING> # Password string (up to 8 characters)
}
創建配置文件:
master:
! Configuration File for keepalived global_defs { notification_email { root@localhost #發送郵箱 } notification_email_from keepalived@localhost #郵箱地址 smtp_server 127.0.0.1 #郵件服務器地址 smtp_connect_timeout 30 router_id km12-01 #主機名,每個節點不同即可 } vrrp_instance VI_1 { state MASTER #在另一個節點上為BACKUP interface eth0 #IP地址漂移到的網卡 virtual_router_id 6 #多個節點必須相同 priority 100 #優先級,備用節點的值必須低於主節點的值 advert_int 1 #通告間隔1秒 authentication { auth_type PASS #預共享密鑰認證 auth_pass 571f97b2 #密鑰 } unicast_src_ip 10.42.13.20 unicast_peer { 10.42.43.17 10.42.150.22 } virtual_ipaddress { 10.42.79.10/16 #VIP地址 } }
backup:
! Configuration File for keepalived global_defs { notification_email { root@localhost #發送郵箱 } notification_email_from keepalived@localhost #郵箱地址 smtp_server 127.0.0.1 #郵件服務器地址 smtp_connect_timeout 30 router_id km12-02 #主機名,每個節點不同即可 } vrrp_instance VI_1 { state BACKUP #在另一個節點上為MASTER interface eth0 #IP地址漂移到的網卡 virtual_router_id 6 #多個節點必須相同 priority 80 #優先級,備用節點的值必須低於主節點的值 advert_int 1 #通告間隔1秒 authentication { auth_type PASS #預共享密鑰認證 auth_pass 571f97b2 #密鑰 } unicast_src_ip 10.42.43.17 unicast_peer { 10.42.150.22 10.42.13.20 } virtual_ipaddress { 10.42.79.20/16 #漂移過來的IP地址 } }
注意配置文件中的,單播配置方式:
unicast_src_ip 10.42.43.17 #本機地址 unicast_peer { 10.42.150.22 目標地址 10.42.13.20 }
三、啟動服務
service keepalived start