Мы сталкиваемся с неожиданным поведением при циклической балансировке нагрузки на Apache, когда один из серверов Tomcat выходит из строя.
Наша установка: у нас есть 2 веб-сервера Apache на переднем конце, использующие модуль mod_jk для балансировки нагрузки с циклическим распределением нагрузки. Мы включили липкость сеанса. Нагрузка сбалансирована между 4 серверами Tomcat, на которых работают приложения.
Иногда при большой нагрузке, если на нашем уровне базы данных наблюдается медленная работа, в конечном итоге один из серверов Tomcat переходит в зависшее состояние и требует перезапуска. В тот момент, когда мы отклоняем сервер Tomcat, мы видим всплеск запросов на одном из других серверов Tomcat, который затем также переходит в состояние зависания и требует перезапуска.
В конце концов, все серверы Tomcat зависают аналогичным образом.
Почему Apache передает всю нагрузку на один сервер, а не распределяет нагрузку?
Сейчас мы пробуем worker.balancer.method=B
чтобы узнать, поможет ли это решить нашу проблему.
На изображениях ниже мы видим, что потоки услуг увеличиваются,
(Отправка ответа вместо комментария, поскольку он может быть слишком длинным):
Я не говорю, что «F5 может решить проблему в лучше путь "но:
Я не думаю, что легко найти «нейтральный» публичный бенчмаркинг / тестирование лучшего оборудования / программного обеспечения для балансировки нагрузки. Могу только посоветовать делать свое, если у вас есть запасной f5 для шахмат.
Как правило, я бы заставил f5 делать столько, сколько они могут: балансировка нагрузки, ssl-сертификаты, переопределение URL-адресов, asm ... Не потому, что f5 лучше, а потому, что удобно иметь все в одном месте. К сожалению, когда http-трафик начинает расти более чем на несколько сотен МБ, вам приходится выполнять некоторую работу с помощью apache вместо f5.