環境準備
IP | 配置 | VIP | |
node1 | 192.168.134.170 | LVS+Keepalived | 192.168.134.100 |
node3 | 192.168.134.172 | LVS+Keepalived | 192.168.134.100 |
node2 | 192.168.134.171 | 做web服務器使用 | |
node4 | 192.168.134.173 | 做web服務器使用 |
1、準備node1與node3環境(安裝LVS與Keepalived)==>由于只是簡單的模擬測試,故環境安裝使用yum即可。(LVS使用DR模式)
yum install ipvsadm
2、準備web服務器環境(兩臺)
yum install httpd -y
3、寫測試實例(web服務器上)
echo "web test page ,ip is `hostname -I`" > /var/www/html/index.html
systemctl restart httpd
4、寫腳本準備web環境
cat /etc/init.d/lvs_rs#!/bin/sh
#
# Startup script handle the initialisation of LVS
# chkconfig: - 28 72
# description: Initialise the Linux Virtual Server for DR
#
### BEGIN INIT INFO
# Provides: ipvsadm
# Required-Start: $local_fs $network $named
# Required-Stop: $local_fs $remote_fs $network
# Short-Description: Initialise the Linux Virtual Server
# Description: The Linux Virtual Server is a highly scalable and highly
# available server built on a cluster of real servers, with the load
# balancer running on Linux.
# description: start LVS of DR-RIP
LOCK=/var/lock/ipvsadm.lock
VIP=192.168.95.10
. /etc/rc.d/init.d/functions
start() {
PID=`ifconfig | grep lo:10 | wc -l`
if [ $PID -ne 0 ];
then
echo "The LVS-DR-RIP Server is already running !"
else
/sbin/ifconfig lo:10 $VIP netmask 255.255.255.255 broadcast $VIP up
/sbin/route add -host $VIP dev lo:10
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/eth0/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "1" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "2" >/proc/sys/net/ipv4/conf/all/arp_announce
/bin/touch $LOCK
echo "starting LVS-DR-RIP server is ok !"
fi
}
stop() {
/sbin/route del -host $VIP dev lo:10
/sbin/ifconfig lo:10 down >/dev/null
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/eth0/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/eth0/arp_announce
echo "0" >/proc/sys/net/ipv4/conf/all/arp_ignore
echo "0" >/proc/sys/net/ipv4/conf/all/arp_announce
rm -rf $LOCK
echo "stopping LVS-DR-RIP server is ok !"
}
status() {
if [ -e $LOCK ];
then
echo "The LVS-DR-RIP Server is already running !"
else
echo "The LVS-DR-RIP Server is not running !"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
restart)
stop
start
;;
status)
status
;;
*)
echo "Usage: $1 {start|stop|restart|status}"
exit 1
esac
exit 0chomd +x /etc/init.d/lvs_rs # 添加執行權限
/etc/init.d/lvs_rs start # 啟動腳本
route -n # 查看路由
5、修改keeplaived服務器配置文件(實現健康檢查和故障切換功能)
! Configuration File for keepalived # 主配置文件global_defs { # 全局配置notification_email {acassen@firewall.locfailover@firewall.locsysadmin@firewall.loc}notification_email_from Alexandre.Cassen@firewall.locsmtp_server 192.168.200.1smtp_connect_timeout 30router_id LVS_DEVEL1
}vrrp_instance VI_1 { # 實例一state MASTER # 指定為主節點# nopreempt 非搶占模式interface ens33 # 指定VIP綁定網卡virtual_router_id 51 # 指定實例的idpriority 100 # 指定主節點的優先級,主節點要高于備節點advert_int 1 # 指定發送vrrp通告的間隔authentication {auth_type PASS # 指定認證方式auth_pass 1111 # 指定使用密碼}virtual_ipaddress { # 指定vip(需要與真實ip在同一個網段)192.168.134.100}
}# 以下是做LVS配置
virtual_server 192.168.134.100 80 { # 指定所綁定的VIP及端口delay_loop 6 # 健康檢查的時間間隔lb_algo rr # 指定LVS調度算法lb_kind DR # 指定LVS模式,此處我們選取的是DR模式,還有NAT和TUN模式protocol TCP # 指定四層協議為TCPreal_server 192.168.134.171 80 { # 指定真實服務器地址weight 1 # 設定真實主機的權重TCP_CHECK { # 選中健康檢查方式為tcp-checkconnect_timeout 3 # 連接超時時間retry 3 # 重試次數delay_before_retry 3 # 在重試之前延遲多少秒connect_port 80 # 指定連接端口}}real_server 192.168.134.173 80 { # 指定另一臺真實服務器weight 1TCP_CHECK {connect_timeout 3retry 3delay_before_retry 3connect_port 80}}
}備節點配置
修改以下三處即可router_id LVS_DEVEL2state BACKUP priority 80
6、重啟Keepalived
systemctl restart keepalived.service # 先啟動主,再啟動備ip a|grep 192.168.134.100 # 此時只有主機有VIP,備機,沒有
7、測試(找客戶端寫以下測試來訪問,得到如下結果即正確)
for ((i=1;i<=6;i++)); do curl http://192.168.134.100; done結果:
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1
8、測試健康檢查與故障轉移
健康檢查:
停掉一臺web服務器
systemctl stop httpd此時客戶端訪問結果: 由于時間設置,需要一段時間后才可以出結果,雖然訪問結果少了一臺web服務器,但是可以被另一臺頂上,同樣不影響訪問。
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1 故障轉移:
停掉一臺keepalived服務器
systemctl stop keepalived此時VIP轉移至另一臺
[root@localhost keepalived]# ip a|grep 192.168.134.100inet 192.168.134.100/32 scope global ens33
客戶端訪問結果正常(1:1輪詢)
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1
web test page ,ip is 192.168.134.173 192.168.122.1
web test page ,ip is 192.168.134.171 192.168.122.1 在重新啟動主keepalived后,vip又回到主機,訪問仍舊正常。