2012-02-15 5 views
11

Я очень уверен, что эта проблема решена, но я не могу найти никакой информации об этом ...Программно добавить узлы в балансировщик нагрузки, например, Haproxy?

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

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

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

ответ

8

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

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

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

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

+0

Это очень хорошая идея! Благодаря! –

+0

Вы пробовали это раньше? Я попытался сделать это на HAProxy 1.8 и явно изменил поведение файлов HAProxies, модифицированное хостами, никоим образом. Я даже подтвердил, что сервер полностью доступен из HAProxy через это изменение в файл hosts. –

7

Что делать: У меня есть строка в моей серверной секции в haproxy.cfg, который говорит:

# new webservers here 

И с SED сценарий я обновить haproxy.cfg что-то вроде:

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

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

+1

Это рекомендуемый способ сделать это? Для меня это не кажется практичным. Хотя, это работает. – hugofcampos