Chronos Cluster с высокой доступностью
У меня есть три сервера A,B,C на каждой машине, на которой я использую Chronos, ZooKeeper, mesos-master, mesos-slave.
Chronos связывается с mesos-master, используя URL ZooKeeper, поэтому он автоматически выбирает ведущего мастера, даже если какой-то узел не работает. У меня высокая доступность здесь.
Даже Chronos работают в кластерном режиме, поэтому при доступе к любому из Chronos я вижу один и тот же список заданий, и все работает отлично.
У меня проблема в том, что Chronos доступен с любого из трех URL
http://server_node_1:4400
http://server_node_2:4400
http://server_node_3:4400
У меня есть другое приложение, которое планирует задания в Chronos, используя Rest API. С каким URL-адресом должно взаимодействовать мое приложение для работы в режиме высокой доступности?
Допустим, мое приложение говорит с http://server_node_1:4400
для планирования работы, если Chronos на узле server_node_1
Я не могу запланировать работу.
Мое приложение должно общаться по одному URL, чтобы планировать работу в Chronos. Даже если какой-то узел Chronos не работает, я смогу запланировать работу. Нужно ли иметь какой-то балансировщик нагрузки между моим приложением и кластером Chronos, чтобы выбрать работающий узел chronos для планирования заданий? Как я могу достичь высокой доступности в моем сценарии?
1 ответ
Используйте 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
Или, что еще лучше, запустите Chronos через Marathon, который обеспечит заданное количество экземпляров. Тогда конфигурация HAProxy может быть сгенерирована: