1、什麼是keepalived?
keepalived是集羣管理中保證集羣高可用的一個服務軟件,用來檢測服務器的狀態以及loadbbalance主機和backup主機之間的failover(故障切換)防止單點故障。在集羣當中如果有一臺服務器宕機或工作出現故障,keepalived將檢測到並將有故障的服務器踢出集羣,同時讓其他服務器來代替該服務器的工作,當服務器恢復正常後keepalived自動將該服務器加入到集羣中,完全不需要人工干涉,只需要做好相關配置,並修復有故障的服務器即可。
2、keepalived有什麼優勢?
keepalived安裝簡單,配置簡明,配置完之後所有切換都是自動完成,無需人工參與。
3、keepalived是如何工作的:
keepalived是以vrrp(virtual router redundancy protocol)協議,即虛擬路由冗餘協議實現的。vrrp是實現路由器高可用的協議,將多臺提供相同服務的路由器組成一個路由組,組內有一個主路由和多個備份路由組成。master使用組內的VIP(虛擬IP)對外提供服務,master使用組播地址224.0.0.18向backup發送vrrp通告。當backup收不到master發送的vrrp通告時,就認爲master宕機了。通過vrrp的優先級在backup中重啓選舉一個優先級高的當做master對外提供服務。這樣就保證了路由的高可用。
keepalived是一個類似於layer3, 4 & 7交換機制的軟件,即IP/TCP協議棧的IP、TCP及應用層。
layer3工作原理:此時keepalived工作在IP/TCP協議棧的中IP層。以服務器的IP地址作爲服務器工作正常與否的標準,master通過組播定期發送ICMP數據包,如果發現有返回異常的IP,keepalived將認爲這臺服務器失效,並提出服務器羣
layer4工作原理:此時keepalived工作在IP/TCP協議棧的中TCP層。以服務提供的TCP端口的狀態來決定服務器的工作是否正常,如果檢測到端口監聽異常,則keepalived將把這臺服務器從服務器羣中踢出。
layer7工作原理:此時keepalived工作在IP/TCP協議棧的中應用層。相比較來說比layer3、layer4要負責,網絡佔用帶寬也要大一些,使用也相對較少。keepalived將根據用戶自己的設定配置檢查服務程序是否正常,如果跟用戶設定不相符,則將視爲服務器存在異常並將踢出服務器羣。
4、keepalived的配置文件
一個功能比較完整的keepalived 的配置文件,其配置文件keepalived.conf 可以包含三個文本塊:全局定義塊(global_defs)、VRRP實例定義塊(vrrp_instance)及虛擬服務器定義塊(virtual_server)。全局定義塊和虛擬服務器定義塊是必須的,如果在只有一個負載均衡器的場合,就不須VRRP 實例定義塊。其中"!"表示註釋
4、修改配置文件。keepalived配置文件只有一個位於:/etc/keepalived/keepalived.conf,羣組中所有主機上的配置文件基本都是相同的的,唯一不同的參數是:router_id(運行keepalived服務的一個服務器標識)、priority(選舉優先級)、real_server(本機監聽keepalived服務的IP及端口)
keepalived配置文件只有一個位於:/etc/keepalived/keepalived.conf
[root@node2 keepalived]# cat keepalived.conf
! Configuration File for keepalived
global_defs { !//定義全局配置
notification_email { !//當發生VIP切換時,由哪些用戶接收郵件。
}
notification_email_from [email protected] !//發件人
smtp_server 192.168.200.1 !//smtp服務器地址
smtp_connect_timeout 30 !//連接smtp服務器超時時間
router_id ROUTER_1 !//運行keepalived服務的一個服務器標識
}
vrrp_instance HTTP_1 { !//定義VRRP實例
state BACKUP !//節點在羣組中的身份,做好都設置成BACKUP,避免相互搶佔,導致寫入錯誤
interface eth0 !//實例綁定的網卡
virtual_router_id 51 !//實例ID標記,範圍1-255,羣組中都要保持一致,同一網段中應該唯一,避免衝突
priority 100 !//優先級,初始啓動後優先級高的是master
advert_int 5 !//健康檢查時間間隔。默認爲1s,
nopreempt !//不搶佔,只能設置在backup主機上並且優先級要比其他的高
authentication { !//認證區域
auth_type PASS !//認證類型:PASS,HA(IPSEC),推薦PASS
auth_pass 1111 !//密碼認證密碼。
}
virtual_ipaddress { !//虛擬IP區域,指定VIP地址
192.168.199.188
}
}
virtual_server 192.168.199.188 80 { !//定義虛擬服務器,虛擬IP+端口
delay_loop 5 !//健康檢查時間間隔,單位:s
lb_algo rr !//後端調度算法,(rr|wrr|lc|wlc|lblc|sh|dh)
lb_kind DR !//負載均衡的轉發規則(NAT|DR|TUN)
persistence_timeout 50 !//會話保持時間,單位:s
protocol TCP !//指定協議類型。(TCP|UDP)
sorry_server 192.168.199.14 80 !//當所有realserver都失效後啓用
real_server 192.168.199.188 443 { !//定義服務節點。指定後端IP+端口
weight 1 !//配置權重
SSL_GET { !//運行狀態監測
url {
path /
digest ff20ad2481f97b1754ef3e12ecd3a9cc
}
url {
path /mrtg/
digest 9b3a0c85a887a256d6939da88aabd8cd
}
connect_timeout 3 !//連接超時時間
nb_get_retry 3 !//重試連接次數
delay_before_retry 3 !//重試連接時間
}
}
}