Вопрос состоит из двух частей:
Как обрабатывать запросы, поступающие на разные серверы?
Это зависит от вашего балансировщика нагрузки / обратного прокси. Обычно клиенты привязываются к одному серверу, обычно по IP-адресу или прозрачному cookie, установленному прокси-сервером. Однако нет необходимости иметь клиентскую привязанность ради сеансов, если у вас есть распределенное хранилище сеансов, что приводит нас к memcache.
Как использовать memcache для хранения сессии на нескольких серверах?
memcache имеет правильную распределенную архитектуру без разделения ресурсов, поэтому большая часть интеллекта находится на стороне клиента. Итак, что вам нужно сделать, это пойти дальше и использовать хранилище сессии memcache, но вместо того, чтобы указывать на один сервер, укажите его на ALL из них. Это покрыто в документах . В вашем php.ini вы должны установить session.save_path для списка серверов memcached, например server1:11211, server2:11211
.
Имейте в виду, что в PHP доступны две отдельные клиентские библиотеки memcache, называемые memcache
и memcached
, и они имеют разный синтаксис для этого свойства.
Из-за того, как работает memcache, вам все равно, где хранятся данные вашего сеанса - он позаботится о вас.
Как указывает NathanD, memcache является энергозависимым и теряет данные при перезапуске, и если у вас есть несколько серверов, это будет означать, что некоторые (но не все) ваши пользователи выйдут из системы, если один из них будет перезапущен. Если один сервер полностью умрет , хранилище вашего сеанса будет работать . Пользователи, чьи данные сеанса находились на мертвом сервере, будут удалены, но они могут войти в систему и продолжить работу без присутствия этого сервера.