Балансировка нагрузки 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, когда это необходимо.