LVS
-
什麼是lvs
LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。本項目在1998年5月由章文嵩博士成立,是中國國內最早出現的自由軟件項目之一。 -
詳細設置請參閱拙作: LVS 負載均衡 https://blog.csdn.net/gaofei0428/article/details/104438533
KeepAlived
keepalived是一個類似於layer3, 4 & 5交換機制的軟件,也就是我們平時說的第3層、第4層和第5層交換。Keepalived是自動完成,不需人工干涉。Keepalived的作用是檢測服務器的狀態,如果有一臺web服務器宕機,或工作出現故障,Keepalived將檢測到,並將有故障的服務器從系統中剔除,同時使用其他服務器代替該服務器的工作,當服務器工作正常後Keepalived自動將服務器加入到服務器羣中,這些工作全部自動完成,不需要人工干涉,需要人工做的只是修復故障的服務器。
keepalived主要用作RealServer的健康狀態檢查以及LoadBalance主機和BackUP主機之間failover的實現。
高可用web架構: LVS+keepalived+nginx+apache+php+eaccelerator(+nfs可選 可不選)
Layer3,4,5工作在IP/TCP協議棧的IP層,TCP層,及應用層,原理分別如下:
-
Layer3:Keepalived使用Layer3的方式工作式時,Keepalived會定期向服務器羣中的服務器發送一個ICMP的數據包(既我們平時用的Ping程序),如果發現某臺服務的IP地址沒有激活,Keepalived便報告這臺服務器失效,並將它從服務器羣中剔除,這種情況的典型例子是某臺服務器被非法關機。Layer3的方式是以服務器的IP地址是否有效作爲服務器工作正常與否的標準。
-
Layer4:如果您理解了Layer3的方式,Layer4就容易了。Layer4主要以TCP端口的狀態來決定服務器工作正常與否。如web server的服務端口一般是80,如果Keepalived檢測到80端口沒有啓動,則Keepalived將把這臺服務器從服務器羣中剔除。
- Layer5:Layer5對指定的URL執行HTTP GET。然後使用MD5算法對HTTP GET結果進行求和。如果這個總數與預期值不符,那麼測試是錯誤的,服務器將從服務器池中移除。該模塊對同一服務實施多URL獲取檢查。如果您使用承載多個應用程序服務器的服務器,則此功能很有用。此功能使您能夠檢查應用程序服務器是否正常工作。MD5摘要是使用genhash實用程序(包含在keepalived軟件包中)生成的。
- 下面開始 搭建 LVS+KeepAlived+Nginx
- 試驗環境:
- keepalived 服務器 2臺 (master + backup)
- nginx WEB 服務器 2臺
- VIP 192.168.1.168
- keepalived master 192.168.1.2 CentOS 7.5
- keepalived backup 192.168.1.3 CentOS 7.5
- nginx 1 192.168.1.10 CentOS 6.5
- nginx 2 192.168.1.11 CentOS 7.5
-
首先在 192.168.1.2 端安裝、配置 keepalived Master
-
前提要配置好 LVS 詳細設置請參閱拙作: LVS 負載均衡 https://blog.csdn.net/gaofei0428/article/details/104438533
- sudo yum -y install keepalived ipvsadm libnl libnl-devel openssl-devel libnfnetlink-devel net-tools
- 備份 keepalived 主配置文件
- mv /etc/keepalived/keepalived.conf /bak/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf - 編輯 /etc/keepalived/keepalived.conf 添加以下內容
- global_defs { #全局配置
# notification_email { #指定keepalived在發生切換時是否發送email警告
# }
# smtp_connect_timeout 30
router_id LVS_DEVEL #此處注意router_id爲負載均衡標識,在局域網內應該是唯一的
}
vrrp_instance VI_1 { #虛擬路由的標識符
state MASTER #指定狀態,有MASTER和BACKUP兩種要大寫,MASTER爲工作狀態,BACKUP是備用狀態
interface eth0 #指定 VIP 虛擬IP 對應的 INTERFACE 接口
lvs_sync_daemon_inteface eth0 #心跳線接口,DR模式用的和上面的接口一樣,也可以用機器上的其他網卡,用來防止腦裂
virtual_router_id 51 #虛擬路由的ID號,是虛擬路由MAC的最後一位地址
priority 100 #此節點的優先級,主節點的優先級需要比其他節點高
advert_int 1 #通告的間隔時間
authentication { #認證配置
auth_type PASS #認證方式
auth_pass 1111 #認證密碼
}
virtual_ipaddress { #虛擬ip地址,可以有多個地址,每個地址佔一行,不需要子網掩碼,必須與 lvs 客戶端設定的 vip 一致
192.168.1.168
}
}
virtual_server 192.168.1.168 80 { #集羣所使用的VIP和端口
delay_loop 6 #健康檢查間隔,單位爲秒
lb_algo wrr #lvs調度算法rr|wrr|lc|wlc|lblc|sh|dh
lb_kind DR #負載均衡轉發規則。一般包括DR,NAT,TUN 3種
nat_mask 255.255.255.255 #VIP掩碼
persistence_timeout 50 #會話保持時間
protocol TCP #轉發協議
real_server 192.168.1.10 80 { #真實服務器,包括IP和端口號
weight 1 #默認爲1,0爲失效
inhibit_on_failure #在服務器健康檢查失效時,將其設爲0,而不是直接從ipvs中刪除
TCP_CHECK { #通過tcpcheck判斷RealServer的健康狀態
connect_timeout 10 #連接超時時間
nb_get_retry 3 #重連次數
delay_before_retry 3 #重連間隔時間
connect_port 80 #健康檢查端口的端口
}
}
real_server 192.168.1.11 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
}
- 確認無誤保存退出,暫時不啓動 keepalived
- 接下來在 192.168.1.3 上安裝、配置 keeepalived (前提要配置好 LVS)
- sudo yum -y install keepalived ipvsadm libnl libnl-devel openssl-devel libnfnetlink-devel net-tools
- 備份 keepalived 主配置文件
- mv /etc/keepalived/keepalived.conf /bak/keepalived.conf.bak
vim /etc/keepalived/keepalived.conf - 編輯 /etc/keepalived/keepalived.conf 添加以下內容
- global_defs {
# notification_email {
# }
# smtp_connect_timeout 30
router_id LVS_DEVEL
}
vrrp_instance VI_1 {
state BACKUP #BACKUP是備用狀態
interface eth0
lvs_sync_daemon_inteface eth0
virtual_router_id 51
priority 99
nopreempt #設置爲不搶佔 注:這個配置只能設置在backup主機上,而且這個主機優先級要比另外一臺高
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.1.168
}
}
virtual_server 192.168.1.168 80 {
delay_loop 6
lb_algo wrr
lb_kind DR
nat_mask 255.255.255.255
persistence_timeout 50
protocol TCP
real_server 192.168.1.10 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
real_server 192.168.1.11 80 {
weight 1
inhibit_on_failure
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
connect_port 80
}
}
} - 確認無誤保存退出,分別在 Master 和 Backup 端啓動 keepalived 和 lvs
- 這裏爲了測試將 persistence_timeout 50 鏈接時間改爲 0
- 在另外一臺虛擬機上測試
- 模擬故障將 Master 停掉
- 192.168.1.2 端 systemctl stop keepalived