Yandex Cloud
  • Сервисы
  • Решения
  • Почему Yandex Cloud
  • Сообщество
  • Тарифы
  • Документация
  • Связаться с нами
Подключиться
Language / Region
© 2022 ООО «Яндекс.Облако»
Yandex Managed Service for Redis
  • Начало работы
  • Пошаговые инструкции
    • Все инструкции
    • Информация об имеющихся кластерах
    • Создание кластера
    • Изменение настроек кластера и базы данных
    • Подключение к базе данных
      • Подготовка к подключению
      • Подключение к нешардированному кластеру
      • Подключение к шардированному кластеру
    • Остановка и запуск кластера
    • Обновление версии Redis
    • Управление хостами кластера
    • Управление шардами
    • Управление резервными копиями
    • Переключение мастера
    • Мониторинг состояния кластера и хостов
    • Удаление кластера
  • Практические руководства
    • Хранение сессий PHP в Managed Service for Redis
    • Миграция базы данных в Managed Service for Redis
  • Концепции
    • Взаимосвязь ресурсов сервиса
    • Классы хостов
    • Сеть в Managed Service for Redis
    • Шардирование
    • Резервные копии
    • Репликация и отказоустойчивость
    • Поддерживаемые клиенты
    • Управление памятью в Managed Service for Redis
    • Доступные команды Managed Service for Redis
    • Квоты и лимиты
    • Типы хранилища
    • Техническое обслуживание
    • Настройки Redis
  • Управление доступом
  • Правила тарификации
    • Действующие правила
    • Архив
      • До 1 февраля 2020 года
  • Справочник API
    • Аутентификация в API
    • gRPC (англ.)
      • Overview
      • BackupService
      • ClusterService
      • ResourcePresetService
      • OperationService
    • REST (англ.)
      • Overview
      • Backup
        • Overview
        • get
        • list
      • Cluster
        • Overview
        • addHosts
        • addShard
        • backup
        • create
        • delete
        • deleteHosts
        • deleteShard
        • get
        • getShard
        • list
        • listBackups
        • listHosts
        • listLogs
        • listOperations
        • listShards
        • move
        • rebalance
        • rescheduleMaintenance
        • restore
        • start
        • startFailover
        • stop
        • streamLogs
        • update
        • updateHosts
      • ResourcePreset
        • Overview
        • get
        • list
      • Operation
        • Overview
        • get
  • История изменений
  • Вопросы и ответы
    • Общие вопросы
  1. Практические руководства
  2. Хранение сессий PHP в Managed Service for Redis

Использование кластера Managed Service for Redis в качестве хранилища сессий PHP

Статья создана
Yandex.Cloud
  • Перед началом работы
    • Подготовьте инфраструктуру
    • Выполните дополнительные настройки
  • Настройте PHP для использования кластера Managed Service for Redis в качестве хранилища сессий
  • Проверьте сохранение данных сессий PHP в кластере Managed Service for Redis
  • Удалите созданные ресурсы

Кластер Managed Service for Redis можно использовать в качестве хранилища данных о сессиях PHP.

Чтобы настроить кластер Managed Service for Redis в качестве хранилища сессий PHP:

  1. Настройте PHP для использования кластера Managed Service for Redis в качестве хранилища сессий.
  2. Проверьте сохранение данных сессий PHP в кластере Managed Service for Redis.

Если созданные ресурсы вам больше не нужны, удалите их.

Перед началом работы

Подготовьте инфраструктуру

