系統版本:Ubuntu 14.04
LVS1實體IP:14.17.64.2 初始接管VIP:14.17.64.13
LVS2實體IP:14.17.64.3 初始接管VIP:14.17.64.14
真實web伺服器IP:14.17.64.4-12
實作效果:去往14.17.64.13或14的封包,轉發給14.17.64.4-12中的一台伺服器處理,實作負載均衡。
要求1:當一台真實web伺服器故障後,自動把該IP從負載均衡中踢除,恢複後自動加入叢集。
要求2:當一台LVS伺服器故障後,正常的LVS伺服器會接管故障LVS伺服器上的VIP,故障恢複後自動搶占回VIP,繼續負載分擔。
#aptitude install ipvsadm #安裝lvs
#aptitude install keepalived #安裝keepalived
#配置檔案目錄/etc/keepalived/keepalived.conf,預設并沒有配置檔案,需要手動建立。
此處是單台LVS上keepalived.conf的配置,另一台LVS上的keepalived.conf的配置檔案,隻需把下列紅色與藍色字型參數對換一下即可。
配置檔案如下:
! Configuration File for keepalived
vrrp_instance VI_1 { #定義一個執行個體,keepalived間的高可用隻能接管相同執行個體名稱
stateMASTER #指定Keepalived的角色,MASTER表示此主機是主伺服器 BACKUP表示此主機是備用伺服器,是以設定priority時要注意MASTER比BACKUP高。
interface p1p1 #指定監測網絡的接口,當LVS接管時,将會把IP位址添加到該網卡上。
virtual_router_id 51 #虛拟路由辨別,同一個vrrp執行個體使用唯一的辨別,同一個vrrp_instance下,MASTER和BACKUP必須一緻。
priority120 #指定這個執行個體優先級
advert_int 1 #心跳封包發送間隔
#notify_master/path/xx.sh #這個執行個體切換為master時執行的腳本
#notify_backup /path/xx.sh #這個執行個體切換為backup時執行的腳本
#track_interface{ #設定額外的監控,裡面某個網卡故障也會進行切換,這個一般用來監控上行鍊路
#eth1
#}
authentication {
auth_type PASS #設定驗證類型,主要有PASS和AH兩種
auth_pass 1111 #設定驗證密碼,同一個vrrp_instance下,MASTER和BACKUP的密碼必須一緻才能正常通信
}
virtual_ipaddress { #設定虛拟IP位址,可以設定多個虛拟IP位址,每行一個
14.17.64.13
}
vrrp_instance VI_2 { #定義另一個執行個體
state BACKUP
interface p1p1
virtual_router_id 52
priority 80
advert_int 1
auth_type PASS
auth_pass 1111
virtual_ipaddress {
14.17.64.14
virtual_server 14.17.64.13 0 { #設定虛拟伺服器,需要指定虛拟IP位址和服務端口,IP與端口之間用空格隔開
delay_loop 6 #設定運作情況檢查時間,機關是秒
lb_algo wrr #設定負載調試算法,這裡設定為wrr即權重論詢算法
lb_kind DR #設定LVS實作負載均衡的機制,有NAT,TUN和DR三個模式可選
persistence_timeout 50 #設定會話保持時間,機關是秒
protocol TCP #指定轉發協定類型,有TCP和UDP兩種
real_server 14.17.64.4 0 { #配置服務節點1,需要指定real server的真實IP位址和端口
weight 1 #配置服務節點的權值,
TCP_CHECK {
connect_timeout 8 #表示8秒無響應逾時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
connect_port 80 #使用80端口進行保活
}
}
real_server 14.17.64.5 0 {
weight 1
connect_timeout 8
nb_get_retry 3
delay_before_retry 3
#connect_port 80
}
#更多real_server略掉。
virtual_server 14.17.64.14 0 { #設定虛拟伺服器,需要指定虛拟IP位址和服務端口,IP與端口之間用空格隔開
delay_loop 6 #設定運作情況檢查時間,機關是秒
lb_algo wrr #設定負載調試算法,這裡設定為wrr即權重論詢算法
lb_kind DR #設定LVS實作負載均衡的機制,有NAT,TUN和DR三個模式可選
persistence_timeout 50 #設定會話保持時間,機關是秒
protocol TCP #指定轉發協定類型,有TCP和UDP兩種
real_server 14.17.64.4 0 { #配置服務節點1,需要指定real server的真實IP位址和端口
weight 1 #配置服務節點的權值,
connect_timeout 8 #表示8秒無響應逾時
nb_get_retry 3 #表示重試次數
delay_before_retry 3 #表示重試間隔
connect_port 80
connect_timeout 8
#更多real_server略掉
由于是線上環境,我不能通過關閉機器或網卡進行測試,但是他保活是通過tcp 80端口來保活的,是以隻需關閉真實伺服器上的http服務就OK。
如下所示,關掉nginx服務後,果真從lvs負載裡踢出了。
root@ubuntu:/etc/keepalived# ipvsadm-L -n
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 14.17.64.13:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 3 0
-> 14.17.64.8:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 2 1
-> 14.17.64.11:0 Route 1 1 1
-> 14.17.64.12:0 Route 1 0 0
TCP 14.17.64.14:0 wrr persistent50
-> 14.17.64.4:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.7:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 0 0
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstop
-> 14.17.64.7:0 Route 1 3 0
-> 14.17.64.6:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
-> 14.17.64.12:0 Route 1 0 0
啟動真實伺服器上nginx後,該真實伺服器又加入ipvsadm轉發規則中。
root@ubuntu:/etc/keepalived# /etc/init.d/nginxstart
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.10:0 Route 1 1 1
-> 14.17.64.11:0 Route 1 0 0
-> 14.17.64.5:0 Route 1 0 0
-> 14.17.64.9:0 Route 1 0 0
從測試結果得知,keepalived真實伺服器保活測試成功。
由于都是在IDC機房伺服器上操作,不可能斷掉網卡,是以重新開機一台LVS伺服器。
VIP接管檢視:
其中一台LVS接管了14.17.64.14:
root@ubuntu:~# ip add |grep14.17.64
inet 14.17.64.2/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.14/32 scopeglobal p1p1
另一台LVS接管了14.17.64.13:
root@ubuntu:/etc/keepalived# ipadd |grep 14.17.64
inet 14.17.64.3/24 brd14.17.64.255 scope global p1p1
inet 14.17.64.13/32 scopeglobal p1p1
把ipvsadm和keepalived加入開機自啟動:
#cat /etc/rc.local
ipvsadm
/etc/init.d/keepalived start
重新開機14.17.64.3伺服器檢視VIP切換情況:
經過測試,重新開機幾秒鐘後,14.17.64.2伺服器就把VIP 14.17.64.13接管了過來。同時使用ssh登入14.17.64.13測試,能夠正常的轉發。
root@ubuntu:~# ip add|grep 14.17.64
root@ubuntu:~# ipvsadm -L -c #從這兒可以看出,14.17.64.13轉發到10真實伺服器上。
IPVS connection entries
pro expire state source virtual destination
TCP 14:58 ESTABLISHED242.103.143.219.broad.bj.bj.dynamic.163data.com.cn:54106 14.17.64.13:62222 14.17.64.10:62222
在lvs伺服器重新啟動之後,還會把VIP搶占回來
到此,LVS+Keepalived高可用搭建完成,并能實作多端口的轉發(即轉發所有TCP端口)。
思考:
此處隻部署了兩台LVS,如果要部署更多LVS,也是同樣的配置,因為keepalived的心跳封包是廣播的,是以隻要在同一個區域網路内,無論多少個keepalived程式都能夠進行選舉與VIP接管。
本文轉自楊雲1028 51CTO部落格,原文連結:http://blog.51cto.com/yangrong/1575909,如需轉載請自行聯系原作者