LVS高可用性
Director不可用,整個系統將不可用;SPoF Single Point of Failure
解決方案:高可用
keepalived heartbeat/corosync
某RS不可用時,Director依然會調度請求至此RS
解決方案: 由Director對各RS健康狀態進行檢查,失敗時禁用,成功時啟用
keepalived heartbeat/corosync ldirectord
檢測方式:
(a) 網絡層檢測,icmp (b) 傳輸層檢測,端口探測 (c) 應用層檢測,請求某關鍵資源
RS全不用時:backup server, sorry server
ldirectord
ldirectord:監控和控制LVS守護進程,可管理LVS規則
包名:ldirectord-3.9.6-0rc1.1.1.x86_64.rpm
下載:http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/
文件:
/etc/ha.d/ldirectord.cf 主配置文件 /usr/share/doc/ldirectord-3.9.6/ldirectord.cf 配置模版 /usr/lib/systemd/system/ldirectord.service 服務 /usr/sbin/ldirectord 主程序,Perl實現 /var/log/ldirectord.log 日志 /var/run/ldirectord.ldirectord.pid pid文件
ldirectord實戰演練:
1、在LVS服務器上下載ldirectord包,並安裝此包
[root@lvsdata]#wget http://download.opensuse.org/repositories/network:/ha-clustering:/Stable/CentOS_CentOS-7/x86_64/ldirectord-3.9.6-0rc1.1.2.x86_64.rpm [root@lvsdata]#yum install ldirectord-3.9.6-0rc1.1.2.x86_64.rpm -y
2、查看安裝后的包
[root@lvsdata]#rpm -ql ldirectord-3.9.6-0rc1.1.2 /etc/ha.d /etc/ha.d/resource.d /etc/ha.d/resource.d/ldirectord /etc/logrotate.d/ldirectord /usr/lib/ocf/resource.d/heartbeat/ldirectord /usr/lib/systemd/system/ldirectord.service /usr/sbin/ldirectord /usr/share/doc/ldirectord-3.9.6 /usr/share/doc/ldirectord-3.9.6/COPYING /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /usr/share/man/man8/ldirectord.8.gz
3、在LVS服務器上,將配置文件復制到/etc/ha.d目錄下
[root@lvsdata]#cp /usr/share/doc/ldirectord-3.9.6/ldirectord.cf /etc/ha.d/
4、在LVS服務器上安裝httpd服務,並啟動
[root@lvsha.d]#yum install httpd -y [root@lvsha.d]#echo Sorry Server > /var/www/html/index.html [root@lvsha.d]#systemctl start httpd
5、在原有搭建好的LVS負載均衡調度基礎上,修改此配置文件
virtual=10.0.0.100:80 添加VIP地址 real=192.168.37.19:80 gate 添加RS1IP地址 real=192.168.37.20:80 gate 添加RS2IP地址 fallback=127.0.0.1:80 gate service=http scheduler=rr #persistent=600 #netmask=255.255.255.255 protocol=tcp checktype=negotiate checkport=80 request="index.html" #receive="Test Page" 注釋掉 #virtualhost=www.x.y.z 注釋掉
6、刪除原有綁定在lo網卡上的IP地址以及ipvsadm規則,並手動添加新的IP地址,綁定在回環網卡上。
[root@lvs~]#bash lvs_dr_vs.sh stop [root@lvs~]#ifconfig lo:1 10.0.0.100/24
7、啟動ldirectord,此時就會自動添加ipvsad規則。
[root@lvsdata]#systemctl start ldirectord [root@lvsdata]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 192.168.37.19:80 Route 1 0 0 -> 192.168.37.20:80 Route 1 0 0
8、此時停止RS1服務器的httpd服務
[root@rs1~]#systemctl stop httpd
9、在LVS服務器上查看掉線之后被踢掉的ipvsadm調度規則
[root@lvsdata]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 192.168.37.20:80 Route 1 0 35
10、此時在客戶端查看訪問頁面是RS2的頁面
[root@centos6 network-scripts]# while : ;do curl 10.0.0.100;sleep 0.5;done 192.168.37.20 RS2 192.168.37.20 RS2 192.168.37.20 RS2 192.168.37.20 RS2
11、此時再恢復RS1服務器的httpd服務
[root@rs1~]#systemctl start httpd
12、ldirectord軟件會自動啟動RS1的ipvsadm規則。
[root@lvsdata]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 192.168.37.19:80 Route 1 0 71 -> 192.168.37.20:80 Route 1 0 97
13、在客戶端訪問的httpd服務頁面,此時就會恢復兩個RS服務器的信息。
[root@centos6 network-scripts]# while : ;do curl 10.0.0.100;sleep 0.5;done 192.168.37.19 RS1 192.168.37.20 RS2 192.168.37.19 RS1
14、此時RS1和RS2的httpd服務都停掉
[root@rs2~]#systemctl stop httpd [root@rs1~]#systemctl stop httpd
15、此時的ipvsadm規則的回環網卡就會顯示。
[root@lvsdata]#ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 10.0.0.100:80 rr -> 127.0.0.1:80 Route 1 0 0
16、此時客戶端就會顯示LVS調度器httpd服務里邊的index.html信息。
[root@centos6 network-scripts]# while : ;do curl 10.0.0.100;sleep 0.5;done Sorry Server Sorry Server Sorry Server Sorry Server
17、修改LVS服務器的ldirectord配置文件,重啟服務,就會將開啟httpd服務的作為優先級高的在客戶端進行訪問。
[root@lvsdata]#vim /etc/ha.d/ldirectord.cf quiescent=yes [root@lvsdata]#systemctl restart ldirectord.service
18、此時查看ipvsadm規則優先級情況,此時RS2的服務是開啟的,就會只訪問RS2服務器。
19、在客戶端訪問LVS調度器,此時調度訪問的是RS2服務器。
[root@centos6 network-scripts]# while : ;do curl 10.0.0.100;sleep 0.5;done 192.168.37.20 RS2 192.168.37.20 RS2 192.168.37.20 RS2
20、而如果此時RS1的httpd服務開啟之后,此時LVS服務器的ipvsadm規則中RS服務器兩者的優先級就會一樣,兩個權重一致,就會都去訪問。
[root@rs1~]#systemctl start httpd
21、在客戶端訪問LVS調度器的IP地址。
[root@centos6 network-scripts]# while : ;do curl 10.0.0.100;sleep 0.5;done 192.168.37.20 RS2 192.168.37.19 RS1 192.168.37.20 RS2 192.168.37.19 RS1