一、Keepalive
1. Keepalive概述
代理服务器和调度器都是单点模式,Keepalive是一种实现LVS调度器实现高可用集群的架设,以提高节点的冗余和容错。
Keepalive是一种基于VRRP协议实现的调度器高可用方案,为了实现LVS的集群而设计开发,但是适用场景不仅局限于LVS。Keepalive会为后台服务做健康检查,服务不可用时,会自动移除IPVS的转发策略,服务恢复时会自动把策略重新加入IPVS中。
Keepalive可以实现以下功能:
- 主备切换。
- 故障检测和恢复。
- 主备设备通过组播地址224.0.0.18通信。
- 通过配置VIP来实现集群入口。
2. Keepalive工作原理
- 主备调度器的权重不同,通过VIP来访问调度器集群。
- 当主调度器故障,备用调度器会接替成为主服务器。通过VIP访问后端服务器,也就成为通过该调度器来进行访问。
- 当故障恢复,两台调度器会通过组播地址进行通信,比较权重。此时原先的主调度器会正常工作,通过VIP访问也就是通过该调度器进行访问。
二、Keepalive具体架设
1. 调度器部署
-
两台调度器上都安装ipvsadm和keepalived软件包。
bashapt -y install ipvsadm keepalived
-
复制Keepalive配置文件模板。
bashcp /usr/share/doc/keepalived/samples/keepalived.conf.sample /etc/keepalived/keepalived.conf
-
配置keepalived.conf文件。
propertiesglobal_defs { notification_email { acassen@firewall.loc failover@firewall.loc sysadmin@firewall.loc } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_01 vrrp_iptables } vrrp_instance VI_1 { state MASTER interface ens33 virtual_router_id 51 priority 100 advert_int 1 virtual_ipaddress { 192.168.1.100 } } virtual_server 192.168.1.100 80 { delay_loop 6 lb_algo rr lb_kind DR persistence_timeout 0 protocol TCP real_server 192.168.1.129 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.1.130 80 { weight 1 TCP_CHECK { connect_port 80 connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } }
-
将keepalived.conf配置文件从主调度器发送给备用调度器,并将备用调度器的文件做出如下修改。
propertiesrouter_id LVS_01 state BACKUP priority 50
-
保存文件后,分别在两台调度器上重启keepalived服务。
bashsystemctl restart keepalived
-
配置系统内核文件/etc/sysctl.conf。
propertiesnet.ipv4.ip_forward = 0 net.ipv4.conf.all.send_redirects = 0 net.ipv4.conf.default.send_redirects = 0 net.ipv4.conf.ens37.send_redirects = 0
-
应用内核配置,使其生效。
bashsysctl -p
-
检查ipvsadm策略、VIP是否正常显示。
2. 后端服务器部署
-
配置两台后端服务器的网卡。
yaml# 第一台RS服务器 network: ethernets: ens33: dhcp4: no addresses: [192.168.1.129/24] gateway4: 192.168.1.254 ens37: dhcp4: no addresses: [192.168.1.100/24] # 第二台RS服务器 network: ethernets: ens33: dhcp4: no addresses: [192.168.1.130/24] gateway4: 192.168.1.254 ens37: dhcp4: no addresses: [192.168.1.100/24]
-
保存文件后,应用网卡配置。
bashnetplan apply
-
在两台服务器上配置静态路由。
bashroute add -host 192.168.1.100 dev ens37
-
配置系统的内核文件/etc/sysctl.conf。
propertiesnet.ipv4.conf.ens37.arp_ignore = 1 net.ipv4.conf.ens37.arp_announce = 2
-
应用内核配置,使其生效。
bashsysctl -p
-
开启两台后端服务器的Nginx服务。
bashsystemctl restart nginx
3. 客户端访问测试
- 访问VIP地址,查看是否能够获取到网页内容。
4. 调度器宕机测试
-
在主调度器上关闭keepalived访问。
bashsystemctl stop keepalived
-
查看两台调度器的网络信息,检查VIP是否发生了转移。
baship address
-
再次通过客户端访问VIP,查看是否能够获取到网页内容。