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 может быть сгенерирована:

Другие вопросы по тегам