Кластеризация PHP сессий

Высокая доступность Вашего PHP приложения может быть достигнута путем задействования кластеризации PHP сессий в облаке. Чтобы обеспечить стабильность работы в случае отказа сервера приложений, мы создадим окружение с Memcached нодой, несколькими Apache серверами, и балансировщиком нагрузки NGINX.

    1. Войдите в Jelastic Manager
    2. Нажмите кнопку Создать окружение
    3. В диалоговом окне Топология окружения выберите два или больше серверов, которые Вы хотите использовать (например, два сервера Apache) и Memcached ноду. Введите имя окружения и нажмите кнопку Создать.

    Нода Memcached используется как инструмент распределения кэша между несколькими нодами в окружении. В нашем случае, она обеспечивает работу Веб-сессии с липкими сессиями, запущенными на нескольких серверах приложений. При падении одного сервера сессии сохраняются на Memcached ноде для бекапа. Остальные сервера могут "подобрать" эти сессии с Memcached ноды и продолжить работать с ними.

Как это работает?

Когда все запросы сессии обработаны, она отправляется на Memcached ноду для бекапа. Эта сессия остается доступной на первоначальном сервере приложений и может быть использована для обработки следующего запроса. После второй обработки запроса сессия обновляется в Memcached хранилище.

Если первоначальный сервер падает, следующий запрос направляется на другой сервер приложения. Новый сервер получает запрос сессии, о которой не знает, но которую можно найти на Memcached ноде. Такая сессия распознается благодаря идентификатору, который был добавлен в sessionID во время её создания. Как результат, сервер может "подобрать" сессию с хранилища Memcached. 

Когда сервер отвечает на запрос, он также обновляет сессию на Memcached ноде. Таким образом, работа приложения не останавливается из-за отказа первоначального сервера. 

Одновременно с этим, балансировщик нагрузки NGINX распределяет трафик внутри кластера, содержащего HTTP ресурсы. Вы можете проверить балансироку нагрузки в облаке Jelastic, используя различные инструменты для нагрузочных тестов. 

Настройка

  1. Перейдите к Вашему окржуению на панели управления и нажмите кнопку Конфигурация для сервера Apache.

  2. В открывшейся вкладке перейдите в папку conf и откройте файл php.ini.

  3. Добавьте следующую строку в Dynamic Extensions:
  4. extension=memcached.so


  5. Внесите изменения в блок [Session]:
  6. session.save_handler = memcached

    session.save_path = "< server >:11211"


    Примечание: Вместо < server > нужно ввести memcached IP или URL, который Вы можете найти, нажав на кнопку Информация рядом с memcached нодой в Вашем окружении.

  7. Сохраните изменения и перезапустите Apache.

Это всё! Теперь, если один из серверов откажет, пользователь будет автоматически направлен на другой сервер этого кластера и не заметит никаких изменений.