LVS+keepalived高可用

环境部署

192.168.57.3          lvs1
192.168.57.4          lvs2
192.168.57.100        vip
192.168.57.5          realserver1
192.168.57.6           realserver2

在lvs1和lvs2上安装lvs和keepalived

yum install ipvsadm keepalived -y

在realserver1和realserver2上安装nginx

[root@localhost ~]# cat /etc/yum.repos.d/nginx.repo 
[nginx-stable] 
name=nginx stable repo 
baseurl=http://nginx.org/packages/centos/7/$basearch/ 
gpgcheck=1 
enabled=1 
gpgkey=http://nginx.org/keys/nginx_signing.key
yum install nginx -y

配置nginx并启动

[root@realserver2 ~]# echo realserver2 >/usr/share/nginx/html/index.html 
[root@realserver2 ~]# systemctl start nginx
[root@realserver2 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@realserver2 ~]# 
[root@realserver1 ~]# echo realserver1 >/usr/share/nginx/html/index.html
[root@realserver1 ~]# systemctl start nginx
[root@realserver1 ~]# systemctl enable nginx
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service.
[root@realserver1 ~]# 

配置keepalived

[root@lvs1 ~]# cat /etc/keepalived/keepalived.conf 
! Configuration File for keepalived

global_defs {
notification_email {
root@local              #邮件通知人
xxx@xx.com
}
notification_email_from root@local
smtp_server 127.0.0.1
smtp_connect_timeout 30
router_id LVS_DEVEL
}

vrrp_instance VI_1 {
state MASTER           #从节点为BACKUP
interface enp0s8
virtual_router_id 50
priority 100           #从节点要小于这个数,比如90
advert_int 1
authentication {
auth_type PASS
auth_pass 1111
}
virtual_ipaddress {
192.168.57.100/24 dev enp0s8

}
}

virtual_server 192.168.57.100 80 {
delay_loop 2
lb_algo wrr
lb_kind DR
protocol TCP
persistence_timeout 0
real_server 192.168.57.5 80 {
weight 2
TCP_CHECK {
connect_port 80
connect_timeout 3
nb_get_retry 3
delay_before_retry 3
}
}
real_server 192.168.57.6 80 {
weight 1
TCP_CHECK {
connect_timeout 3
connet_port 80
nb_get_retry 3
delay_before_retry 3
}
}
}

启动keepalived

[root@lvs1 ~]# systemctl start keepalived
[root@lvs1 ~]# systemctl enable keepalived

查看lvs

[root@lvs1 ~]# ipvsadm -L
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Scheduler Flags
-> RemoteAddress:Port Forward Weight ActiveConn InActConn
TCP lvs1:http wrr
-> 192.168.57.5:http Route 2 0 0 
-> 192.168.57.6:http Route 1 0 0 
[root@lvs1 ~]# 

查看网卡绑定

[root@lvs1 ~]# ip addr  grep enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
inet 192.168.57.3/24 brd 192.168.57.255 scope global enp0s8
inet 192.168.57.100/24 scope global secondary enp0s8

配置lvs脚本,在两台realserver上

[root@realserver1 init.d]# cat lvs-web.sh 
#!/bin/sh
VIP=192.168.57.100
. /etc/rc.d/init.d/functions

case $1 in

start)
/sbin/ifconfig lo down
/sbin/ifconfig lo up
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
/sbin/sysctl -p >/dev/null 2>&1
/sbin/ifconfig lo:0 $VIP netmask 255.255.255.255 up 
/sbin/route add -host $VIP dev lo:0
echo LVS-DR real server starts successfully.n
;;
stop)
/sbin/ifconfig lo:0 down
/sbin/route del $VIP >/dev/null 2>&1
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
echo LVS-DR real server stopped.n
;;
status)
isLoOn=`/sbin/ifconfig lo:0  grep $VIP`
isRoOn=`/bin/netstat -rn  grep $VIP`
if [ $isLoON ==  -a $isRoOn ==  ]; then
echo LVS-DR real server has run yet.
else
echo LVS-DR real server is running.
fi
exit 3
;;
*)
echo Usage: $0 {startstopstatus}
exit 1
esac
exit 0

添加执行权限并启动

chmod +x  lvs-web.sh
sh lvs-web.sh start

至此,完成所有配置, 使用curl http://192.168.57.100测试是否可以调度


LVS+keepalived高可用
http://www.jcwit.com/article/64/
作者
Carlos
发布于
2020年8月2日
许可协议