文章目录
Linux云计算架构-使用keepalived+LVS+DR部署高可用集群
1. keepalived+LVS+DR架构图
在博主的其他博客有说到如何配置主备LVS,这里不多介绍。
2. 配置RS后端真实服务器
使用脚本配置rs1:
[root@rs1 ~]# vim /etc/init.d/lvsrsdr
#!/bin/bash
#description:start relserver
VIP=192.168.10.30
source /etc/init.d/functions #加载环境变量(可以加载所有的环境变量)
case $1 in
start)
echo 'start LVS of Realserver DR'
/sbin/ifconfig lo:1 $VIP broadcast $VIP netmask 255.255.255.255 up
/sbin/route add -host $VIP dev lo: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
;;
stop)
/sbin/ifconfig lo:1 down
echo 'Close LVS of Realserver DR'
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 "Usage:$0 (start|stop)"
exit 1
esac
# 用脚本配置RS1
[root@rs1 ~]# chmod +x /etc/init.d/lvsrsdr
[root@rs1 ~]# /etc/init.d/lvsrsdr start
Reloading systemd: [ 确定 ]
Starting lvsrsdr (via systemctl): [ 确定 ]
[root@rs1 ~]# echo "/etc/init.d/lvsrsdr start" >> /etc/rc.local
[root@rs1 ~]# ifconfig -a
lo:1: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 192.168.10.30 netmask 255.255.255.255
loop txqueuelen 1000 (Local Loopback)
# 在RS1上配置httpd服务,并开通防火墙的80端口号,httpd服务重启并添加到开机自启
[root@rs1 ~]# yum install httpd -y
[root@rs1 ~]# echo 192.168.10.40 > /var/www/html/index.html
[root@rs1 ~]# firewall-cmd --permanent --zone=public --add-port=80/tcp
success
[root@rs1 ~]# firewall-cmd --reload
success
[root@rs1 ~]# systemctl restart httpd
[root@rs1 ~]# systemctl enable httpd
# 如果重启不来,一般是ServerName没有修改。
[root@rs1 ~]# vim /etc/httpd/conf/httpd.conf
95 ServerName localhost:80
# 用curl命令看下能否获取到网页,可以看到是没问题的。
[root@rs1 ~]# curl 192.168.10.40
192.168.10.40
# 用同样的方法配置RS2
为了看到负载均衡的效果,测试页的内容稍微调整下:
[root@rs2 ~]# echo 192.168.10.50 > /var/www/html/index.html
[root@rs2 ~]# curl 192.168.10.50
192.168.10.50
3. keepalived+LVS+DR负载均衡高可用集群测试
这里配置一台客户端,IP地址为192.168.10.60
。能访问VIP
的前提是能ping通。
3.1 测试负载均衡
# 安装检测工具
[root@client ~]# yum install elinks -y
# 如果在keepalived的配置文件中,设置了以下参数,可能会无法看到以下效果。
# 该参数的作用是同一IP访问VIP时,会保持长连接50s,即50s后才会切换。
# 要想立刻看到效果的,可以删除改行。
persistence_timeout 50
3.2 测试高可用
# 停止主LVS的keepalived服务模拟故障
[root@mlvs1 ~]# systemctl stop keepalived.service
# VIP已经进行漂移
[root@mlvs2 ~]# ip a | grep ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.10.20/24 brd 192.168.10.255 scope global noprefixroute ens32
inet 192.168.10.30/32 scope global ens32
# 还是可以访问VIP
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@mlvs2 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.10.30:80 8 48 0 3736 0
-> 192.168.10.40:80 4 24 0 1868 0
-> 192.168.10.50:80 4 24 0 1868 0
3.3 测试主LVS故障恢复
# 重新启动主LVS上的keepalived服务
[root@mlvs1 ~]# systemctl start keepalived.service
# 可以看到VIP已经迁移回来了
[root@mlvs1 ~]# ip a | grep ens32
2: ens32: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
inet 192.168.10.10/24 brd 192.168.10.255 scope global noprefixroute ens32
inet 192.168.10.30/32 scope global ens32
# VIP还是可以继续访问
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.50
[root@client ~]# elinks 192.168.10.30 --dump
192.168.10.40
[root@mlvs1 ~]# ipvsadm -L -n --stats
IP Virtual Server version 1.2.1 (size=4096)
Prot LocalAddress:Port Conns InPkts OutPkts InBytes OutBytes
-> RemoteAddress:Port
TCP 192.168.10.30:80 6 36 0 2802 0
-> 192.168.10.40:80 3 18 0 1401 0
-> 192.168.10.50:80 3 18 0 1401 0