keepalived——高可用性故障轉移的首選方案web
名詞:算法
failaver(故障轉移)vim
failback(回覆)服務器
內核態 用戶態負載均衡
224-239的網段是組播網段 能夠 多個機器共用一個IPide
要使用keepalived須要開啓VRRP協議 將會自動加入224.0.0.18組 oop
優先級0-255.越高越優先測試
*************************首先設置RS (real server)*********************************網站
首先配置好網站服務,測試一下全部的RS服務器 //real server 真實服務器spa
[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