Управление кластерными сеансами AWS Redis не работает

Мы запускаем php7 с nginx в aws ELB и обрабатываем сеансы в кластеризованном Redis AWS, но сеанс не сохраняется в кластере AWS redis .. Иногда это работает, но в большинстве случаев не работает.

в php.ini были изменены на session.save_handler = redis и session.save_path = "tcp: // конечная точка конфигурации redis: 6379"

, пожалуйста, помогите в этом.

0
задан 28 August 2017 в 12:29
1 ответ

Для обработчика сохранения сеанса задано значение redis , а не rediscluster . См.: https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#session-handler

Вы должны убедиться, что rediscluster является зарегистрированным обработчиком сохранения для сеансов. Вы можете проверить это в phpinfo () .

Вы также используете стиль redis для своего save_path, а не стиль rediscluster . Для этого требуется только 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 () , чтобы убедиться, что старый сеансы очищены.

0
ответ дан 5 December 2019 в 07:28

Теги

Похожие вопросы