LVS-DR + keepalived 高可用部署文档

实验环境:CentOS Linux release 7.6.1810 (Core)

服务 IP VIP
VS-master 192.168.113.132 192.168.113.129
VS-slave 192.168.113.130
RS1 192.168.113.133 绑定但不回应广播
RS2 192.168.113.134 绑定但不回应广播
client 192.168.113.135

基础配置,关闭防火墙(略) 需要注意的是: 1.确保client能够直接访问 RS 的 web服务器 ; 原因:LVS-DR模型,RS是直接回应客户端 2.lvs服务器 和 RS 服务器他们必须在同一个网段内; 原因:LVS转发包的时候,是直接修改了包目标的MAC地址,直接扔给了rs 3.抑制RS的ARP 原因:arp_ignore为1是说只回答目标IP地址是来访网络接口本地地址的ARP查询请求, 我们都在回环接口上配置了一个VIP,当arp模式更改以后,那么如果有谁在请求VIP的mac地址时, 那么那些web-server就会回答arp广播报文了,只有lvs才会,如果没有更改arp模式,那么大家都喊我是VIP,这就乱套了。 综上所述: 我这5台机器全划分在一个局域网内,可以互相通信,要想网页能够访问,只要保证 这些机器报文能出去 公网地址映射到我们的VIP上,公共网络就能访问到我们的服务



LVS-DR模型: 所有RS配置:(很简单:绑定VIP以及抑制ARP) 绑定VIP,绑定在回环网卡lo上 ###手动(不建议):ip addr add 192.168.113.131/32 dev lo label lo:0 写入配置文件:vim /etc/sysconfig/network-scripts/ifcfg-lo 追加 DEVICE=lo:0 IPADDR=192.168.113.129 NETMASK=255.255.255.255

抑制ARP: 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 采用下面写入配置文件永久生效方法: vim /etc/sysctl.conf net.ipv4.conf.lo.arp_ignore = 1 net.ipv4.conf.lo.arp_announce = 2 net.ipv4.conf.all.arp_ignore = 1 net.ipv4.conf.all.arp_announce = 2

sysctl -p #使其刚才的配置立即生效

装个http服务作为测试: yum ×××tall httpd -y echo "RS1 WEB SERVER" > /var/www/html/index.html



LVS-master: 1.开启路由转发(配置、生效、查看),并安装ipvsadm echo net.ipv4.ip_forward=1 >> /etc/sysctl.conf sysctl -p sysctl -a | grep ip_f

yum -y ×××tall ipvsadm

2.安装keepalived keepalived三大功能: 1)管理LVS 2)健康检查 3)实现负载均衡高可用 yum -y ×××tall keepalived

配置 keepalived.conf 注意事项: 1.vip能挂上,但ping不通,解决方法:注释vrrp_strict 2.客户端curl测试总是到同一台 解决方法: ##persistence_timeout 50 persistence_timeout 50 # 会话保持时间,单位是秒,这个选项对动态网页非常有帮助, 为集群系统中的session共享提供了一个很好的解决方案,有了这个会话保持功能, 用户的请求会被一直分发到某个服务节点,知道超过这个会话的保持时间,需要注意的是, 这个会话保持时间是最大无响应的超时时间,in other words, 用户在动态页面50秒以内没有执行任何操作, 那么接下来的操作会重新调度到另一个节点上。如果一直在操作则不会影响

从配置文件与主配置文件大致一样,只需要稍微修改以下: state BACKUP # backup状态 virtual_router_id 51 # master和backup的id一致 priority 90 #优先级比master低些

以下是LVS-master:的keepalived配置文件参考 我们这会用genhash来获取web服务 url的校验码:

vim /etc/keepalived/keepalived.conf ! Configuration File for keepalived

global_defs { notification_email { 0000000@qq.com } notification_email_from Alexandre.Cassen@firewall.loc smtp_server 127.0.0.1 smtp_connect_timeout 30 router_id LVS_DEVEL vrrp_skip_check_adv_addr #vrrp_strict vrrp_garp_interval 0 vrrp_gna_interval 0 }

vrrp_×××tance VI_1 { state MASTER #主 interface ens34 #绑定的网卡 virtual_router_id 51 # master和backup的id一致 priority 100 advert_int 1 # master和backup之间的检测时间 authentication { auth_type PASS auth_pass 1111 } virtual_ipaddress { 192.168.113.129/32 dev ens34 # 设置虚拟IP(VIP) } }

virtual_server 192.168.113.129 80 { # 设置虚拟服务器,ip端口以及花边号用逗号隔开 delay_loop 6 # 设置运行情况检查时间,单位是秒 lb_algo rr # 负载算法,这里是rr表示轮询 lb_kind DR # LVS工作机制,这里是DR模式 ##persistence_timeout 50 # 会话保持时间,单位是秒 protocol TCP # 有TCP,UDP

real_server 192.168.113.133 80 {			#设定真实服务器地址以及端口
    weight 1								# 设置权重,数字越低,调度的比例越小
    HTTP_GET {								#以http模式检查该服务器监控状态
        url {
          path /							# 检测的网页路径
          digest a6078171050153deb2d126e7bc05f3bf			# 采用genhash命令获取
        }
        connect_timeout 1					# 连接超时时间
        connect_port 80						#  连接的端口
        nb_get_retry 3						# 表示重试次数
        delay_before_retry 1				# 表示重试间隔


    }
}

real_server 192.168.113.134 80 {
    weight 1
    HTTP_GET {
        url {
          path /
          digest 3969f6a02448b46c5eedd9bc62a4e94c
        }
        connect_timeout 1
        connect_port 80
        nb_get_retry 3
        delay_before_retry 1


    }
}

}



修改 keepalived 的打印日志: 1.查看:启动/usr/lib/systemd/system/keepalived.service 修改:vim /etc/sysconfig/keepalived 把KEEPALIVED_OPTIONS="-D" 修改为:KEEPALIVED_OPTIONS="-D -d -S 0" 2.在/etc/rsyslog.conf 末尾添加 vim /etc/rsyslog.conf local0.* /var/log/keepalived.log 3.重启日志记录服务 systemctl restart rsyslog 4.重启keepalived


测试:

注意:如果你改变了keepalived中定义的健康检查页面的内容的话,需要重新生成验证码 客户端机器访问VIP:curl http://192.168.113.129