LVS負載均衡之LVS-DR搭建Web群集與LVS結合Keepalived搭建高可用Web群集
實現LVS的DR模式
LVS的DR模式的原理詳細介紹請看 Linux/2018-11/../../Linux/2018-11/155542.htm" rel="nofollow,noindex" target="_blank">LVS負載均衡之LVS-NAT與LVS-DR模式原理詳解 這篇文章。
一. 實驗環境
三臺機器:
-
Director節點: (ens33 192.168.10.53 vip ens33:0 192.168.10.80)
-
Real server1: (ens33 192.168.10.51 vip lo:0 192.168.10.80)
- Real server2: (ens33 192.168.10.52 vip lo:0 192.168.10.80)
二. 安裝和配置
1. 配置兩個real server伺服器
(1) 配置虛擬IP地址(VIP)
VIP地址僅用作傳送Web響應資料包的源地址,並不需要監聽客戶機的訪問請求(改由排程器Director監聽並分發)。因此使用虛介面lo:0來承載VIP地址。
cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 DEVICE=lo:0 IPADDR=192.168.10.80 NETMASK=255.255.255.255#子網掩碼必須全為1 ONBOOT=yes 1 ifup lo:0#開啟虛擬介面
(2)安裝httpd,建立測試網頁
#安裝httpd yum install httpd -y
#real server1建立測試網頁 echo "Server 192.168.10.51" > /var/www/html/index.html #real server2建立測試網頁 echo "Server 192.168.10.52" > /var/www/html/index.html
(3)啟動httpd服務,關閉防火牆和安全性策略
#啟動httpd服務 systemctl start httpd.service systemctl enable httpd.service
#關閉防火牆和安全性策略 systemctl stopfirewalld.service systemctl disable firewalld.service setenforce 0
(4)在兩臺real server上配置啟動指令碼
vim /etc/init.d/rs.sh #!/bin/bash VIP=192.168.10.80 case "$1" in start) ifconfig lo:0 $VIP netmask 255.255.255.255 broadcast $VIP /sbin/route add -host $VIP dev lo:0#為本機新增一條路由記錄 echo "1" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce sysctl -p >/dev/null 2>&1 echo "RealServer Start OK " ;; stop) ifconfig lo:0 down route del $VIP /dev/null 2>&1 echo "0" >/proc/sys/net/ipv4/conf/lo/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/lo/arp_announce echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce echo "RealServer Stopd" ;; *) echo "Usage: $0 {start|stop}" exit 1 esac exit 0
這裡需要注意的是避免ARP通訊紊亂,解決方案是:修改RS上核心引數(arp_ignore和arp_announce)將RS上的VIP配置在lo介面的別名上,並限制其不能響應對VIP地址解析請求。
-
arp_ignore=1表示系統只響應目的IP為本地IP的ARP請求。
- arp_announce=2表示系統不使用IP包的源地址來設定ARP請求的源地址,而選擇傳送介面的IP地址。
(5)執行啟動指令碼
chmod +x rs.sh service rs.sh start
最後在本機上自測訪問網站服務
2. 配置Director server伺服器
(1)配置虛擬IP地址,以便響應群集訪問
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33:0 vim ifcfg-ens33:0 DEVICE=ens33:0 ONBOOT=yes IPADDR=192.168.10.80 NETMASK=255.255.255.0 ifup ens33:0
(2)安裝ipvsadm管理工具
yum install ipvsadm -y
(3)開啟路由功能
vim /etc/sysctl.conf net.ipv4.ip_forward=1 sysctl -p#儲存
(4)調整/proc響應引數,關閉Linux核心重定向引數響應
vim /etc/sysctl.conf net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens33.send_redirects = 0 sysctl -p #儲存
(5)配置Director啟動指令碼
vim /etc/init.d/dr.sh #!/bin/bash GW=192.168.10.1 VIP=192.168.10.80 RIP1=192.168.10.51 RIP2=192.168.10.52 case "$1" in start) /sbin/ipvsadm --save > /etc/sysconfig/ipvsadm systemctl start ipvsadm /sbin/ifconfig ens33:0 $VIP broadcast $VIP netmask 255.255.255.255 broadcast $VIP up /sbin/route add -host $VIP dev ens33:0 /sbin/ipvsadm -A -t $VIP:80 -s rr /sbin/ipvsadm -a -t $VIP:80 -r $RIP1:80 -g /sbin/ipvsadm -a -t $VIP:80 -r $RIP2:80 -g echo "ipvsadm starting --------------------[ok]" ;; stop) /sbin/ipvsadm -C systemctl stop ipvsadm ifconfig ens33:0 down route del $VIP echo "ipvsamd stoped----------------------[ok]" ;; status) if [ ! -e /var/lock/subsys/ipvsadm ];then echo "ipvsadm stoped---------------" exit 1 else echo "ipvsamd Runing ---------[ok]" fi ;; *) echo "Usage: $0 {start|stop|status}" exit 1 esac exit 0
(6)啟動指令碼,新增兩個Real Server節點伺服器
chmod +x /etc/init.d/dr.sh service dr.sh start
(7)關閉防火牆和安全策略
systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0
三.測試LVS群集
用Windows客戶端直接訪問http://192.168.10.80/, 將能夠看到由真實伺服器提供的網頁內容。
第一次訪問:

