keepalived+LVS【健康检查:HTTP_GET、TCP_CHECK】
1、默认配置
1.1、配置示例
virtual_server 10.10.10.2 1358 { delay_loop 6 lb_algo rr lb_kind NAT persistence_timeout 50 protocol TCP sorry_server 192.168.200.200 1358 real_server 192.168.200.2 1358 { weight 1 HTTP_GET { url { path /testurl/test.jsp digest 640205b7b0fc66c1ea91c463fac6334d } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } ... }
1.2、属性解析
1.2.1、第一层的解析
delay_loop # 用于服务轮询的延迟计时器 lb_algo # 设定访问后端服务的调度策略,在当前的keepalived版本下,它支持7种调度算法 rr|wrr|lc|wlc|lblc|sh|dh lb_kind # 设定数据转发的模型,因为是基于IPVS进行负载均衡的,所以数据转发的模型与LVS一致 NAT|DR|TUN persistence_timeout # 设定数据持久性的超时时间,默认为6分钟 protocol # 设定数据通信的协议,默认支持三种 TCP|UDP|SCTP,这一项是必备的,因为我们使用ipvsadm 创建集群的时候,必须指定通信协议 sorry_server # 备用真实主机,当所有RS失效后,开始启用该后备主机。 real_server # 设定后端主机的信息
1.2.2、real_server属性解析
weight # 设定真实主机的权重,默认是1 HTTP_GET # 以HTTP方式来检查后端主机 TCP_CHECK # 以TCP方式来检查后端主机 SMTP_CHECK # 以SMTP方式来检查后端主机 DNS_CHECK # 以DNS方式来检查后端主机 MISC_CHECK # 以MISC方式来检查后端主机
1.3、http检测属性
url { path <path/to/url> 指定要检查的URL的路径 digest <STRING> 校验码验证,校验计算:genhash -s <IP> -p <port> -u /path/to/url status_code <INT> 状态码方式验证,推荐使用这种方法 } 注意: 由于digest方式太繁琐,而且文件一旦变动,老的digest就不能用了,所以不推荐 connect_timeout 连接超时时间,默认5s nb_get_retry get方式获取检测url页面的重试次数 delay_before_retry 重试的间隔时间,默认1s
1.4、tcp检测属性
connect_ip # 测试目标的ip,默认是RS的ip,可省略 connect_port # 测试目标的端口,默认是RS的port,可省略 connect_timeout # 连接超时时间 retry # 重试次数,刻省略 delay_before_retry # 重试间隔时间,默认1s
2、简单实践
2.1、定制keepalived的属性 (两台主机一致)
virtual_server 192.168.8.100 80 { delay_loop 2 lb_algo rr lb_kind DR protocol TCP sorry_server 127.0.0.1 80 real_server 192.168.8.14 80 { HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } real_server 192.168.8.15 80 { HTTP_GET { url { path / status_code 200 } connect_timeout 3 nb_get_retry 3 delay_before_retry 3 } } } 注意:只需要 在每个real_server中添加 HTTP_GET 属性即可
2.2、重启keepalived服务
systemctl restart keepalived
2.3、正常效果
# 查看当前的web效果 ~]# for i in {1..10}; do curl 192.168.8.100;done nginx-RS2 nginx-RS1 ... nginx-RS2 nginx-RS1
# 查看当前的ipvsadm规则 ]# ipvsadm -Ln IP Virtual Server version 1.2.1 (size=4096) Prot LocalAddress:Port Scheduler Flags -> RemoteAddress:Port Forward Weight ActiveConn InActConn TCP 192.168.8.100:80 rr -> 192.168.8.16:80 Route 1 0 1 -> 192.168.8.17:80 Route 1 0 2
2.4、模拟后端故障
# 停止后端RS1的nginx服务 [root@lvs-rs1 ~]# systemctl stop nginx # 查看当前的web效果 ~]# for i in {1..10}; do curl 192.168.8.100;done nginx-RS2 nginx-RS2 ... nginx-RS2
2.5、模拟后端恢复
# 恢复后端RS1的nginx服务 lvs-rs1 ~]# systemctl start nginx
# 查看当前的web效果 ~]# for i in {1..10}; do curl 192.168.8.100;done nginx-RS2 nginx-RS1 ... nginx-RS2 nginx-RS1
结果显示: 后端服务可以自由的监控到,然后又恢复正常了