我在每台机器上都有三台服务器A,B,C我正在运行Chronos,ZooKeeper,mesos-master,mesos-slave。
Chronos使用ZooKeeper url联系mesos-master,因此即使某个节点关闭,它也会自动选择前导master。我在这里有很高的可用性。
即使Chronos在集群模式下运行,因此访问任何Chronos我看到相同的作业列表,一切正常。
我在这里遇到的问题是,可以使用三个URL中的任何一个访问Chronos
http://server_node_1:4400
http://server_node_2:4400
http://server_node_3:4400
我有另一个使用Rest API在Chronos中安排作业的应用程序。在高可用性模式下运行时,我的应用程序必须与哪个URL进行通信?
假设我的应用程序与http://server_node_1:4400
进行对话以安排作业,如果节点server_node_1
上的Chronos出现故障我无法安排作业。
我的应用程序需要与单个URL通信才能在Chronos中安排作业。即使某些Chronos节点出现故障,我也应该可以安排这项工作。我是否需要在我的应用程序和Chronos群集之间安装某种负载均衡器来选择运行的chronos节点进行作业调度?如何在我的场景中实现高可用性?
答案 0 :(得分:0)
使用HAProxy路由到Chronos实例。这样您就可以使用例如Chronos实例访问curl loadbalancer:8081
。
haproxy.cfg
:
listen chronos_8081
bind 0.0.0.0:8081
mode http
balance roundrobin
option allbackups
option http-no-delay
server chronos01 server_node_1:4400
server chronos02 server_node_2:4400
server chronos03 server_node_3:4400
甚至更好,通过Marathon启动Chronos,这将确保给定数量的实例。然后可以通过以下方式生成HAProxy配置: