部署LVS-DR+Keepalived搭建高可用web群集
實現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 stop firewalld.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
LVS可以實現負載均衡,但是不能夠故障切換和健康檢查,也就是當一個rs服務器出現故障時,LVS仍然會把請求轉發給故障的rs服務器,這樣就會導致請求無效。keepalive軟件可以解決 LVS 單點故障的問題,能同時實現 LVS 的高可用性。這裏以LVS-DR模式為例。
一.實驗環境
五臺機器:
- 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
- NFS Server: 192.168.10.55
- VIP: 192.168.10.80
二.安裝配置
在實現LVS的DR模式前提下,在兩個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_01 weight 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)連通性
在客戶機執行“ping 192.168.10.80 -t”,能夠正常ping通。
禁用master(lvs1)的ens33網卡,發現還是能正常ping通。
(3)web訪問測試
禁用master(lvs1)的ens33網卡,再次訪問上述web服務,網頁文檔顯示正常。
部署LVS-DR+Keepalived搭建高可用web群集