Как поделиться сессиями php на нескольких серверах, используя memcached одного домена

У меня три сервера для одного домена

Я использую nginx в качестве loadbalancer.

Я хочу поделиться сессиями php на этих серверах.

Мое приложение сильно зависит от сессии. хранение сессий в файлах — плохая идея. Я использую memcached для этого.

Как именно и эффективно я должен настроить memcached для чтения и записи сеансов и быстрого обмена между серверами.

или любое другое хорошее альтернативное предложение.

2

Решение

Как я читаю ваш вопрос, это выглядит как вы установили Memcache на каждом сервере (и поэтому вы спрашиваете об «обмене между серверами»?).

То, что я хотел бы сделать, это иметь сервер, на котором вы ТОЛЬКО Memcached на нем. Каждый веб-сервер будет подключаться к вашему экземпляру Memcache. При необходимости вы также можете иметь пул серверов Memcache, и Memcache позаботится о правильном распределении ваших данных и сеансов.

Во-первых, вы можете захотеть изменить способ обработки сеансов в PHP (для каждого сервера) для чтения данных сеанса в Memcache. Ваш php.ini файл понадобится так:

[Session]
; Handler used to store/retrieve data.
session.save_handler = memcache[d] ; memcache or memcached
session.save_path = "127.0.0.1:11211"

Смотри как Обработчики сессий Работа. Обратите внимание, что вы можете использовать Memcache или же Memcached расширение. Они не то же самое.

Вот документация для обоих расширений:

Если вы хотите получить более подробную информацию о том, как правильно выбрать memcache, я предлагаю вам проверить это:
https://serverfault.com/questions/63383/memcache-vs-memcached

Обратите внимание, что хранение сеансов в Memcache может быть проблематичным. Если Memcache остановлен (по какой-либо причине), вы потеряете все данные, которые у вас есть. Возможно, вы захотите сохранить свои сессии в базе данных, а также иметь их в Memcache для ускорения процесса.

Вы можете создать собственный обработчик сессий, чтобы убедиться, что он соответствует вашим потребностям. Вы можете прочитать больше о Класс SessionHandler.

Наконец, если вы открыты для предложения, я также хотел бы рассмотреть возможность использования Redis вместо Memcache, так как он предлагает больше функций и позволит вам перезагрузить данные при корректном завершении работы.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]