Распределение нагрузки php-сессии на массив memcache

До недавнего времени наша установка состояла из 4 сеансов обмена веб-серверами с одним сервером, на котором запущен memcache. Мы размещаемся в облаке Amazon и терпим крах при пиковой нагрузке 2 дня подряд. Проблема заключалась в том, что произошел сбой службы memcache (нагрузка на наш сайт неуклонно росла).

Итак, мы приняли следующие меры:

1) Добавлены еще 2 сервера для хранения сессий

2) Установите следующие переменные в php ini-файле на всех веб-серверах.

session.save_handler = memcache

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

memcache.hash_strategy = consistent

memcache.allow_failover = 1

Вещи работают в порядке сейчас. Чтобы обеспечить доступность, мы попытались выполнить тестирование, случайно убив один из наших серверов сеансов, и сайт продолжает работать (некоторые пользователи вышли из системы, что на данный момент приемлемо для бизнеса).

Но есть одна большая проблема. Я ожидал, что нагрузка на серверы memcache будет более или менее равномерно распределена. Но это не так!

Если я посмотрю на "Max Network Out (Bytes)" в CloudWatch, то я вижу, что нагрузка примерно в соотношении 10:5:1. Другими словами, с точки зрения пропускной способности сети In и Out, первый сервер загружается в 10 раз чаще, чем третий. И второй сервер загружен в 5 раз больше, чем третий.

Есть идеи?

1 ответ

Изменение порядка адресов memcache для session.save_path параметры могут изменить коэффициент распределения сеансов по серверам memcache. Например на 1-м веб-сервере:

session.save_path = tcp://ip1.port, tcp://ip2.port, tcp://ip3:port

на 2-м веб-сервере:

session.save_path = tcp://ip2.port, tcp://ip3.port, tcp://ip1:port

на 3-м веб-сервере:

session.save_path = tcp://ip3.port, tcp://ip1.port, tcp://ip2:port

на 4-м веб-сервере:

session.save_path = tcp://ip1.port, tcp://ip3.port, tcp://ip2:port
Другие вопросы по тегам