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