一、 環境準備 本次配置基於DR負載均衡模式,設置一個VIP(Virtual IP)為19.50.67.173,用戶只需要訪問這個IP地址即可獲得後端服務 其中,負載均衡主機為19.50.67.165(LVS1),備機為 19.50.67.169(LVS2)。Web伺服器A為19.50.67.171 ...
一、 環境準備
本次配置基於DR負載均衡模式,設置一個VIP(Virtual IP)為19.50.67.173,用戶只需要訪問這個IP地址即可獲得後端服務
其中,負載均衡主機為19.50.67.165(LVS1),備機為 19.50.67.169(LVS2)。Web伺服器A為19.50.67.171(WEB1),Web伺服器B為19.50.67.172(WEB2)。四台CentOS的防火牆都需要關閉。
由於LVS基於4層轉發,所以LVS到NGINX的過程中,其實並沒有什麼性能損失,實現了兩組NGINX同時線上,提供了更好的性能。
目前此架構已經在公司商用運行,未出現過故障,轉發非常穩定。
由於網上此類教程較多,故不進行太詳細描述過程。
二、 WEB伺服器配置
伺服器配置不多做介紹,用APACHE或者NGINX即可;如果用NGINX,後端則還可以做反向代理,提供更好的自定義轉發。
yum install httpd
systemctl start httpd
systemctl enable httpd
然後修改配置文件即可。
2.2 配置realserver腳本
- 進入指定文件夾:cd /etc/init.d/
- 編輯腳本文件:vim realserver
#!/bin/bash
SNS_VIP=19.50.67.173 #虛擬IP地址
. /etc/rc.d/init.d/functions #.後邊有空格,或者source /etc/rc.d/init.d/functions
case "$1" in
start)
ifconfig lo:0 $SNS_VIP netmask 255.255.255.255 broadcast $SNS_VIP
/sbin/route add -host $SNS_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 $SNS_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 Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
保存腳本文件後更改該文件許可權:chmod 755 realserver,開啟realserver服務:service realserver start(systemctl start realserver)。
下圖所示表示配置正確
每一臺WEB伺服器都要配置此腳本文件 #keepalived伺服器不需要配置。
三、keepalived伺服器配置
3.1 master配置
這裡只展示了80埠的配置,如果需要其他埠,可以繼續配置。
global_defs {
notification_email {
}
#notification_email_from [email protected]
smtp_server 192.168.200.1
smtp_connect_timeout 30
router_id LVS_DEVEL
vrrp_skip_check_adv_addr
#vrrp_strict
vrrp_garp_interval 0
vrrp_gna_interval 0
}
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
19.50.67.173
}
}
virtual_server 19.50.67.173 80 {
delay_loop 5
lb_algo wrr
lb_kind DR
persistence_timeout 30
protocol TCP
real_server 19.50.67.171 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3 #新版本已經改為retry
delay_before_retry 3
#connect_port 80 加了此項會報錯
}
# HTTP_GET {
# url {
# path /
# status_code 200
# }
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# }
}
real_server 19.50.67.172 80 {
weight 2
TCP_CHECK {
connect_timeout 10
nb_get_retry 3
delay_before_retry 3
#connect_port 80 加了此項會報錯
}
# HTTP_GET {
# url {
# path /
# status_code 200
# }
# connect_timeout 3
# nb_get_retry 3
# delay_before_retry 3
# }
}
}
3.2 backup配置
將state由MASTER改為BACKUP將priority由100改為99,其他的保持和master不變。
vrrp_instance VI_1 {
state BACKUP # 這裡改為BACKUP
interface eth1
virtual_router_id 51
priority 99 # 這裡改為99,master優先順序是100
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.80.200
}
}
三、 驗證
因為兩台真實伺服器的取值一致,所以會依次交替將請求轉發給兩台伺服器,以此實現負載均衡。
Master和backup的priority不一樣,所以同一時間只會有一臺keepalived工作,以此實現主從熱備。
ipvsadm -ln可以查看keepalived轉發明細(三個埠均轉發到了後端NGINX)
ipvsadm -L -n -c查看鏈接狀態
每篇隨筆都來自工作經驗並親自試驗,確保每位讀者能夠接觸到正確的知識。部分隨筆多平臺發佈,謝絕轉載!!!