Как сделать сервер балансировки нагрузки NGINX без проксирования запросов?

Я не смог найти решение проблемы, поэтому это мой вопрос.

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

1
задан 20 November 2017 в 13:37
1 ответ

Вы немного ошибаетесь. Round Robin - это метод балансировки нагрузки. Вы хотите достичь чего-то, что называется DNS Round Robin .

Но даже здесь, вы можете видеть по ссылке, ваш трафик будет проходить через ваш балансировщик нагрузки, потому что в этом весь смысл. Вы можете попробовать отключить балансировщик нагрузки и установить только два сервера, но тогда вы должны установить оба их IP-адреса для одного и того же доменного имени. Хотя это может достичь того, чего вы хотели, это не принесет вам никакой пользы, потому что есть шанс, что сеанс пользователя будет прерван и перехвачен другим сервером во время среднего доступа. И мы пока не говорили о репликации базы данных, что также является проблемой в этом случае.

Я рекомендую вложить немного больше в пропускную способность серверов балансировки нагрузки, и тогда у вас не будет никаких проблем. Более того, я бы использовал Сохранение сеанса , чтобы ваши пользователи всегда оставались на сервере, к которому они присоединились.

Nginx как балансировщик нагрузки

0
ответ дан 4 December 2019 в 04:26

Теги

Похожие вопросы