高可用实现架构
高可用具体实现
1.如何保证多台danted服务的负载均衡
通过采用haproxy这个服务对多台danted服务的请求进行负载均衡
haproxy服务对danted服务进行健康检测时,如果发现异常会自动将异常服务剔除,将请求负载到好的服务器上,直到服务恢复正常后又会自动加入到负载均衡的列表中。
2.如何保证haproxy以及danted服务的高可用
由haproxy官方文档可知, haproxy很好的集成了keepalived,可以很容易的告知keepalived它自己的状态,然后进行ip漂移。 所以这里我们通过keepalived进行解决haproxy的单点故障问题,保证haproxy的高可用。
具体配置和实现:
在keepalived.conf中,我们看到以下配置
-
vrrp_script配置作用:keepalived会定时执行脚本并对脚本执行的结果进行分析,动态调整vrrp_instance的优先级。
- “weight”值为正数时
在vrrp_script中指定的脚本如果检测成功,那么Master节点的权值将是“weight值与”priority“值之和,如果脚本检测失败,那么Master节点的权值保持为“priority”值,因此切换策略为:
Master节点“vrrp_script”脚本检测失败时,如果Master节点“priority”值小于Backup节点“weight值与”priority“值之和,将发生主、备切换。
Master节点“vrrp_script”脚本检测成功时,如果Master节点“weight”值与“priority”值之和大于Backup节点“weight”值与“priority”值之和,主节点依然为主节点,不发生切换。
- “weight”值为负数时
在“vrrp_script”中指定的脚本如果检测成功,那么Master节点的权值仍为“priority”值,当脚本检测失败时,Master节点的权值将是“priority“值与“weight”值之差,因此切换策略为:
Master节点“vrrp_script”脚本检测失败时,如果Master节点“priority”值与“weight”值之差小于Backup节点“priority”值,将发生主、备切换。
Master节点“vrrp_script”脚本检测成功时,如果Master节点“priority”值大于Backup节点“priority”值时,主节点依然为主节点,不发生切换。
- 由这里的策略可知,weight以及priority这两者值的选择非常重要,如果选择不当,可能会导致即使master故障,依旧不会发生主备切换、保证高可用
-
保证高可用,还得看具体脚本执行的结果,这里我们阅读以下对应的脚本
脚本内容很简单,就是去查询了danted,haproxy和keepalived自身的服务状态,发现异常会将其重启。这个时候,脚本检测失败,会发生keepalived的主备切换,保证服务的正常运行,即保证haproxy,danted,keepalived的高可用, 其实这里脚本不需要这么复杂,只需要检测danted服务状态是否正常即可。
参考链接
https://blog.51cto.com/wangaimin/1903842