Мы запускаем php7 с nginx в aws ELB и обрабатываем сеансы в кластеризованном Redis AWS, но сеанс не сохраняется в кластере AWS redis. Иногда это работает, но в большинстве случаев не работает.
в php.ini изменились на session.save_handler = redis и session.save_path = "tcp: // конечная точка конфигурации redis: 6379"
любезно помогите в этом.
Ваш обработчик сохранения сеанса установлен на Redisне редискластер. Видеть: https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#session-handler
Вы должны убедиться, что rediscluster является зарегистрированным обработчиком сохранения для сеансов. Вы можете проверить это в phpinfo()
.
Вы также используете Redis стиль для вашего save_path, а не редискластер стиль. Для этого требуется только hostname: port в save_path, но также как минимум одно семя. Он должен выглядеть примерно так:
session.save_handler = rediscluster
session.save_path = seed[]=redis-config-endpoint:6379&option=value
Где option - это любая из опций, определенных в файле cluster.markdown (тайм-аут, read_timeout, постоянный, отказоустойчивый ... и, возможно, распространение).
Отказоустойчивость и распределение между главным и подчиненным узлами не так хорошо документированы (я планирую поднять проблему с Github), но если у вас есть только несколько шардов и отдельных узлов на каждом, я считаю, что это должно сработать (поскольку AWS не 'не требует, чтобы вы перечисляли конечную точку каждого узла, а только конечную точку конфигурации). На самом деле вам не нужно указывать какие-либо параметры.
Вы также захотите настроить время жизни сеанса сборки мусора и вероятность того, что это произойдет на заданном session_start()
вызовите, чтобы убедиться, что старые сеансы очищены.