由於工作中有用到keepalived 服務簡單記錄一下keepalived 簡單的原理
keepalived 顧名思義保持在線,一般在的高可用或者是熱備中用到。來防止單點故障 。 (單點故障: 指一個節點發現故障導致整個集群或者架構收到影響不可用) 主要用於檢查服務器狀態, 如果有一台server 故障了,這台server 會備keepalived 自動剔除,會選舉一個新的server 來代替故障server 來維持服務可用性,當故障server 被修復會被keepalived 檢查到納管到集群中。 除了修復故障server 需要人為干預其他的都keepalived 自己解決。
keepalived 是有三個模塊:
1. core : 負責主進程的啟動維護,和全局配置文件的加載解析
2. check: 負責健康檢查
3. vrrp: 實現vrrp 協議的
keepalived 主要是以VRRP 協議為基礎實現的。
VRRP (虛擬路由冗余協議)
容錯的主備模式的協議,由多台提供統一服務或者功能的路由器組成一個集群,里面是有一個主的路由器,其他的為備的路由器。主路由器上有一個vip 對外提供訪問的,vip 在主的路由器上時會一直發組播,當主路由器掛掉了,備路由器收不到主路由器發過來的vrrp 報文,他們會認為主故障,備的路由器們會選舉出一個路由器來充當主路由器的代替工作。 (這里比較容易出現腦裂問題,主節點沒有掛掉,但是沒有發出vrrp 報文, 主節點認為自己是主,備節點認為主節點掛掉了,會在選舉一個主節點, 這時候有兩個主節點存在,這就是所謂的腦裂。)
keepalived 兩種模式
1. 搶占模式(默認): 其中一台設置為master,一台設置為backup。當master出現異常后,backup自動切換為master。然而當master恢復正常后會再次搶占成為master,最終導致不必要的主備切換。;
2. 非搶占模式(需要配置 nopreempt ): 在非搶占方式下,兩台keepalived初始狀態均配置為backup,設置不同的優先級,優先級高的設置為nopreempt來解決異常恢復后再次搶占的問題
實例: 這只是簡單的keepalived 的實現
環境: ubunut 14.04
server1 : 192.168.1.3
server2: 192.168.1.4
兩個節點都需要做
1. 安裝 keepalived 的安裝包和依賴包
apt-get install -y keepalived
apt-get install build-essential libssl-dev
2. 編輯keepalived 的配置文件 /etc/keepalived/keepalived.conf
server 1
root@test3:~# cat /etc/keepalived/keepalived.conf
global_defs {
router_id haproxy_DH
}
vrrp_instance VI_1 {
interface eth0 #虛擬ip 使用的網卡
state BACKUP #配置為BACKUP節點,一般有三個配置可選MASTER(主機)、BACKUP(備機)
virtual_router_id 50 #vrrp 組名,一個集群里配置vrrp組名必須同步。表示在一個vrrp 組里
nopreempt #配置為不搶占模式,必須配合backup 使用,在配置該模式后優先級就失去了作用,誰先啟動誰就是master ,失敗后必須kill 掉keepalived 進程,再次重啟不會搶占資源。實際生產環境也建議使用該模式,默認不配置nopreempt 是搶占模式,搶占模式可能會出現腦裂等問題。
priority 99 #節點的優先級 (1-254區間)
advert_int 1 # vrrp 組播信息發送的間隔,多個節點 必須設置相同
virtual_ipaddress { #設置vip (虛擬ip) 多個節點設置必須相同
192.168.1.100
}
}
root@test4:~# cat /etc/keepalived/keepalived.conf
global_defs {
router_id haproxy_DH
}
vrrp_instance VI_1 {
interface eth0
state BACKUP
virtual_router_id 50
nopreempt
priority 100
advert_int 1
virtual_ipaddress {
192.168.1.100
}
}
啟動keepalived 服務
service keepalived restart
可以在節點上ip a 檢查是否有vip 存在。