borisdenis
@borisdenis
Ленив и вреден...

Отказоустойчивость с помощью nginx, в моей ситуации как поступить?

Есть два веб сервера, между ними настроена синхронизация баз данных и т.п. и они всегда идентичны. На третьем сервере стоит nginx и через proxy_pass получает трафик с одного из серверов и отдает миру. Хотим настроить такую схему - если вдруг падает первый сервер то nginx автоматически начинает отдавать трафик со второго сервера. Почитал про upstream, что-то похожее, но не нравится что оно балансирует нагрузку, а не переключает на второй сервер при недоступности первого (и обратно), мне балансировка в данном случае не нужна. Подскажите правильное направление или решение.
P.S. Дочитал что сервер можно указать как backup и после этого он будет использоваться если недоступны остальные, но так и не понял можно ли указать один основной и один backup, примерно так
upstream test_upstream {
    server    server1.server.com;
    server    server2.server.com backup;
}
  • Вопрос задан
  • 684 просмотра
Пригласить эксперта
Ответы на вопрос 2
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Haproxy для балансировки и health check, ну или с HashiCorp Consul поиграться. А вот базу вы таки вынесите на отдельный сервера если если возможность. Не надо так
Ответ написан
paran0id
@paran0id
Умный, но ленивый
В принципе так можно сделать, работать будет. Если не нравится, что nginx балансирует нагрузку (почему не нравится?), можно сделать один бэкапом или распределить нагрузку с помощью весов (weight).

Но лучше сделать так:
- два фронтэнд-сервера
- virtual ip (corosync, keepalived), мигрирующий с одного на другой в случае сбоя
- на virtual ip слушает haproxy, распределяющий нагрузку между фронтами
- nginx на фронтах распределяет нагрузку между бэкэндами
- бэкэнд-серверов два или больше, работают оба одновременно, можно масштабировать, дообавляя сервера
- база по возможности отделена, также разнесена на два или больше серверов, с репликацией
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы