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

Баланс нагрузки Nginx с несколькими серверами и несколькими экземплярами приложений

Я использую nginx для балансировки нагрузки моего приложения торнадо. На server_A есть 3 экземпляра одного и того же приложения (прослушивают другой порт). Ниже моя конфигурация.

http {
    upstream myapp1 {
        server server_A_IP:8888;
        server server_A_IP:8887;
        server server_A_IP:8886;
    }

    server {
        listen 80;

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

Теперь у меня есть еще один server_B, и я запускаю 3 экземпляра на этом сервере, поэтому я добавляю 3 строки в свой восходящий поток конфигурации.

   upstream myapp1 {
    server server_A_IP:8888;
    server server_A_IP:8887;
    server server_A_IP:8886;

    server server_B_IP:8888;
    server server_B_IP:8887;
    server server_B_IP:8886;
}

Это было бы некрасиво, если бы я запустил 10 экземпляров на каждом сервере или добавил большое количество серверов в восходящий поток.

Есть ли правильный способ к этому? Каков рекомендуемый способ балансировки нагрузки на несколько серверов? Спасибо!

Правильным способом было бы использовать специализированный инструмент для балансировки.

Другой способ, довольно простой, - иметь доменное имя, указывающее на несколько IP-адресов, и использовать это доменное имя в server директива.

http://nginx.org/en/docs/http/ngx_http_upstream_module.html#server

Доменное имя, которое разрешается в несколько IP-адресов, определяет сразу несколько серверов.

Итак, вы бы использовали

upstream myapp1 {
    server upstream.example.net:8886;
    server upstream.example.net:8887;
    server upstream.example.net:8888;
}

и при необходимости добавьте IP-адреса в DNS.