2015-10-28 2 views
1

У меня есть два сервера A и B. В большинстве случаев оба сервера не работают одновременно.балансировка нагрузки nginx - сохранить последний рабочий сервер

Итак, когда A работает, скорее всего, B не работает. Когда B работает, скорее всего, A не работает. Этот переход между A и B может произойти через несколько недель.

Так что я хотел бы, чтобы nginx перенаправлял на работающий сервер и держал, используя этот сервер, пока он не опустится.

Я попытался это решение:

upstream backend { 
    server SERVER_A; 
    server SERVER_B; 
    } 
    server {...} 

Это работает, но я вижу в журналах, что он периодически пытается соединиться с «вниз» сервер.

Тогда я попробовал, что:

upstream backend { 
    server SERVER_A; 
    server SERVER_B backup; 
    } 
    server {...} 

Это работает правильно, если SERVER_A вверх. Но если это SERVER_B, то он часто пытается получить доступ к SERVER_A. Фактически, в этом случае правильной конфигурацией будет «сервер SERVER_A backup;» но я не думаю, что мы можем сделать динамическую реконфигурацию ;-)

На самом деле, не очень важно, что nginx периодически пытается получить доступ к серверу вниз, но если я могу избежать этого, используя правильную конфигурацию, было бы лучше.

Я знаю об этом аргументе fail-timeout. Но я не думаю, что это действительно решит мою проблему, и это может даже добавить время простоя во время переключения.

Заранее спасибо.

+0

* Этот переключатель между A и B может произойти через несколько недель. * Это поведение контролируется? Есть ли какая-либо процедура, которую вы можете подключить, чтобы пометить другой сервер? – Anatoly

+0

Да, это контролируется с помощью сценария bash. Если я смогу как-нибудь сообщить nginx об переключателе, это может быть даже лучше. –

ответ

1

В соответствии с контролируемым механизмом для сервера переключение крюка, чтобы отметить отдельный сервер вниз требуется только:

sed -i 's/server SERVER_A;/server SERVER_A down;/' /etc/nginx/nginx.conf 
nginx -s reload 

Нагрузка конфигурации стандартной процедуры, которая обрабатывает изящные перезагрузки и это безопасно: http://nginx.org/en/docs/beginners_guide.html#control

После того, как мастер-процесс получит сигнал для перезагрузки конфигурации, проверяет достоверность синтаксиса нового файла конфигурации и пытается использовать , чтобы применить предоставленную в нем конфигурацию. Если это успех, главный процесс запускает новые рабочие процессы и отправляет сообщения старым рабочим процессам с просьбой закрыть их. В противном случае мастер процесс откатывает изменения и продолжает работать со старой конфигурацией . Старые рабочие процессы, получающие команду на остановку, прекращают принимать новые соединения и продолжают обслуживать текущий запросов до тех пор, пока все такие запросы не будут обслуживаться. После этого старый рабочий процесс обрабатывает выход.

+0

Спасибо! Он работает хорошо. Я не думал об этой возможности делать горячую замену конфигурации.Чтобы быть полным, мы не должны забывать делать sed -i 's/server SERVER_B down;/server SERVER_B; /' /etc/nginx/nginx.conf, а также –

Смежные вопросы