LVS + Keepalived 搭建高可用的負載均衡群集
Keepalived 的設計目標是搭建高可用的 LVS 負載均衡群集,可以調用 ipvsadm 工具來創建虛擬服務器、管理服務器池,而不僅僅用作雙機熱備。使用 Keepalived 搭建 LVS 群集更加簡便易用,主要優勢體現在:對 LVS 負載調度器實現熱備切換,提高可用性;對服務器池中的節點進行健康檢查,自動移除失效節點,恢復後再重新加入。
本次我們以 DR 模式的 LVS 群集為基礎,增加一臺從負載調度器,使用 Keepalived 來實現主、從調度器的熱備,從而構建兼有負載均衡、高可用兩種能力的 LVS 網站群集平臺。
網絡拓撲圖
後續上傳
系統環境
DR1主調度服務器:192.160.100.200 DR2備調度服務器:192.168.100.201 web1節點服務器:192.168.100.202 web2節點服務器:192.168.100.203 虛擬 VIP 服務器:192.168.100.100 nfs服務器:192.168.100.233 Win10客戶端:192.168.100.10
部署服務
nfs服務器(192.168.100.233)
-
檢查是否安裝nfs以及rpcbind軟件包
rpm -q nfs-utils rpcbind
-
如果沒有安裝則用yum倉庫進行安裝
yum -y install nfs-utils rpcbind
-
開啟服務
systemctl start rpcbind systemctl start nfs
-
創建掛載點,給文件目錄設置權限(實際應用中,我們還需創建raid卷並掛載到目錄中以便使用)
mkdir -p /opt/web1 /opt/web2 chmod 777 /opt/web1 /opt/web2
-
編輯配置文件
vim /etc/exports
/opt/web1 192.168.100.0/24(rw,sync) ##在此網段下的用戶可以讀寫、同步目錄中的文件
/opt/web2 192.168.100.0/24(rw,sync) -
發布共享
exportfs -rv
-
此時我們可以對客戶端進行查看
showmount -e 192.168.100.233
- 關閉防火墻及增強型功能
setenforce 0 systemctl disable firewalld systemctl stop firewalld
web1服務器(192.168.100.202)
-
安裝Apache
yum -y install httpd
-
掛載 nfs 到Apache主頁存放
mount.nfs 192.168.100.206:/opt/web1 /var/www/html
-
創建默認首頁文件
echo "<h1>This is web1 page.</h1>" > /var/www/html/index.html
-
創建虛擬網卡
cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 ##設置參數如下
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes - 設置shell腳本便於啟動
cd /etc/init.d/ vim web.sh ##添加參數如下
#!/bin/bash
VIP=192.168.100.100
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
chmod +x web.sh ##給予執行權限
service web.sh start
ifup lo:0 ##啟動網卡
- 關閉防火墻,啟動 httpd 服務
setenforce 0 systemctl disable firewalld systemctl stop firewalld systemctl enable httpd systemctl start httpd
web2節點服務器(192.168.100.203)
-
安裝Apache
yum -y install httpd
-
掛載 nfs 到Apache主頁存放
mount.nfs 192.168.100.233:/opt/web1 /var/www/html
-
創建默認首頁文件
echo "<h1>This is web2 page.</h1>" > /var/www/html/index.html
-
創建虛擬網卡
cd /etc/sysconfig/network-scripts/ cp ifcfg-lo ifcfg-lo:0 vim ifcfg-lo:0 ##設置參數如下
DEVICE=lo:0
IPADDR=192.168.100.100
NETMASK=255.255.255.0
ONBOOT=yes - 設置shell腳本便於啟動
cd /etc/init.d/ vim web.sh ##添加參數如下
#!/bin/bash
VIP=192.168.100.100
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
chmod +x web.sh ##給予執行權限
service web.sh start
ifup lo:0 ##啟動網卡
- 關閉防火墻,啟動 httpd 服務
setenforce 0 systemctl disable firewalld systemctl stop firewalld systemctl enable httpd systemctl start httpd
LVS 調度服務器(主從調度器配置基本一樣,不同處已作出標記)
-
安裝 ipvsadm 、keepalived 軟件包
yum -y install ipvsadm keepalived
-
調整 proc 響應參數
vim /etc/sysctl.conf
net.ipv4.ip_forward=1
#proc響應關閉重定向功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.ens33.send_redirects = 0 -
配置 VIP 承載接口
cd /etc/sysconfig/network-scripts/ cp ifcfg-ens33 ifcfg-ens33:0 vim ifcfg-ens33:0 ##參數如下
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.100
NETMASK=255.255.255.0ifup ens33:0 ##啟用虛擬IP
- 編輯腳本管理負載分配策略
cd /etc/init.d/ vim dr.sh
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.100
RIP1=192.168.100.202
RIP2=192.168.100.203
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
chmod +x dr.sh
service dr.sh start
- keepalived 部署
cd /etc/keepalived/ vim keepalived.conf
global_defs {
...
smtp_server 127.0.0.1 #指向本地
router_id LVS_01 #指定名稱,備份服務器不同名稱
...
}vrrp_instance VI_1 {
state MASTER #備份服務器是BACKUP
interface ens33 #承接的端口
virtual_router_id 10 #主從調度器組號相同
...
auth_pass abc123 #驗證密碼
priority 100 #優先級,備份要小於主調度器
...
virtual_ipaddress {
192.168.100.100
}
...
virtual_server 192.168.100.100 80 {
delay_loop 6
lb_algo rr ##輪詢算法
lb_kind DR ##DR模式
persistence_timeout 50
protocol TCPreal_server 192.168.100.202 80 { weight 1 ##權重為1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.100.203 80 { weight 1 TCP_CHECK { connect_port 80 #添加端口 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } }
}
systemctl start keepalived
測試 LVS + Keepalived 高可用負載均衡群集
在通過客戶機的瀏覽器中,能夠通過群集的 VIP 地址(192.168.100.100)來正常訪問 Web1 & Web2 頁面。當主、從調度器有任一失效時,我們仍可以正常訪問 Web ,且只要節點服務器存在兩臺及以上,我們仍可以實現負載均衡。
LVS + Keepalived 搭建高可用的負載均衡群集