Вручную
С помощью Terraform
  1. Настройте группу безопасности Virtual Private Cloud. Добавьте разрешения для протокола TCP в группу безопасности:

    • входящий трафик через порт 22 с любых IP-адресов для SSH;
    • исходящий и входящий трафик через порты 80 и 443 на любые IP-адреса для HTTP/HTTPS;
    • исходящий и входящий трафик через порт 6379 на IP-адреса внутренней сети для Redis.

    Подробнее см. Группы безопасности.

  2. Создайте виртуальную машину с LAMP/LEMP в Yandex Compute Cloud любой подходящей вам конфигурации.

    При создании ВМ выберите группу безопасности, настроенную ранее. Чтобы проверить настройки безопасности, введите в адресной строке браузера публичный IP-адрес ВМ: должна отобразиться страница по умолчанию установленного веб-сервера.

  3. Создайте кластер Managed Service for Redis любой подходящей конфигурации. При создании кластера Managed Service for Redis укажите те же сеть и группы безопасности, что и для ВМ с веб-сервером.

  1. Если у вас еще нет Terraform, установите его.

  2. Скачайте файл с настройками провайдера. Поместите его в отдельную рабочую директорию и укажите значения параметров.

  3. Скачайте в ту же рабочую директорию файл конфигурации для подходящего типа кластера:

    • redis-cluster-non-sharded-and-vm.tf — для нешардированного кластера.
    • redis-cluster-sharded-and-vm.tf — для шардированного кластера.

    В каждом файле описаны:

    • сеть;
    • подсеть;
    • группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине из интернета;
    • кластер Managed Service for Redis;
    • виртуальная машина.
  4. Укажите в файле конфигурации:

    • Пароль для доступа к кластеру Managed Service for Redis.
    • Идентификатор публичного образа LAMP/LEMP. Например, fd832gltdaeepe0m2hi8 для LAMP.
    • Логин и путь к файлу открытого ключа, которые будут использоваться для доступа к виртуальной машине. По умолчанию в используемом образе указанный логин игнорируется, вместо него создается пользователь с логином ubuntu. Используйте его для подключения к виртуальной машине.
  5. Выполните команду terraform init в директории с конфигурационным файлом. Эта команда инициализирует провайдеров, указанных в конфигурационных файлах, и позволяет работать с ресурсами и источниками данных провайдера.

  6. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  7. Создайте необходимую инфраструктуру:

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления.

