说明
本文章介绍使用keepalived+LVS的方式搭建高可用的集群服务器
主机配置列表
主机名 | IP地址 | 角色 |
---|---|---|
client | 192.168.4.10/24 | 客户端 |
LVS1 | 192.168.4.5/24 192.168.4.15(VIP) | 主调度服务器 主keepalived服务器 |
LVS2 | 192.168.4.6/24 192.168.4.15(VIP) | 备调度服务器 备keepalived服务器 |
web1 | 192.168.4.100/24 | web服务器 |
web2 | 192.168.4.200/24 | web服务器 |
软件环境
软件名称 | 版本 |
---|---|
Centos | 7.5 |
httpd | 2.4.6 |
keepalive | 1.3.5 |
ipvsadm | 1.27 |
拓扑图
介绍
- proxy1、proxy2安装LVS软件,实现web服务器的轮询调度
- proxy1、proxy2安装keepalived软件,实现LVS的高可用集群
- web1、web2安装httpd软件,提供测试界面
- web1、web2的回环网卡上配置VIP地址,实现LVS的DR工作模式
- web1、web2配置网络内核参数,不回应ARP广播,不对外宣告网络
- client访问VIP
- 可以轮询到web1、web2的测试界面,说明主调度器正常工作,此时VIP在主调度器上,此时VIP在主调度器上
- 关闭主调度器,模拟调度器宕机,client访问VIP,可以轮询到web1、web2的测试界面,同时查看VIP是否出现在备调度器上,如果出现,说明keepalived实现了故障时自动切换,此时VIP地址在备调度器上
- 重新打开主调度器,client访问VIP,可以轮询到web1、web2的测试界面,同时查看VIP是否出现在主调度器上,如果出现,说明可以实现故障恢复后主调度器可以重新获取VIP成为主服务器,此时VIP出现在主调度器上
部署步骤
1.web1修改IP地址为192.168.4.100/24,关闭防火墙,关闭selinux,安装httpd软件,写入测试界面
[root@web1 ~]# sed -i '/IPADDR/c IPADDR=192.168.4.100' /etc/sysconfig/network-scripts/ifcfg-eth0 && systemctl restart network #修改IP地址,重启网卡
[root@web1 ~]# ip a s #查看IP
[root@web1 ~]# systemctl stop firewalld && systemctl disable firewalld #关闭防火墙,禁止开机自启
[root@web1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #关闭selinux,重启服务器后生效
[root@web1 ~]# yum -y install httpd #安装httpd软件
[root@web1 ~]# echo "192.168.4.100-web1" > /var/www/html/index.html #写入测试界面
[root@web1 ~]# systemctl start httpd && systemctl enable httpd #启动httpd服务,设置开机自启
[root@web1 ~]# reboot #重启服务器,让selinux生效
2.web1修改网络内核参数
[root@web1 ~]# vim /etc/sysctl.conf #修改网络内核参数文件
net.ipv4.conf.all.arp_ignore = 1 #配置全部网卡不回应arp广播,不包括lo网卡
net.ipv4.conf.lo.arp_ignore = 1 #配置lo网卡不回应arp广播
net.ipv4.conf.lo.arp_announce = 2 #配置lo网卡不对外宣告网络
net.ipv4.conf.all.arp_announce = 2 #配置全部网卡不对外宣告网络,不包括lo网卡
[root@web1 ~]# sysctl -p #刷新让参数生效
说明
- arp_ignore表示当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应(防止进站冲突),默认是0不忽略,1表示忽略
- arp_announce本机不要向外宣告自己的lo回环地址是192.168.4.15(防止出站冲突),2表示不向外宣告,默认值是0表示对外宣告
- 回环网卡没有物理网线连接,所以才能伪装成VIP
3.web1在回环网卡上添加集群的VIP192.168.4.15/32
[root@web1 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0 #复制第二个IP的配置文件
[root@web1 ~]# #修改配置文件
DEVICE=lo:0 #设备名称
IPADDR=192.168.4.15 #IP地址
NETMASK=255.255.255.255 #子网掩码
NETWORK=192.168.4.15 #网络地址
BROADCAST=192.168.4.15 #广播地址
ONBOOT=yes #开机时是否自动激活网卡
NAME=lo:0 #网卡名称
[root@web1 ~]# systemctl restart network #重启网卡
[root@web1 ~]# ip a s #查看回环网卡上的第2个IP
说明
- 配置的VIP地址,必须是32位,网络地址和IP地址一样,广播地址和IP地址一样,配置完成后,需要修改网络内核参数之后,再重启网卡,如果先修改的网络内核参数,则可以直接重启网卡
- 回环网卡没有物理网线连接,所以才能伪装成VIP
4.web2修改IP地址为192.168.4.200/24,关闭防火墙,关闭selinux,安装httpd软件,写入测试界面
[root@web2 ~]# sed -i '/IPADDR/c IPADDR=192.168.4.200' /etc/sysconfig/network-scripts/ifcfg-eth0 && systemctl restart network #修改IP地址,重启网卡
[root@web2 ~]# systemctl stop firewalld && systemctl disable firewalld #关闭防火墙,禁止开机自启
[root@web2 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #关闭selinux,重启服务器后生效
[root@web2 ~]# yum -y install httpd #安装httpd软件
[root@web2 ~]# echo "192.168.4.200-web2" > /var/www/html/index.html #写入测试界面
[root@web2 ~]# systemctl start httpd && systemctl enable httpd #启动httpd服务,设置开机自启
[root@web2 ~]# reboot #重启服务器,让selinux生效
5.web2修改网络内核参数
[root@web2 ~]# vim /etc/sysctl.conf #修改网络内核参数文件
net.ipv4.conf.all.arp_ignore = 1 #配置全部网卡不回应arp广播,不包括lo网卡
net.ipv4.conf.lo.arp_ignore = 1 #配置lo网卡不回应arp广播
net.ipv4.conf.lo.arp_announce = 2 #配置lo网卡不对外宣告网络
net.ipv4.conf.all.arp_announce = 2 #配置全部网卡不对外宣告网络,不包括lo网卡
[root@web2 ~]# sysctl -p #刷新让参数生效
说明
- arp_ignore表示当有arp广播问谁是192.168.4.15时,本机忽略该ARP广播,不做任何回应(防止进站冲突),默认是0不忽略,1表示忽略
- arp_announce本机不要向外宣告自己的lo回环地址是192.168.4.15(防止出站冲突),2表示不向外宣告,默认值是0表示对外宣告
- 回环网卡没有物理网线连接,所以才能伪装成VIP
6.web2在回环网卡上添加集群的VIP192.168.4.15/32
[root@web2 ~]# cp /etc/sysconfig/network-scripts/ifcfg-lo /etc/sysconfig/network-scripts/ifcfg-lo:0 #复制第二个IP的配置文件
[root@web2 ~]# vim /etc/sysconfig/network-scripts/ifcfg-lo:0 #修改配置文件
DEVICE=lo:0 #设备名称
IPADDR=192.168.4.15 #IP地址
NETMASK=255.255.255.255 #子网掩码
NETWORK=192.168.4.15 #网络地址
BROADCAST=192.168.4.15 #广播地址
ONBOOT=yes #开机时是否自动激活网卡
NAME=lo:0 #网卡名称
[root@web2 ~]# systemctl restart network #重启网卡
[root@web2 ~]# ip a s #查看回环网卡上的第2个IP
说明
- 配置的VIP地址,必须是32位,网络地址和IP地址一样,广播地址和IP地址一样,配置完成后,需要修改网络内核参数之后,再重启网卡,如果先修改的网络内核参数,则可以直接重启网卡
- 回环网卡没有物理网线连接,所以才能伪装成VIP
7.LVS1配置DIP192.168.4.5/24,关闭防火墙,关闭selinux,安装LVS软件,安装keepalived软件
[root@LVS1 ~]# sed -i '/IPADDR/c IPADDR=192.168.4.5' /etc/sysconfig/network-scripts/ifcfg-eth0 #修改IP地址
[root@LVS1 ~]# systemctl restart network #重启网卡
[root@LVS1 ~]# systemctl stop firewalld && systemctl disable firewalld #关闭防火墙,禁止开机自启
[root@LVS1 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #关闭selinux,重启服务器后生效
[root@LVS1 ~]# yum -y install ipvsadm.x86_64 #安装lvs软件
[root@LVS1 ~]# yum -y install keepalived.x86_64 #安装keepalived软件
[root@LVS1 ~]# reboot #重启服务器,让selinux生效
8.LVS1修改keepalived配置文件
[root@LVS1 ~]# vim /etc/keepalived/keepalived.conf
12 router_id LVS1 #设置路由ID号,方便区分
13 vrrp_iptables #清除防火墙的拦截规则(手动添加该行)
21 state MASTER #主服务器为MASTER(备服务器需要修改为BACKUP)
22 interface eth0 #VIP添加在哪个网卡,根据实际网卡修改
23 virtual_router_id 51 #主备服务器VRID号必须一致
24 priority 100 #服务器优先级,优先级高优先获取VIP,此处为主服务器
30 virtual_ipaddress {
31 192.168.4.15/24 #VIP,谁是主服务器谁获得
32 }
35 virtual_server 192.168.4.15 80 { #设置LVS规则
36 delay_loop 6 #默认健康检查延时6秒
37 lb_algo rr #设置LVS调度算法为RR
38 lb_kind DR #设置LVS的的模式为DR
39 #persistence_timeout 50 #作用是保持连接,开启后客户端在50秒内访问同一服务,注释掉
40 protocol TCP #使用TCP协议
41
42 real_server 192.168.4.100 80 { #设置WEB1服务器真实IP
43 weight 1 #设置权重为1
44 TCP_CHECK { #后台的real _server做健康检查
45 connect_timeout 3 #健康检查的超时时间为3秒
46 nb_get_retry 3 #健康检查的重试次数为3次
47 delay_before_retry 3 #健康检查的间隔时间为3秒
48 }
49 }
50 real_server 192.168.4.200 80 { #设置WEB2服务器真实IP
51 weight 1 #设置权重为1
52 TCP_CHECK { #后台的real _server做健康检查
53 connect_timeout 3 #健康检查的超时时间为3秒
54 nb_get_retry 3 #健康检查的重试次数为3次
55 delay_before_retry 3 #健康检查的间隔时间为3秒
56 }
57 }
58 }
剩余的行直接删除掉
[root@LVS1 ~]# systemctl start keepalived.service && systemctl enable keepalived.service #启动keepalived服务,并设置开机自启
9.LVS2配置DIP192.168.4.6/24,关闭防火墙,关闭selinux,安装LVS软件,安装keepalived软件
[root@LVS2 ~]# sed -i '/IPADDR/c IPADDR=192.168.4.6' /etc/sysconfig/network-scripts/ifcfg-eth0 && systemctl restart network #修改IP地址,重启网卡
[root@LVS2 ~]# systemctl stop firewalld && systemctl disable firewalld #关闭防火墙,禁止开机自启
[root@LVS2 ~]# sed -i '/SELINUX/s/enforcing/disabled/' /etc/selinux/config #关闭selinux,重启服务器后生效
[root@LVS2 ~]# yum -y install ipvsadm.x86_64 #安装LVS软件
[root@LVS2 ~]# yum -y install keepalived.x86_64 #安装keepalived软件
[root@LVS2 ~]# reboot #重启服务器,让selinux生效
10.LVS2修改keepalived配置文件
[root@LVS2 ~]# vim /etc/keepalived/keepalived.conf
12 router_id LVS2 #设置路由ID号,方便区分
13 vrrp_iptables #清除防火墙的拦截规则(手动添加该行)
21 state BACKUP #备服务器为BACKUP,(主服务器需要修改为MASTER)
22 interface eth0 #VIP添加在哪个网卡,根据实际网卡修改
23 virtual_router_id 51 #主备服务器VRID号必须一致
24 priority 80 #服务器优先级,优先级高优先获取VIP,此处为备服务器
30 virtual_ipaddress {
31 192.168.4.15/24 #VIP,谁是主服务器谁获得
32 }
35 virtual_server 192.168.4.15 80 { #设置LVS规则
36 delay_loop 6 #默认健康检查延时6秒
37 lb_algo rr #设置LVS调度算法为RR
38 lb_kind DR #设置LVS的的模式为DR
39 #persistence_timeout 50 #作用是保持连接,开启后客户端在50秒内访问同一服务,注释掉
40 protocol TCP #使用TCP协议
41
42 real_server 192.168.4.100 80 { #设置WEB1服务器真实IP
43 weight 1 #设置权重为1
44 TCP_CHECK { #后台的real _server做健康检查
45 connect_timeout 3 #健康检查的超时时间为3秒
46 nb_get_retry 3 #健康检查的重试次数为3次
47 delay_before_retry 3 #健康检查的间隔时间为3秒
48 }
49 }
50 real_server 192.168.4.200 80 { #设置WEB2服务器真实IP
51 weight 1 #设置权重为1
52 TCP_CHECK { #后台的real _server做健康检查
53 connect_timeout 3 #健康检查的超时时间为3秒
54 nb_get_retry 3 #健康检查的重试次数为3次
55 delay_before_retry 3 #健康检查的间隔时间为3秒
56 }
57 }
58 }
剩余的行直接删除掉
[root@LVS2 ~]# systemctl start keepalived.service && systemctl enable keepalived.service #启动keepalived服务,并设置开机自启
11.client访问VIP,可以轮询到web1、web2的测试界面,说明主调度器正常工作,此时VIP在主调度器上,此时VIP在主调度器上
12.关闭主调度器,模拟调度器宕机,client访问VIP,可以轮询到web1、web2的测试界面,同时查看VIP是否出现在备调度器上,如果出现,说明keepalived实现了故障时自动切换,此时VIP地址在备调度器上
13.重新打开主调度器,client访问VIP,可以轮询到web1、web2的测试界面,同时查看VIP是否出现在主调度器上,如果出现,说明可以实现故障恢复后主调度器可以重新获取VIP成为主服务器,此时VIP出现在主调度器上