Я не смог найти решение проблемы, поэтому это мой вопрос.
Скажем, у меня есть 3 сервера, 2 из них вышестоящие, а 1 - балансировщик нагрузки .
Это мои основные конфигурации
Серверы восходящего направления
user www-data;
worker_processes auto;
pid /run/nginx.pid;
events {
worker_connections 768;
}
http {
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
gzip on;
gzip_disable "msie6";
include /etc/nginx/conf.d/*.conf;
include /etc/nginx/sites-enabled/*;
}
Балансировщик нагрузки
worker_processes auto;
worker_rlimit_nofile 100000;
error_log off;
events {
worker_connections 5000;
multi_accept on;
use epoll;
}
http {
upstream myapp1 {
server 138.197.122.195;
server 138.197.122.293;
}
server {
listen 80;
location / {
proxy_pass http://myapp1;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header Host $host;
}
}
}
Я хочу добиться, чтобы отправлять / перенаправлять пользователей запросы к вышестоящим серверам с использованием функции циклической балансировки нагрузки nginx. Затем восходящие потоки будут предоставлять контент непосредственно пользователям.
Роль балансировщика нагрузки здесь не в том, чтобы уменьшать нагрузку на восходящие потоки путем проксирования, а в равном распределении запросов к ним. Однако в этих конфигурациях все запросы и ответы будут проходить через балансировщик нагрузки, потребляя его пропускную способность. Есть ли другой способ циклического перенаправления запросов с NGINX? Пожалуйста, помогите.
Я хочу это сделать, потому что у меня ограниченная полоса пропускания для приличного балансировщика нагрузки (высокая стоимость), поэтому я не могу эффективно масштабироваться. Например, скажем, 3 сервера имеют пропускную способность 100 Мбит / с каждый, если один пользователь потребляет 1 Мбит / с, балансировщик нагрузки будет узким местом, если есть 101 пользователь. Если я могу распределить трафик поровну между обоими восходящими потоками, теоретически система может обслуживать до 200 пользователей.
В большинстве похожих тем я нашел ppl с использованием метода циклического перебора DNS. Я тестировал его, но он ненадежен из-за кэширования записей в самой иерархии DNS, а также из-за кэширования и повторного использования адресов на стороне клиента.
Вы немного ошибаетесь. Round Robin - это метод балансировки нагрузки. Вы хотите достичь чего-то, что называется DNS Round Robin .
Но даже здесь, вы можете видеть по ссылке, ваш трафик будет проходить через ваш балансировщик нагрузки, потому что в этом весь смысл. Вы можете попробовать отключить балансировщик нагрузки и установить только два сервера, но тогда вы должны установить оба их IP-адреса для одного и того же доменного имени. Хотя это может достичь того, чего вы хотели, это не принесет вам никакой пользы, потому что есть шанс, что сеанс пользователя будет прерван и перехвачен другим сервером во время среднего доступа. И мы пока не говорили о репликации базы данных, что также является проблемой в этом случае.
Я рекомендую вложить немного больше в пропускную способность серверов балансировки нагрузки, и тогда у вас не будет никаких проблем. Более того, я бы использовал Сохранение сеанса
, чтобы ваши пользователи всегда оставались на сервере, к которому они присоединились.