Я использую 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.