Linux九陰真經之大伏魔拳殘卷6 keepalived
keepalived 介紹
Keepalived軟件期初是專為LVS負載均衡軟件設計的,用來管理並監控LVS幾區系統匯總各個服務節點的狀態,後來又加入了可以實現高可用的VRRP功能。因此Keepalived除了能管理LVS軟件外,還可以作為其他服務(例如:Nginx、Haproxy、Mysql等)的高可用解決方案軟件。
Keepalived軟件主要是通過VRRP協議實現高可用功能的。VRRP是Virtual Router Redundancy Protocol(虛擬路由冗余協議)的縮寫,VRRP協議出現的目的就是為了解決靜態路由單點故障問題的。它能夠保證當個別節點宕機時,整個網絡可以不間斷的運行。所以,Keepalived一方面具有配置管理LVS的功能,同時還具有對LVS下面節點進行健康檢查的功能,另一方面也可實現系統網絡服務的高可用功能。
高可用故障切換原理
VRRP(Virtual Router Redundancy Protocol,虛擬路由器冗余協議),VRRP是為了解決靜態路由的高可用。VRRP的基本架構虛擬路由器由多個路由器組成,每個路由器都有各自的IP和共同的VRID(0-255),其中一個VRRP路由器通過競選成為MASTER,占有VIP,對外提供路由服務,其他成為BACKUP,MASTER以IP組播(組播地址:224.0.0.18)形式發送VRRP協議包,與BACKUP保持心跳連接,若MASTER不可用(或BACKUP接收不到VRRP協議包),則BACKUP通過競選產生新的MASTER並繼續對外提供路由服務,從而實現高可用。
Keepalived軟件的官方站點為http://www.keepalived.org
VRRP相關術語
虛擬路由器:Virtual Router
虛擬路由器標識:VRID(0-255)
物理路由器:
master :主設備
backup :備用設備
priority:優先級
VIP:Virtual IP
工作模式:
主/備:單虛擬路徑器;
主/主:主/備(虛擬路徑器),備/主(虛擬路徑器)
工作類型:
搶占式:當出現比現有主服務器優先級高的服務器時,會發送通告搶占角色成為主服務器
非搶占式:
keepalived核心組件
vrrp stack:vrrp協議的實現
ipvs wrapper:為集群內的所有節點生成IPVS規則
checkers:對IPVS集群的各RS做健康狀態檢測
控制組件:配置文件分析器,用來實現配置文件的分析和加載 IO復用器
內存管理組件,用來管理keepalived高可用是的內存管理
安裝
從CentOS 6.4開始keepalived隨系統base倉庫提供,可以使用 yun install keepalived
安裝。
配置文件:
主配置文件:/etc/keepalived/keepalived.conf
主程序文件:/usr/sbin/keepalived
提供校驗碼:/usr/bin/genhash
Unit File:keepalived.service
Unit File的環境配置文件:/etc/sysconfig/keepalived
配置文件各模塊詳解
global_defs { (全局默認配置,多數都不需要更改) notification_email { (郵件設置) [email protected] (當主節點出現故障時發送郵件) [email protected] [email protected] } notification_email_from [email protected] (發送郵件地址,使用意義不大) smtp_server 192.168.200.1 smtp_connect_timeout 30 router_id LVS_DEVEL (路由器標識,信息不是特別關鍵該不該都無所謂) vrrp_skip_check_adv_addr vrrp_strict vrrp_garp_interval 0 vrrp_pmcast_group4 224.0.44.44 (添加組播地址,防止在同一網段的其他機器被多播影響) vrrp_gna_interval 0 vrrp_iptables (可在默認的全局選項中添加此條選項,防止主節點在重啟後生成iptables規則,造成) } (主節點的再次啟用失敗) vrrp_instance VI_1 { (虛擬IP地址的設置) state MASTER (設置為主節點) interface eth0 (作用哪個物理網卡上) virtual_router_id 51 (路由器編號自定義,0-255之間的數字就可以) priority 100 (優先級的值0-255之間數字越大優先級越高) advert_int 1 (自己的心跳信息;每隔多少秒向外發布依次) authentication { (認證) auth_type PASS (認證方式:密碼認證) auth_pass 1111 (輸入密碼;隨意字符和數字最長八位) }
virtual_ipaddress {
192.168.200.16 #虛擬路由IP地址,以輔助地址方式設置
192.168.200.18/24 dev eth2 label eth2:1 #以別名的方式設置
}
track_interface { #配置要監控的網絡接口,一旦接口出現故障,則轉為FAULT狀態;
eth0
eth1
}
nopreempt #定義工作模式為非搶占模式;
preempt_delay 300
virtual_server 192.168.200.100 443 { #LVS配置段 ,設置LVS的VIP地址和端口
delay_loop #服務輪詢的時間間隔;檢測RS服務器的狀態。
lb_algo rr #調度算法,可選rr|wrr|lc|wlc|lblc|sh|dh。
lb_kind NAT #集群類型。
nat_mask 255.255.255.0 #子網掩碼,可選項。
persistence_timeout 50 #是否啟用持久連接,連接保存時長
protocol TCP #協議,只支持TCP
sorry_server <IPADDR> <PORT> #備用服務器地址,可選項
real_server 192.168.201.100 443 { #配置RS服務器的地址和端口
weight 1 #權重
SSL_GET { #檢測RS服務器的狀態,發送請求報文
url {
path / #請求的URL
digest ff20ad2481f97b1754ef3e12ecd3a9cc #對請求的頁面進行hash運算,然後和這個hash碼進行比對
,如果hash碼一樣就表示狀態正常
status_code <INT> #判斷上述檢測機制為健康狀態的響應碼,和digest二選一即可。
} #這個hash碼可以使用genhash命令請求這個頁面生成
connect_timeout 3 #連接超時時間
nb_get_retry 3 #超時重試次數
delay_before_retry 3
connect_ip <IP ADDRESS>
connect_port <PORT>
bindto <IP ADDRESS>
bind_port <PORT> }
添加虛擬服務器配置參數
virtual_server 10.10.10.2 1358 { delay_loop 6 (服務輪詢的時間間隔) lb_algo rr (定義調度方法;LVS的 rr|wrr|lc|wlc|lblc|sh|dh) lb_kind NAT (LVS的模型 NAT|DR|TUN) persistence_timeout 50 (持久連接時長) protocol TCP (服務協議,僅支持TCP) sorry_server 192.168.200.200 1358 (備用服務器地址:當所有後臺web都宕機時提供sorry界面的服務器) real_server 192.168.200.3 1358 { (後臺web服務器的IP地址) weight 1 (設定權重) HTTP_GET { url { path /testurl/test.jsp (定義要監控的URL) digest 640205b7b0fc66c1ea91c463fac6334c } url { path /testurl2/test.jsp digest 640205b7b0fc66c1ea91c463fac6334c } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
Linux九陰真經之大伏魔拳殘卷6 keepalived