lvs keepalived 實現負載均衡
環境
主機名 | IP地址 | os | 軟件 | |
---|---|---|---|---|
lvs01 | 172.16.50.104 | CentOS 7.4.1708 | ipvsadm keepalived | master |
lvs02 | 172.16.50.111 | CentOS 7.4.1708 | ipvsadm keepalived | backup |
nginx01 | 172.16.50.124 | CentOS 7.4.1708 | nginx | |
nginx02 | 172.16.50.112 | CentOS 7.4.1708 | nginx |
Vip地址 172.16.50.230
部署
Nginx 部署
主機nginx01,nginx02
yum install nginx -y
啓動
systemctl enable nginx && systemctl start nginx
主機nginx01
echo "124" > /usr/share/nginx/html/index.html
主機nginx02
echo "112" > /usr/share/nginx/html/index.html
創建realserver.sh
腳本,內容如下:
#!/bin/bash
#description: Config realserver
VIP=172.16.50.230
. /etc/rc.d/init.d/functions
case "$1" in
start)
/sbin/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)
/sbin/ifconfig lo:0 down
/sbin/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 Stoped"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
exit 0
添加執行權限及運行腳本
chmod +x realserver.sh && ./realserver.sh start
lvs,keepalived 部署
開啓路由轉發
臨時生效
echo "1" > /proc/sys/net/ipv4/ip_forward
永久生效,編輯配置文件/etc/sysctl.conf
添加
net.ipv4.ip_forward= 1
sysctl -p #生效
主機 lvs01,lvs02
yum install ipvsadm keepalived -y
主機lvs01
編輯配置文件/etc/keepalived/keepalived.conf
! Configuration File for keepalived
! 全局配置
global_defs {
! 標識
router_id keep-50.104
}
! VRRPD配置
vrrp_instance VI_1 {
! 指定該keepalived節點的初始狀態:MASTER|BACKUP
state MASTER
! vrrp實例綁定的接口,用於發送VRRP包
interface eth0
! 指定VRRP實例ID,範圍是0-255,主備的virtual_router_id 必須相同
virtual_router_id 51
! 指定優先級,優先級高的將成爲MASTER
priority 100
! 指定發送VRRP通告的間隔,單位秒
advert_int 1
authentication {
! 指定認證方式:PASS|AH
auth_type PASS
! 指定認證所使用的密碼,最多8位
auth_pass 1111
}
virtual_ipaddress {
! 指定VIP地址
172.16.50.230
}
}
virtual_server 172.16.50.230 80 {
! 健康檢查的時間間隔
delay_loop 6
! LVS調度算法:rr|wrr|lc|wlc|lblc|sh|dh
lb_algo rr
! LVS模式:NAT|DR|TUN
lb_kind DR
! 持久化超時時間,單位秒
persistence_timeout 50
! 協議: TCP|UDP|SCTP
protocol TCP
! 後端服務器
real_server 172.16.50.124 80 {
! 權重
weight 1
! 健康檢查方式
TCP_CHECK {
! 超時時間,單位秒
connect_timeout 3
! 嘗試次數
nb_get_retry 3
! 在嘗試之前延遲多少秒
delay_before_retry 10
! 嘗試間隔
delay_before_retry 2
}
}
real_server 172.16.50.112 80 {
! 權重
weight 1
! 健康檢查方式
TCP_CHECK {
! 超時時間,單位秒
connect_timeout 3
! 嘗試次數
nb_get_retry 3
! 在嘗試之前延遲多少秒
delay_before_retry 10
! 嘗試間隔
delay_before_retry 2
}
}
}
主機lvs02
參考主機lvs01
配置文件
修改部分
router_id keep-50.111
state BACKUP
priority 90
啓動
systemctl enable keepalived && systemctl start keepalived
測試
ipvsadm -Ln
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP 172.16.50.230:80 rr persistent 50
-> 172.16.50.112:80 Route 1 0 0
-> 172.16.50.124:80 Route 1 0 0
curl 172.16.50.230
112
-
停止主機
nginx02
Nginx 服務觀察主機
lvs01
keepalived日誌lvs01keepalived[10879]: TCP connection to [172.16.50.112]:80 failed. Keepalived_healthcheckers[10879]: TCP connection to [172.16.50.112]:80 failed. Keepalived_healthcheckers[10879]: Check on service [172.16.50.112]:80 failed after 1 retry. Keepalived_healthcheckers[10879]: Removing service [172.16.50.112]:80 from VS [172.16.50.230]:80
curl 172.16.50.230 124
-
停止主機
lvs01
Keepalived 服務觀察主機
lvs02
Keepalived 日誌Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Transition to MASTER STATE Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Entering MASTER STATE Keepalived_vrrp[10774]: VRRP_Instance(VI_1) setting protocol VIPs. Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: VRRP_Instance(VI_1) Sending/queueing gratuitous ARPs on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230 Keepalived_vrrp[10774]: Sending gratuitous ARP on eth0 for 172.16.50.230
Vip地址漂移到了主機
lvs02