Выполните дополнительные настройки

  1. Подключитесь к ВМ с веб-сервером по SSH и настройте его:

    • Установите сертификаты:

      sudo mkdir -p /usr/local/share/ca-certificates/Yandex && \
      sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" -O /usr/local/share/ca-certificates/Yandex/YandexInternalRootCA.crt
      
    • Подготовьте окружение и установите библиотеку phpredis с помощью pecl:

      sudo apt update && \
      sudo apt install php-dev pkg-php-tools redis-tools --yes && \
      sudo pecl channel-update pecl.php.net && \
      sudo pecl install redis
      
    • Станьте владельцем каталога /var/www/html/ и удалите из него все содержимое:

      sudo chown <имя пользователя> /var/www/html/ --recursive && \
      rm /var/www/html/*
      

Настройте PHP для использования кластера Managed Service for Redis в качестве хранилища сессий

  1. Внесите изменения в конфигурационный файл php.ini для вашего веб-сервера.

    Обычно файл php.ini располагается в каталоге:

    • /etc/php/7.2/apache2/ для Apache;
    • /etc/php/7.2/fpm/ для NGINX.

    Уточнить расположение php.ini можно с помощью команды sudo find /etc/ -name php.ini.

    Примечание

    Не нужно вносить изменения в php.ini для PHP CLI.

    Кластер Redis без шардирования
    Кластер Redis с шардированием
    [PHP]
    ...
    extension = redis
    ...
    [Session]
    session.save_handler = redis
    session.save_path = "tcp://<FQDN хоста-мастера Redis>:6379?auth=<пароль>"
    
    [PHP]
    ...
    extension = redis
    ...
    [Session]
    session.save_handler = rediscluster
    session.save_path = "seed[]=<FQDN1>:6379&seed[]=<FQDN2>:6379&seed[]=<FQDN3>:6379&auth=<пароль>"
    

    Здесь <FQDN1>, <FQDN2> и <FQDN3> — полные доменные имена хостов-мастеров кластера. Например, для кластера из 3-х шардов с паролем password значение параметра session.save_path будет выглядеть так:

    session.save_path = "seed[]=rc1a-t9h8gxqor5v6lcc3.mdb.yandexcloud.net:6379&seed[]=rc1b-7qxk0h3b8pupxsj9.mdb.yandexcloud.net:6379&seed[]=rc1c-spy1c1i4vwvj0n8z.mdb.yandexcloud.net:6379&auth=password"
    

    Подробнее про подключение к кластеру см. Подготовка к подключению.

  2. Перезапустите веб-сервер:

    • sudo systemctl restart apache2 для Apache;
    • sudo systemctl restart php7.2-fpm для NGINX.

Проверьте сохранение данных сессий PHP в кластере Managed Service for Redis

  1. Создайте в каталоге /var/www/html/ файл index.php, который будет выводить степени числа 2:

    <?php
    session_start();
    
    $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1;
    
    echo $count;
    
    $_SESSION['count'] = $count * 2;
    

    При каждом обновлении страницы выводимое значение будет увеличиваться. Значение переменной $count будет сохраняться в данных сессии. Для каждой сессии в Redis будет создан уникальный ключ.

  2. Из ВМ подключитесь к кластеру Redis с помощью redis-cli:

    redis-cli -c -h <FQDN хоста-мастера> -a <пароль>
    

    Введите команду для просмотра хранящихся в Redis ключей:

    KEYS *
    
    (empty list or set)
    

    Из результатов запроса видно, что сейчас в Redis не хранится никаких данных.

  3. Проверьте, сохраняются ли пользовательские сессии при подключении к веб-серверу:

    1. Введите в адресной строке браузера публичный IP-адрес ВМ с веб-сервером. При первом входе будет выведено число 1.
    2. Обновите страницу несколько раз: выводимое значение будет увеличиваться.
    3. Выполните вход на страницу из другого браузера — отсчет начнется с 1.
    4. Обновите страницу несколько раз: выводимое значение также будет увеличиваться.

    Сохранение значения переменной $count между обновлениями страницы браузера говорит о корректной работе настроенного механизма хранения сессий PHP в кластере Managed Service for Redis.

  4. Повторите запрос на просмотр хранящихся в Redis ключей:

    KEYS *
    
    1) "PHPREDIS_SESSION:keb02haicgi0ijeju3ngqqnucq"
    2) "PHPREDIS_SESSION:c5r0mbe1v84pn2b5kj1umun1sp"
    

    Как видно из результатов запроса, для каждой сессии в Redis создан свой ключ.

Удалите созданные ресурсы

Вручную
С помощью Terraform

Если созданные ресурсы вам больше не нужны, удалите их:

  • Удалите кластер Yandex Managed Service for Redis.
  • Удалите виртуальную машину.
  • Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их.

Чтобы удалить инфраструктуру, созданную с помощью Terraform:

  1. В терминале перейдите в директорию с планом инфраструктуры.

  2. Удалите конфигурационный файл (redis-cluster-non-sharded-and-vm.tf или redis-cluster-sharded-and-vm.tf).

  3. Проверьте корректность файлов конфигурации Terraform с помощью команды:

    terraform validate
    

    Если в файлах конфигурации есть ошибки, Terraform на них укажет.

  4. Подтвердите изменение ресурсов.

    1. Выполните команду для просмотра планируемых изменений:

      terraform plan
      

      Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.

    2. Если вас устраивают планируемые изменения, внесите их:

      1. Выполните команду:

        terraform apply
        
      2. Подтвердите изменение ресурсов.

      3. Дождитесь завершения операции.

    Все ресурсы, которые были описаны в конфигурационном файле, будут удалены.

Была ли статья полезна?

Language / Region
© 2022 ООО «Яндекс.Облако»
В этой статье:
  • Перед началом работы
  • Подготовьте инфраструктуру
  • Выполните дополнительные настройки
  • Настройте PHP для использования кластера Managed Service for Redis в качестве хранилища сессий
  • Проверьте сохранение данных сессий PHP в кластере Managed Service for Redis
  • Удалите созданные ресурсы