Real Server連線次數檢視:

重新整理一次:

Real Server連線次數檢視:

-
LVS結合keepalive
1.高可用群集(High Availability Cluster):以提高應用系統的可靠性、儘可能的減少中斷時間為目標,確保服務的連續性,達到高可用(HA)容錯效果。
2.LVS可以實現負載均衡,但是不能夠故障切換和健康檢查,也就是當一個rs伺服器出現故障時,LVS仍然會把請求轉發給故障的rs伺服器,這樣就會導致請求無效。keepalive軟體可以解決 LVS 單點故障的問題,能同時實現 LVS 的高可用性。這裡以LVS-DR模式為例。
一.實驗環境
上述的LVS-DR搭建好web群集後,再新增一臺備用的Director Server伺服器,其配置同上。
四臺機器:
- Keepalived1 + lvs1(Director1):192.168.10.53 (主)
- Keepalived2 + lvs2(Director2):192.168.10.54 (從)
- Real server1:192.168.10.51
- Real server2:192.168.10.52
- VIP: 192.168.10.80
二.安裝配置
在兩個Director Server 節點伺服器部署keepalived服務。
(1)安裝keepalive軟體
yum install keepalived -y
(2)主keepalived節點配置(lvs1)
#主節點( MASTER )配置檔案 vim /etc/keepalived/keepalived.conf global_defs { ...#省略部分 smtp_server 127.0.0.1#指向本地 router_id LVS_01#指定名稱,備份伺服器不同名稱 ...#省略部分 } vrrp_instance VI_1 {#定義VRRP熱備例項 state MASTER#MASTER表示主排程器 interface ens33#承載VIP地址的物理介面 virtual_router_id 51#虛擬路由器的ID號,每個熱備組保持一致 priority 100#主排程器優先順序 advert_int 1#通告間隔秒數 authentication {#認證資訊 auth_type PASS#認證型別 auth_pass 1111#字碼密串 } virtual_ipaddress {#指定群集VIP地址,也就是漂移地址 192.168.10.80 } } virtual_server 192.168.10.80 80 {#虛擬伺服器VIP地址 delay_loop 6#健康檢查的間隔時間 lb_algo rr#輪詢rr的排程演算法 lb_kind DR#直接路由工作模式 persistence_timeout 0#連線保持時間 protocol TCP#應用服務採用的是TCP協議 real_server 192.168.10.51 80 { #第一個web節點的伺服器地址、埠 weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } real_server 192.168.10.52 80 { #第二個web節點的伺服器地址、埠 router_id LVS_01weight 1 TCP_CHECK { connect_timeout 10 nb_get_retry 3 delay_before_retry 3 connect_port 80 } } }
(3)從keepalived節點配置(lvs2)
拷貝主節點的配置檔案keepalived.conf,然後修改如下內容:
router_id LV ->router_id LVS_02 #從排程器名稱 state MASTER -> state BACKUP#從排程器 priority 100 -> priority 90#從排程器優先順序
(4)啟動keepalive
#先主後從分別啟動keepalive systemctl start keepalived
三.測試 keepalived 的HA特性
(1)虛擬IP地址漂移
首先在master(lvs1)上執行命令 ip addr ,可以看到vip在master節點上的;

這時如果在master上執行 systemctl stop keepalived 命令,這時vip已經不在master上,在slave節點上執行 ip addr 命令可以看到 vip 已經正確漂到slave節點。

這時客戶端去訪問 http://192.168.10.80 訪問依然正常。

(2)連通性
(3)web訪問測試
禁用master(lvs1)的ens33網絡卡,再次訪問上述web服務,網頁文件顯示正常。


