Назад | Перейти на главную страницу

отказоустойчивость nginx без балансировки нагрузки

У меня проблемы с настройкой nginx.

Я использую nignx в качестве обратного прокси. Я хочу отправить все свои запросы на свой первый сервер. Если первый сервер не работает, я хочу отправить запросы на второй сервер.

Короче говоря, как мне получить отказоустойчивое решение без балансировки нагрузки?

Вам нужна активная + пассивная установка. Вот пример фрагмента nginx conf, который поможет вам начать работу:

upstream backend {
    server 1.2.3.4:80 fail_timeout=5s max_fails=3;
    server 4.5.6.7:80 backup;
}

server {
    listen 80;
    server_name whatevs.com;

    location / {
        proxy_pass http://backend;
    }
}

Итак, «обычно» все запросы будут отправляться на хост 1.2.3.4. Если мы получим три ошибки в этом блоке, то 4.5.6.7 вступит в силу.

Расширяя ответ chrskly, вы можете настроить 3 флага / конфигурации.

  1. fail_timeout : Общее время до неудачных попыток, а также пометить сервер как DOWN для того же времени. Если 5 сек, то попробую max_fail попытки в течение 5 секунд, и если все еще не удалось, пометьте этот сервер как ВНИЗ на 5 секунд
  2. max_fail : Максимальное количество попыток
  3. proxy_connect_timeout : Время ожидания соединения.

В следующем примере GRPC, если главный сервер не может быть подключен в течение 7 секунд, переключитесь на резервный и отметьте главный сервер как неработающий на 6000 секунд:

upstream grpcservers {
    server 192.168.0.XX:9997 fail_timeout=6000s max_fails=1;  # After 1 fail in 6000s, Main server is marked unavailable for 6000s.
    server 192.168.0.XX:9999 backup;
        } 
location / {
            grpc_pass grpc://grpcservers;
            grpc_connect_timeout 7s;  # If conn cant be made in 7sec, switch to backup
        }

Балансировка нагрузки в nginx очень проста: мы просто настраиваем имена серверов в восходящей области, где мы пишем список серверов для балансировки нагрузки.
nginx поддерживает другой алгоритм балансировки нагрузки, по умолчанию это циклический алгоритм, но мы настраиваем его с другими ключами, такими как ip_hash ...

http{
 upstream servername{
    ip_hash//for sticky hash
    least_conn//FOR least connection 
    sever localhost:1001;
    sever localhost:1002;
    sever localhost:1003;
}