Назад | Перейти на главную страницу

Балансировка нагрузки обратного прокси-сервера Ubuntu Pound на основе активной нагрузки на сервер?

У меня установлен Pound на балансировщике нагрузки. Кажется, он работает нормально, за исключением того, что он случайным образом назначает внутренний сервер для пересылки запроса. Я поместил 1 серверную машину под такую ​​большую нагрузку, что она перешла на использование подкачки, и я даже не могу использовать ssh для проверки этого сценария. Я хотел бы, чтобы балансировщик нагрузки осознал, что машина перегружена, и отправил ее на другую внутреннюю машину. Однако это не так. Я прочитал справочную страницу, и похоже, что директива «DynScale 1» - это то, что контролирует это, но она по-прежнему перенаправляет на перегруженный сервер. Я также добавил "HAport 22" к подсчету бэкэнда, так как я не могу подключиться по ssh, также как и loadbalancer, и он будет считать бэкэнд-сервер мертвым, пока он не избавится от нагрузки и не ответит, но это не помогло либо.

Если бы кто-нибудь мог помочь с этим, я был бы признателен. Моя текущая конфигурация ниже.

######################################################################
## global options:

User            "www-data"
Group           "www-data"
#RootJail       "/chroot/pound"

## Logging: (goes to syslog by default)
##      0       no logging
##      1       normal
##      2       extended
##      3       Apache-style (common log format)
LogLevel        3

## check backend every X secs:
Alive           5
DynScale        1

Client          1200
TimeOut         1500

# poundctl control socket
Control "/var/run/pound/poundctl.socket"


######################################################################
## listen, redirect and ... to:

## redirect all requests on port 80 to SSL
ListenHTTP
     Address 192.168.1.XX
     Port    80
     Service
          Redirect "https://xxx.com/"
     End
End

ListenHTTPS
     Address 192.168.1.XX
     Port    443
     Cert    "/files/www.xxx.com.pem"
     Service
           BackEnd
                  Address 192.168.1.1
                  Port 80
        HAport 22
           End
           BackEnd
                  Address 192.168.1.2
                  Port 80
        HAport 22
           End
     End
End

Если вы отправляете нагрузочный трафик на одну из внутренних машин «напрямую» (то есть без прохождения через Pound), он не сможет обнаружить нагрузку.

Pound просто попробует порт 80 серверной части (который фактически будет отвечать на первоначальное подтверждение TCP, SYN / ACK и т. Д., Но не более того) и будет ждать до указанного вами тайм-аута.

Попробуйте отправить нагрузочный трафик через Pound и поэкспериментируйте с приоритетами серверной части и DynScale. Pound использует количество открытых текущих подключений к серверным модулям для расчета балансировки нагрузки.

Кроме того, проверьте команду «poundctl», чтобы просмотреть некоторую статистику по службам / бэкэндам.

Я слышал очень неоднозначные мнения об эффективности DynScale. Мы решили не использовать его. Вместо этого мы устанавливаем Priority val для каждого BackEnd раздел. На странице руководства:

Priority val

Приоритет этой серверной части (от 1 до 9, по умолчанию 5). Серверные компоненты с более высоким приоритетом будут использоваться чаще, чем серверы с более низким приоритетом, поэтому вам следует определить более высокие приоритеты для более мощных серверов.

Твой новый ListenHTTPS раздел должен выглядеть примерно так:

ListenHTTPS
     Address 192.168.1.XX
     Port    443
     Cert    "/files/www.xxx.com.pem"
     Service
           BackEnd
                  Address 192.168.1.1
                  Port 80
                  Priority 7
           End
           BackEnd
                  Address 192.168.1.2
                  Port 80
                  Priority 3
           End
     End
End

Попробуйте разные значения для Priority на каждой BackEnd пока вы не будете довольны тем, как он распределяет нагрузку.

Вы должны выключить DynScale играя с Priority, в противном случае Pound попытается изменить значения для вас на основе реального использования.

Кроме того, вам, вероятно, следует установить Alive на что-то более высокое, например, на 30 секунд. Если ваши серверы погребены под большей нагрузкой, чем они могут выдержать, вам не нужно, чтобы Паунд пинал их каждые 5 секунд, чтобы проверить, снова ли они работают.

Наконец, я согласен с @Andrew. Ваш Timeout значение должно быть намного ниже. Выберите что-нибудь скромное, например, 300 (5 минут).

В соответствии с вашим timeout настройка Pound ждет ответа от серверной части 25 минут. Во время тестов установите его на что-нибудь меньшее, скажем, 15 секунд по умолчанию.