Использование кластера Yandex Managed Service for Valkey™ в качестве хранилища сессий PHP
Кластер Yandex Managed Service for Valkey™ можно использовать в качестве хранилища данных о сессиях PHP.
Чтобы настроить кластер Yandex Managed Service for Valkey™ в качестве хранилища сессий PHP:
- Настройте PHP для использования кластера Yandex Managed Service for Valkey™ в качестве хранилища сессий.
- Проверьте сохранение данных сессий PHP в кластере Yandex Managed Service for Valkey™.
Если созданные ресурсы вам больше не нужны, удалите их.
Перед началом работы
Подготовьте инфраструктуру
-
Если вы используете группы безопасности Virtual Private Cloud, настройте их. Добавьте разрешения для протокола TCP в группу безопасности:
- входящий трафик через порт
22
с любых IP-адресов для SSH; - исходящий и входящий трафик через порты
80
и443
на любые IP-адреса для HTTP/HTTPS; - исходящий и входящий трафик через порт
6379
на IP-адреса внутренней сети для Valkey™.
Подробнее см. Группы безопасности.
- входящий трафик через порт
-
Создайте виртуальную машину с LAMP/LEMP в Yandex Compute Cloud любой подходящей вам конфигурации.
При создании ВМ выберите группу безопасности, настроенную ранее. Чтобы проверить настройки безопасности, введите в адресной строке браузера публичный IP-адрес ВМ: должна отобразиться страница по умолчанию установленного веб-сервера.
-
Создайте кластер Yandex Managed Service for Valkey™ любой подходящей конфигурации. При создании кластера Yandex Managed Service for Valkey™ укажите те же сеть и группы безопасности, что и для ВМ с веб-сервером.
-
Если у вас еще нет Terraform, установите его.
-
Получите данные для аутентификации. Вы можете добавить их в переменные окружения или указать далее в файле с настройками провайдера.
-
Настройте и инициализируйте провайдер. Чтобы не создавать конфигурационный файл с настройками провайдера вручную, скачайте его
. -
Поместите конфигурационный файл в отдельную рабочую директорию и укажите значения параметров. Если данные для аутентификации не были добавлены в переменные окружения, укажите их в конфигурационном файле.
-
Скачайте в ту же рабочую директорию файл конфигурации для подходящего типа кластера:
- redis-cluster-non-sharded-and-vm-for-php.tf
— для нешардированного кластера. - redis-cluster-sharded-and-vm-for-php.tf
— для шардированного кластера.
В каждом файле описаны:
- сеть;
- подсеть;
- группа безопасности по умолчанию и правила, необходимые для подключения к кластеру и виртуальной машине из интернета;
- кластер Yandex Managed Service for Valkey™;
- виртуальная машина.
- redis-cluster-non-sharded-and-vm-for-php.tf
-
Укажите в файле конфигурации:
- Пароль для доступа к кластеру Yandex Managed Service for Valkey™.
- Идентификатор публичного образа LAMP/LEMP.
- Логин и путь к файлу открытого ключа, которые будут использоваться для доступа к виртуальной машине. По умолчанию в используемом образе указанный логин игнорируется, вместо него создается пользователь с логином
ubuntu
. Используйте его для подключения к виртуальной машине.
-
Проверьте корректность файлов конфигурации Terraform с помощью команды:
terraform validate
Если в файлах конфигурации есть ошибки, Terraform на них укажет.
-
Создайте необходимую инфраструктуру:
-
Выполните команду для просмотра планируемых изменений:
terraform plan
Если конфигурации ресурсов описаны верно, в терминале отобразится список изменяемых ресурсов и их параметров. Это проверочный этап: ресурсы не будут изменены.
-
Если вас устраивают планируемые изменения, внесите их:
-
Выполните команду:
terraform apply
-
Подтвердите изменение ресурсов.
-
Дождитесь завершения операции.
-
В указанном каталоге будут созданы все требуемые ресурсы. Проверить появление ресурсов и их настройки можно в консоли управления
. -
Выполните дополнительные настройки
-
Подключитесь к ВМ с веб-сервером по SSH и настройте его:
-
Установите сертификаты:
sudo mkdir --parents /usr/local/share/ca-certificates/Yandex/ && \ sudo wget "https://storage.yandexcloud.net/cloud-certs/CA.pem" \ --output-document /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 для использования кластера Yandex Managed Service for Valkey™ в качестве хранилища сессий
-
Внесите изменения в конфигурационный файл
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.Нешардированный кластерШардированный кластер[PHP] ... extension = redis ... [Session] session.save_handler = redis session.save_path = "tcp://<FQDN_хоста-мастера_Valkey™>: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-t9h8gxqo********.mdb.yandexcloud.net:6379&seed[]=rc1b-7qxk0h3b********.mdb.yandexcloud.net:6379&seed[]=rc1c-spy1c1i4********.mdb.yandexcloud.net:6379&auth=password"
Подробнее про подключение к кластеру см. Подготовка к подключению.
-
Перезапустите веб-сервер:
sudo systemctl restart apache2
для Apache;sudo systemctl restart php7.2-fpm
для NGINX.
Проверьте сохранение данных сессий PHP в кластере Yandex Managed Service for Valkey™
-
Создайте в каталоге
/var/www/html/
файлindex.php
, который будет выводить степени числа2
:<?php session_start(); $count = isset($_SESSION['count']) ? $_SESSION['count'] : 1; echo $count; $_SESSION['count'] = $count * 2;
При каждом обновлении страницы выводимое значение будет увеличиваться. Значение переменной
$count
будет сохраняться в данных сессии. Для каждой сессии в Valkey™ будет создан уникальный ключ. -
Из ВМ подключитесь к кластеру Valkey™ с помощью
redis-cli
:redis-cli -c -h <FQDN_хоста-мастера> -a <пароль>
Введите команду для просмотра хранящихся в Valkey™ ключей:
KEYS *
(empty list or set)
Из результатов запроса видно, что сейчас в Valkey™ не хранится никаких данных.
-
Проверьте, сохраняются ли пользовательские сессии при подключении к веб-серверу:
- Введите в адресной строке браузера публичный IP-адрес ВМ с веб-сервером. При первом входе будет выведено число
1
. - Обновите страницу несколько раз: выводимое значение будет увеличиваться.
- Выполните вход на страницу из другого браузера — отсчет начнется с
1
. - Обновите страницу несколько раз: выводимое значение также будет увеличиваться.
Сохранение значения переменной
$count
между обновлениями страницы браузера говорит о корректной работе настроенного механизма хранения сессий PHP в кластере Yandex Managed Service for Valkey™. - Введите в адресной строке браузера публичный IP-адрес ВМ с веб-сервером. При первом входе будет выведено число
-
Повторите запрос на просмотр хранящихся в Valkey™ ключей:
KEYS *
1) "PHPREDIS_SESSION:keb02haicgi0ijeju3********" 2) "PHPREDIS_SESSION:c5r0mbe1v84pn2b5kj********"
Как видно из результатов запроса, для каждой сессии в Valkey™ создан свой ключ.
Удалите созданные ресурсы
Удалите ресурсы, которые вы больше не будете использовать, чтобы за них не списывалась плата:
- Удалите кластер Yandex Managed Service for Valkey™.
- Удалите виртуальную машину.
- Если вы зарезервировали публичные статические IP-адреса, освободите и удалите их.
-
В терминале перейдите в директорию с планом инфраструктуры.
Важно
Убедитесь, что в директории нет Terraform-манифестов с ресурсами, которые вы хотите сохранить. Terraform удаляет все ресурсы, которые были созданы с помощью манифестов в текущей директории.
-
Удалите ресурсы:
-
Выполните команду:
terraform destroy
-
Подтвердите удаление ресурсов и дождитесь завершения операции.
Все ресурсы, которые были описаны в Terraform-манифестах, будут удалены.
-