Настроил сбалансированный web-сервер при помощи piranha.
Схема такая: есть два сервера, первый выступает в роли LVS-маршрутизатора и реального сервера одновременно, второй - только реальный сервер. Все сервера находяться в одной сети и соединены по методу "прямой маршрутизации" Все работает, балансируется...Но тут поднадобилось настроит - "Постоянство соединения" (чтобы клиент мог повторно подключаться к конкретному реальному серверу вместо перенаправления запросов алгоритмами распределения доступным серверам), за это отвечает опция "persistent" в которой нужно указать время (в секундах) в течении которого все запросы одного и того же клиента будут перенаправляться на одни и тот же реальный сервер - добавил... Но задать нужное мне время не получается, система не реагирует на то время которое я выставляю! по умолчанию выставляется врем около 5 мин!
serial_no = 1
primary = 192.168.0.11
service = lvs
backup = 0.0.0.0
heartbeat = 0
heartbeat_port = 539
keepalive = 6
deadtime = 18
network = direct
debug_level = NONE
virtual HTML {
active = 1
address = 192.168.0.10 eth0:1
vip_nmask = 255.255.255.0
port = 80
persistent = 10
send = "GET / HTTP/1.0\r\n\r\n"
expect = "HTTP"
load_monitor = none
scheduler = rr
protocol = tcp
timeout = 6
reentry = 15
quiesce_server = 1
server ROUTER {
address = 192.168.0.11
active = 1
weight = 1
}
server HOST {
address = 192.168.0.12
active = 1
weight = 1
}
}
Как быть? Что не так настроил?
а покажите настройки не из конфига, а из работающего lvs (ipvsadm -ln) ?
> а покажите настройки не из конфига, а из работающего lvs (ipvsadm -ln)
> ?Вот, пожалуйста:
IP Virtual Server version 1.2.1 (size =4096)
Prot LocalAddress: Port
> а покажите настройки не из конфига, а из работающего lvs (ipvsadm -ln)
> ?Вот, пожалуйста:
IP Virtual Server version 1.2.1 (size =4096)
Prot LocalAddress: Port Scheduler Flags
-> RemoteAddress: Port Forward Weight ActiveConn InActConn
TCP 192.168.0.10:80 rr persistent 10
-> 192.168.0.11:80 Local 1 0 20
-> 192.168.0.12:80 Route 1 0 9
похоже на то, что конфиг правильно сконверился в lvs сеттинги.
я не уверен насчет 10 сек, у меня были бОльшие времена и все работало корректно.
может ли это быть связано с аггрегацией по src network (persistence_granularity)?
> я не уверен насчет 10 сек, у меня были бОльшие времена и
> все работало корректно.Я пробовал время менять от [5с. ; 5мин.). --- не реагирует, а вот больше 5мин не ставил... надо попробовать).
> может ли это быть связано с аггрегацией по src network (persistence_granularity)?
Не совсем понимаю что это такое, где посмотреть и как проверить?
>> может ли это быть связано с аггрегацией по src network (persistence_granularity)?
> Не совсем понимаю что это такое, где посмотреть и как проверить?смысл persistence_granularity в "честности" балансинга - т.е. можно сказать что granularity == "255.255.255.255" (маска сети для аггрегации), а можно сказать "255.255.255.0". Тогда в первом случае каждый хост будет рассматриваться как отдельный сорс и будут разбрасываться по разным destinations, а во втором случае все хосты из отдной сети будут считаться "одним сорсом" и баланситься НЕ будут, а будут идти на один (какой-то) destination (пока конечно таймаут не истечет и их заново куда-то не определят).
>>> может ли это быть связано с аггрегацией по src network (persistence_granularity)?
>> Не совсем понимаю что это такое, где посмотреть и как проверить?
> смысл persistence_granularity в "честности" балансинга - т.е. можно сказать что granularity
> == "255.255.255.255" (маска сети для аггрегации), а можно сказать "255.255.255.0". Тогда
> в первом случае каждый хост будет рассматриваться как отдельный сорс и
> будут разбрасываться по разным destinations, а во втором случае все хосты
> из отдной сети будут считаться "одним сорсом" и баланситься НЕ будут,
> а будут идти на один (какой-то) destination (пока конечно таймаут
> не истечет и их заново куда-то не определят).маска выставлена как 255.255.255.255... попробовал вообще не задавать ее... все равно не так как нужно работает...((
Подскажите как можно посмотреть в реальном времени как происходит балансировка, т.е. сколько запросов и на какой из серверов переправлено? это же можно на LVS-маршрутизаторе посмотреть как-нибудь?
> Как быть? Что не так настроил?Это давний баг piranha - можно поискать в инете (и почему-то RedHat не хочет его исправлять).
Обойти его можно выполнением команды
ipvsadm --set $SET_TIMEOUT
послу запуска pulseПопытаюсь угадать: Вы используете RedHat/CentOS ? (потому, что piranha)
Если да, то я делал так, чтобы автоматизировать запуск ipvsadm --set при [ре]старте pulse:
дальше пара diff'ов--- /etc/rc.d/init.d/pulse.orig 2009-04-06 16:49:13.000000000 +0400
+++ /etc/rc.d/init.d/pulse 2009-04-06 16:48:48.000000000 +0400
@@ -43,7 +43,10 @@
daemon pulse $OPTIONS
RETVAL=$?
echo
- [ $RETVAL -eq 0 ] && touch /var/lock/subsys/pulse
+ [ $RETVAL -eq 0 ] && {
+ touch /var/lock/subsys/pulse
+ [ -n "$SET_TIMEOUT" ] && ipvsadm --set $SET_TIMEOUT
+ }
;;stop)
--- /etc/sysconfig/pulse.orig 2009-04-06 16:48:24.000000000 +0400
+++ /etc/sysconfig/pulse 2009-04-06 16:47:39.000000000 +0400
@@ -3,3 +3,5 @@
# pulse binary at startup, set OPTIONS here.
#
#OPTIONS=
+
+SET_TIMEOUT="3600 0 0"
Не использую piranha пару лет. Когда использовал, Ваша проблема была не единственная:
Есть проблема с переконфигурированием: нужен рестарт pulse - все соединения обрываются
Есть проблема с поднятием нескольких IP-адресов на одном интерфейсе - в 90% случаев поднимаются не все - приходится проверять вручную
Есть проблема с backup'ом соединений на второй lvs-сервер - точнее backup отсутствует вовсе - приходится лепить костыль
Ну еще по мелочи, чего уже и не вспомню.Посмотрите в сторону keepalived - возможно его функционал Вас устроит.
>[оверквотинг удален]
> +
> +SET_TIMEOUT="3600 0 0"
> Не использую piranha пару лет. Когда использовал, Ваша проблема была не единственная:
> Есть проблема с переконфигурированием: нужен рестарт pulse - все соединения обрываются
> Есть проблема с поднятием нескольких IP-адресов на одном интерфейсе - в 90%
> случаев поднимаются не все - приходится проверять вручную
> Есть проблема с backup'ом соединений на второй lvs-сервер - точнее backup отсутствует
> вовсе - приходится лепить костыль
> Ну еще по мелочи, чего уже и не вспомню.
> Посмотрите в сторону keepalived - возможно его функционал Вас устроит.Огромное Вам спасибо за помощь!!!