LVS-DR+keepalived高可用羣集
-
LVS負載均衡採用直連路由工作模式(LVS-DR),採用半開放的網絡結構,結構與IP隧道模式類似,但各節點並不是分散在各地,而是與調度器位於同一個物理網絡,負載調節器與各節點服務器通過本地網絡連接,不需要建立專用的IP隧道。
- Keepalived採用VRRP熱備份協議,以軟件的方式實現服務機的多機熱備功能。其主要用來提供故障切換和健康檢查功能——判斷LVS負載調度器、節點服務器的可能性,及時隔離並替換爲新的服務器,當故障主機恢復後將其重新加入羣集。
LVS-DR+keepalived結構拓補圖
實驗環境
主機 | 操作系統 | IP | 軟件 |
---|---|---|---|
LVS主調度器 | CentOS-7.3x86_64 | 192.168.100.101 | keepalived、ipvsadm |
LVS從調度器 | CentOS-7.3x86_64 | 192.168.100.102 | keepalived、ipvsadm |
web1服務器 | CentOS-7.3x86_64 | 192.168.100.103 | httpd |
web2服務器 | CentOS-7.3x86_64 | 192.168.100.104 | httpd |
- 注:VIP爲192.168.100.50
LVS調度服務器設置
- 主從調度服務器設置基本相同,不同之處將會註明;
開啓路由轉發功能,關閉proc響應重定向功能;
vi /etc/sysctl.conf
net.ipv4.ip_forward=1 //開啓路由轉發功能
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.eth0.send_redirects = 0
//關閉proc響應重定向功能
sysctl -p //立即生效
設置虛擬網卡,並啓動虛擬網卡;
cd /etc/sysconfig/network-scripts
cp ifcfg-ens33 ifcfg-ens33:0
vim ifcfg-ens33:0
DEVICE=ens33:0
ONBOOT=yes
IPADDR=192.168.100.10
NETMASK=255.255.255.255 //注意:子網掩碼必須全爲1
ifup ens33:0
配置負載分配策略(編寫腳本方便管理);
cd /etc/init.d
vim dr.sh //腳本名
#!/bin/bash
GW=192.168.100.1
VIP=192.168.100.50
RIP1=192.168.100.103
RIP2=192.168.100.104
case "$1" in
start)
/sbin/service ipvsadm start
/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
/sbin/service ipvsadm stop
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(編寫腳本方便管理);
yum install keepalived -y
vi /etc/keepalived/keepalived.conf
global_defs {
notification_email {
[email protected]
}
notification_email_from benet [email protected]
smtp_server 127.0.0.1 //指定本地
smtp_connect_timeout 30
router_id LVS_01 //指定名稱,備份服務名稱不同
}
vrrp_instance VI_1 {
state MASTER //備份服務器爲BACKUP
interface ens33 //接口爲ens33
virtual_router_id 10 //組號;備份服務器相同
priority 100 //優先級;備份服務器小於主服務器
advert_int 1
authentication {
auth_type PASS
auth_pass abc123
}
virtual_ipaddress {
192.168.100.50 //指定VIP地址
}
}
virtual_server 192.168.100.10 80 {
delay_loop 6
lb_algo rr
lb_kind DR //指定工作模式
persistence_timeout 60
protocol TCP
real_server 192.168.100.103 80 { //web1服務器IP和端口
weight 1 //權重
TCP_CHECK { //健康檢查方式
connect_port 80 //端口
connect_timeout 3 //連接超時
nb_get_retry 3 //重試次數
delay_before_retry 3 //重試間隔時間(秒)
}
}
real_server 192.168.100.104 80 { //web2服務器IP和端口
weight 1
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
}
systemctl start keepalived.service //啓動服務
ip addr show dev ens33:0 //查看虛擬網卡
關閉防火牆和安全功能
systemctl stop firewalld.service
setenforce 0
web服務器配置
- 兩臺web服務器配置相同,設置不同的測試首頁作爲區分。
安裝http服務,啓動http服務,關閉防火牆與安全功能;
yum install httpd -y
systemctl start httpd.service
systemctl stop firewalld.service
setenforce 0
創建http服務的測試首頁,/var/www/html (兩臺web服務器測試首頁內容不同);
echo "this is web1 test " > /var/www/html/index.html //web1服務器
echo "this is web2 test " > /var/www/html/index.html //web2服務器
配置虛擬IP地址(VIP):ifcfg-lo:0(若使用遠程連接的虛擬機,切勿重啓,否則會中斷遠程連接)
cd /etc/sysconfig/network-scripts
cp ifcfg-lo ifcfg-lo:0
vim ifcfg-lo:0
DEVICE=lo:0
IPADDR=192.168.100.50
NETMASK=255.255.255.255
ONBOOT=yes
調整proc響應參數(使用腳本,腳本文件提權,啓動腳本);
cd /etc/init.d/
vim web.sh //腳本名
#!/bin/bash
VIP=192.168.100.10
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
在虛擬機中可輸入 firefox "http://127.0.0.1/" & 命令使用火狐瀏覽器進入測試首頁
service web.sh stop
service web.sh start //(建議重啓服務)
登錄測試
-在客戶機瀏覽器中輸入VIP:192.168.100.50,即可將進入web服務器測試首頁,多刷新幾次,可進入連個不同的測試首頁;