Используя "липкие (персистентные) сессии" обычно не рекомендуется. Если Вы делаете это, Вы теряете много преимуществ выравнивания нагрузки. Загрузка не будет сбалансирована, и Вы потеряете высокую доступность, поскольку определенные клиенты будут не мочь получить доступ к Вашему приложению в случае отказа.
Вы хотите, чтобы Ваша сессия была динамичной. С Java это обычно хранится в памяти и кластеризируется ко всем серверам через многоадресную передачу. Чаще всего сессия будет сохранена в базе данных.
Если Ваше веб-приложение требует липких сессий, Вашей архитектуре, возможно, понадобятся улучшения.
До решений для подсистемы балансировки нагрузки существуют многие там, и предмет был покрыт экстенсивно здесь. Мне нравится LVS. Другие как nginx. Foundry Networks, которая была приобретена Brocade, делает некоторые твердые коммерческие продукты. Они - основное коммерческое решение для аппаратных подсистем балансировки нагрузки. У барракуды также есть "устройство" Linux/OSS-based, которое может использоваться для Выравнивания нагрузки.
Возможно, это не самое элегантное решение, но не могли бы вы остановить поддержку активности в сценариях notify_backup
и notify_fault
на главном сервере? Таким образом, вам придется перезапустить его, чтобы снова получить контроль.
Что-то вроде этого:
notify_backup "/etc/init.d/keepalived stop"
notify_fault "/etc/init.d/keepalived stop"
У меня была такая же проблема, как и у вас. Решил эту проблему, установив nopreempt на обоих серверах поддержки активности, а также (что очень важно согласно http://article.gmane.org/gmane.linux.keepalived.devel/1537 ) установка обоих серверов в состояние РЕЗЕРВНОЕ КОПИРОВАНИЕ (с разными приоритетами).
Отлично работает! : -)