Балансировка нагрузки 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 экземпляров на каждом сервере или добавлял большое количество серверов в апстрим.

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

1 ответ

Решение

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

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

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

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

Так что вы бы использовать

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

и добавьте IP-адреса в DNS, когда это необходимо.

Другие вопросы по тегам