Обычно вы используете балансировщик нагрузки для балансировки трафика между серверами двух узлов.
Таким образом, у вас есть два довольно простых варианта.Во-первых, вместо использования классического балансировщика нагрузки Amazon (ELB), вы можете переключиться на ALB (Application Load Balancer).
Для настройки следуйте этим инструкциям Amazon .
Обратите особое внимание на последний раздел :
На вкладке «Слушатели» используйте стрелку, чтобы просмотреть правила для слушателя, а затем выберите «Добавить правило».,Укажите правило следующим образом:
В качестве имени целевой группы выберите вторую созданную целевую группу.
В качестве шаблона пути укажите точный шаблон, который будет использоваться для маршрутизации на основе пути (например,, / img / *).
Для получения дополнительной информации см. Правила прослушивателя.
Более дешевой альтернативой может быть накатывание собственного балансировщика нагрузки с использованием Nginx.Вы могли бы раскрутить экземпляр EC2 с настроенным Nginx AMI.
Тогда вы бы отредактировали свою конфигурацию Nginx, чтобы она выглядела примерно так:
# The Node.js application serving ABC
upstream node_abc {
server ip.address.node.instance1:3000;
}
# The Node.js application serving XYZ
upstream node_xyz {
server ip.address.node.instance2:3000;
}
# Accept connections from clients
server {
listen 80;
charset utf-8;
location /abc {
proxy_pass http://node_abc;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
location /xyz {
proxy_set_header X-Forwarded-Proto $scheme;
}
}
Хотя, даже лучше, и то, что ядумаю, что вы действительно хотите, использует nginx в качестве правильного обратного прокси-сервера балансировки нагрузки.Для этого вы должны запустить две копии одного и того же приложения node.js, где каждая из них может ответить на маршруты / abc или / xyz, и сервер страницы.Затем используйте конфигурацию, подобную этой:
#Proper Load Balanced Nginx setup
upstream node_server {
server ip.address.node.instance1:3000;
server ip.address.node.instance2:3000;
}
# Accept connections from clients
server {
listen 80;
charset utf-8;
location / {
proxy_pass http://node_server;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
Если вы выполните эту последнюю конфигурацию, вам не придется беспокоиться о перезаписи сложных URL на ваших страницах.
Вы получаете преимущество двух отдельных экземпляров узла на отдельных серверах.Поэтому, если один из экземпляров вашего узла выйдет из строя, тогда ваш балансировщик нагрузки будет использовать другой экземпляр узла.(Добавьте маршрут / _health в приложение nodejs, которое отвечает 200 OK)
Вы можете легко выполнить A / B-тестирование, и сине-зеленый развертывается, где вы обновляете только один экземпляр новым кодом, а затем обновляете другой..
Nginx можно настроить для различных стратегий балансировки нагрузки, по умолчанию используется циклический перебор.Вы также можете добавить sticky-сессии, если вам нужно отправлять пользователей в тот же экземпляр узла, когда они начинают сеанс.