2012-02-15 43 views
11

Jestem pewien, że ten problem został rozwiązany, ale nie mogę znaleźć nigdzie o nim informacji ...Programowo dodać węzły do ​​modułu równoważenia obciążenia, takiego jak Haproxy?

W jaki sposób sysadmins programowo dodaje nowy węzeł do istniejącego i działającego systemu równoważenia obciążenia? Powiedzmy, że mam moduł równoważenia obciążenia i już balansuję, powiedzmy mój serwer API między dwiema instancjami EC2, i nagle pojawia się skok ruchu i potrzebuję trzeciego węzła w równoważni obciążenia, ale śpię ... Byłoby wspaniale, gdyby czy coś monitorowało prawdopodobnie użycie pamięci RAM i niektóre kluczowe wskaźniki wydajności, które mówią mi, kiedy powinienem mieć inny węzeł, a jeszcze lepiej, gdyby mógł dodać nowy węzeł do samego loadballa ...

Jestem przekonany, że to jest możliwe, a nawet trywialne z node-http-proxy i distribute, ale chciałbym wiedzieć, czy jest to możliwe z HAproxy i/lub Nginx ... Wiem, że elastyczne równoważenie obciążenia Amazon jest prawdopodobnie moim najlepszym wyborem, ale chcę to zrobić na własną rękę (chcę odradzać instancje z rackspace, EC2, Joyent i prawdopodobnie innych, ponieważ jest to wygodne).

Po raz kolejny, odradzanie węzła jest łatwe, chciałbym wiedzieć, jak dodać go do haproxy.cfg lub coś podobnego z Nginx bez konieczności przeładowywania całego proxy i robienia tego programowo. Skrypty Bash najlepiej mi na to pozwalają, ale wciąż trzeba przeładować cały serwer proxy, co jest złe, ponieważ traci połączenia ...

Odpowiedz

8

Masz tam kilka pytań. Aby "dodać węzły do ​​haproxy bez ponownego uruchamiania":

Co zrobić dla podobnego problemu, to wstępnie wypełnić plik konfiguracyjny z nazwami serwerów .. np. web01, web02 ... web20, nawet jeśli mam tylko 5 serwerów w tym czasie. Następnie w moim pliku hosts zamieniam je w rzeczywiste adresy IP serwerów.

Aby dodać nowy serwer, po prostu utwórz dla niego wpis w pliku hosts i zacznie on podawać sprawdzenia poprawności i będzie dodawany.

W przypadku zautomatyzowanej orkiestracji, to naprawdę zależy od środowiska i prawdopodobnie będziesz musiał napisać coś niestandardowego, który pasuje do twoich potrzeb. Istnieją płatne rozwiązania (Scalr przychodzi na myśl) do obsługi orkiestracji.

+0

To bardzo dobry pomysł! Dzięki! –

7

Co mam zrobić: Mam linię w mojej sekcji backend w haproxy.cfg który mówi:

# new webservers here 

iz sed skryptu zaktualizować haproxy.cfg z czymś takim:

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

A następnie ponownie załaduj haproxy. Działa przezroczysto.

+1

Jest to zalecany sposób, aby to zrobić? Nie wydaje mi się to praktyczne. Chociaż działa. – hugofcampos

Powiązane problemy