автоматичне балансування навантаження nginx


29

Я використовую nginx і NginxHttpUpstreamModule для збалансування навантаження. Мій конфігурація дуже проста:

upstream lb {
    server 127.0.0.1:8081;
    server 127.0.0.1:8082;
}

server {
    listen  89;
    server_name localhost;

    location / {
            proxy_pass      http://lb;
            proxy_redirect  off;
            proxy_set_header        Host            $host;
            proxy_set_header        X-Real-IP       $remote_addr;
            proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}

Але за допомогою цього конфігурації, коли один із 2 серверних серверів не працює, nginx все ще спрямовує на нього запит, і це призводить до тайм-ауту половину часу :(

Чи є рішення зробити так, щоб nginx автоматично направляв запит на інший сервер, коли він виявляв сервер, який перебуває в роботі.

Дякую.

Відповіді:


33

Я думаю, що це тому, що nginx не виявляє, що висхідний потік знаходиться внизу, тому що він знаходиться на одній машині.

Ваші параметри: proxy_next_upstream та proxy_connect_timeout .

Спробуйте це:

location / {
        proxy_pass              http://lb;
        proxy_redirect          off;
        proxy_next_upstream     error timeout invalid_header http_500;
        proxy_connect_timeout   2;
        proxy_set_header        Host            $host;
        proxy_set_header        X-Real-IP       $remote_addr;
        proxy_set_header        X-Forwarded-For $proxy_add_x_forwarded_for;
}

У мене виникли проблеми з неповною установкою Apache / PHP (відсутні файли бібліотеки PEAR), які призвели до помилок http 500. proxy_next_upstream тільки що повторився на іншій машині - це все-таки повернулося в порядку.
Алістер Бульман,

5
Чому вимкнено proxy_redirect?
Сеун Осева

2

Гей, дивіться вікі: http://wiki.nginx.org/NginxHttpUpstreamModule#server

В основному, якщо виявлено збій, бекенд буде позначений як знижений протягом x секунд, і він спробує знову. Тому якщо ви продовжуєте бачити з'єднання, ймовірно, nginx продовжує перевіряти, чи не став доступний бекенд.

Однак слід спробувати наступний запис у висхідному блоці, тому ви насправді не повинні бачити, що жодних попередніх записів немає, якщо лише один знижений.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.