1. 程式人生 > >keepalived-高可用性故障轉移的首選方案

keepalived-高可用性故障轉移的首選方案

高可用性 keepalived

keepalived——高可用性故障轉移的首選方案

名詞:

failaver(故障轉移)

failback(回復)

內核態 用戶態

224-239的網段組播網段 可以 多個機器共用一個IP

要使用keepalived需要開啟VRRP協議 將會自動加入224.0.0.18組

優先級0-255.越高越優先

*************************首先設置RS (real server)*********************************

首先配置好網站服務,測試一下所有的RS服務器 //real server 真實服務器

[root@localhost ~]# ip addr add dev lo 10.18.42.144/32

//在lo接口上綁定VIP (就是在LB上配置的第二個IP)

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/all/arp_ignore //忽視;不支聲

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/all/arp_announce // 宣布;宣告

[root@localhost ~]# echo 1 > /proc/sys/net/ipv4/conf/lo/arp_ignore

[root@localhost ~]# echo 2 > /proc/sys/net/ipv4/conf/lo/arp_announce

*********************************設置LB (負載均衡)*********************************

yum install ipvsadm keepalived // 首先安裝

[root@localhost ~]# ipvsadm -C //刪除以前設置

[root@localhost ~]# ipvsadm -S //永久保存

[root@localhost ~]# cd /etc/keepalived/

[root@localhost ~]# cp keepalived.conf{,.backup} //以防萬一

*************************設置 master+backup LB (負載均衡)****************************

★★★★★★這個是mastrt設置★★★★★★

[root@localhost ~]# vim /etc/keepalived/keepalived.conf //修改成下面這樣

! Configuration File for keepalived

global_defs {

router_id wang #名字是不能一樣的,隨便起

}

vrrp_instance web { # 這個名字要一致,隨便起

state MASTER # MASTER 或 BACKUP

interface ens33

virtual_router_id 44 # 虛擬路由IP 相當於組 要一致

priority 150 #優先級0-255 越高越優先

advert_int 1 #檢查間隔,默認1秒

authentication {

auth_type PASS #設置密碼

auth_pass 123 #密碼要一致

}

virtual_ipaddress {

10.18.42.145 #VIP(虛擬IP)

}

}

virtual_server 10.18.42.145 80 {

delay_loop 6 #健康檢查時間間隔

lb_algo rr #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh

lb_kind DR #負載均衡轉發規則NAT|DR|RUN

persistence_timeout 5 #5秒會話保持時間

protocol TCP #使用的協議

real_server 10.18.42.164 80 {

weight 1 #默認為1,0為失效

TCP_CHECK {

connect_port 80 #健康檢查的端口

connect_timeout 3 #連接超時時間

nb_get_retry 3 #重連次數

delay_before_retry 3 #重連間隔時間

}

}

real_server 10.18.42.45 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

★★★★★★這個是backup設置★★★★★★

[root@localhost keepalived]# vim /etc/keepalived/keepalived.conf

! Configuration File for keepalived

global_defs {

router_id wang

}

vrrp_instance web {

state BACKUP

interface ens33

virtual_router_id 44

priority 100

# nopreempt #設置為不搶占 註:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高

advert_int 1

authentication {

auth_type PASS

auth_pass 123

}

virtual_ipaddress {

10.18.42.145

}

}

virtual_server 10.18.42.145 80 {

delay_loop 6

lb_algo rr

lb_kind DR

persistence_timeout 5

protocol TCP

real_server 10.18.42.164 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

real_server 10.18.42.45 80 {

weight 1

TCP_CHECK {

connect_port 80

connect_timeout 3

nb_get_retry 3

delay_before_retry 3

}

}

}

這樣就實現了LB的高可用性,壞掉一個還有另一個。keepalived之間會有一個master,keepalived之間要單獨享用一個交換機一個網段,設置之好後keepalived會進行心跳檢測,默認好像是3秒一次,連不上就自動剔除。

但是這樣master+backup 的組合,會出現一個問題就是,假如master宕機了,然後在修復好之後重新工作後,它會搶占master身份,這樣會造成多切一次。就會產生多余的延遲、數據等待、等一些不必要的事情。

解決辦法:

vrrp_instance web { 下 添加 nopreempt

如圖:

技術分享圖片技術分享圖片

nopreempt #設置為不搶占 註:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高

但是!!!!master不能設置nopreempt

所以解決方案是:不設置master,全部設置成backup,這樣大家都是backup,就都能添加nopreempt,即使原本成為master的LB壞掉重新修好之後也不會搶占master。

keepalive的 nopreempt 非搶占

通常如果master服務死掉後backup會變成master,但是當master服務又好了的時候 master此時會搶占VIP,這樣就會發生兩次切換對業務繁忙的網站來說是不好的。所以我們要在配置文件加入 nopreempt 非搶占,但是這個參數只能用於state 為backup,故我們在用HA的時候最好master 和backup的state都設置成backup 讓其通過priority來競爭。

後面附一個:關於keepalived配置文件的詳細說明:https://blog.csdn.net/jibcy/article/details/7826158


keepalived-高可用性故障轉移的首選方案