У меня установлен 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 секунд по умолчанию.