Программно добавлять узлы в балансировщик нагрузки, например, Haproxy?

Я очень уверен, что эта проблема решена, но я не могу найти никакой информации об этом...

Как системные администраторы программно добавляют новый node к существующему и запущенному балансировщику нагрузки? Скажем, у меня работает балансировка нагрузки, и я уже балансирую, скажу, что мой сервер API между двумя экземплярами EC2, и внезапно возникает трафик трафика, и мне нужен третий node в балансировщике нагрузки, но я сплю... Было бы замечательно если бы у меня было что-то, контролирующее, возможно, использование ОЗУ и некоторые ключевые показатели эффективности, которые говорят мне, когда я должен иметь еще один node, и даже лучше, если бы он мог добавить новый node только в балансировку нагрузки...

Я уверен, что это возможно и даже тривиально делать с node-http-proxy и distribute, но я хотел бы знать, можно ли это делать с HAproxy и/или Nginx... Я знаю, что балансировка эластичной нагрузки Amazon - это, наверное, моя лучшая ставка, но я хочу сделайте это самостоятельно (я хочу, чтобы экземпляры из rackspace, EC2, Joyent и, возможно, другие были удобны).

И снова, создавая node, легко, я хотел бы знать, как добавить его в haproxy.cfg или что-то подобное с Nginx, не перезагружая весь прокси и делая это программно. Bash скрипт - мой лучший выбор для этого, но он все равно должен перезагрузить весь прокси-сервер, который плохой, потому что он теряет связи...

Ответ 1

У вас есть несколько вопросов. Для "добавления узлов в haproxy без перезапуска":

То, что я делаю для подобной проблемы, - это предварительный файл конфигурации с именами серверов. web01, web02... web20, даже если у меня только 5 веб-серверов в то время. Затем в файле моих хостов я сопоставляю их с фактическими ips веб-серверов.

Чтобы добавить новый сервер, вы просто создаете запись для него в файле hosts, и он начнет передачу проверок работоспособности и добавит.

Для автоматической оркестровки это действительно зависит от вашей среды, и вам, вероятно, придется написать что-то обычное, которое соответствует вашим потребностям. Платные решения (Scalr приходит на ум) для обработки оркестровки тоже.

Ответ 2

Что я делаю: у меня есть строка в моем разделе в haproxy.cfg, в котором говорится:

# new webservers here

И с sed script я обновляю haproxy.cfg с чем-то вроде:

  sed -i -e "/new webservers here/a\    server $ip_address $ip_address:12080 check maxconn 28 weight 100"

А затем перезагрузите haproxy. Работает прозрачно.