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
结果显示: 后端服务可以自由的监控到,然后又恢复正常了

 

posted @ 2023-05-17 14:54  小粉优化大师  阅读(826)  评论(0编辑  收藏  举报