我们在 aws ELB 中运行带有 nginx 的 php7,并在 AWS 集群 redis 中处理会话,但会话并未存储在 AWS redis 集群中。有时它可以工作,但大多数时候不工作。
在 php.ini 中已更改为 session.save_handler = redis 和 session.save_path = "tcp://redis 配置端点:6379"
请帮忙。
答案1
您的会话保存处理程序设置为redis, 不是重新聚类。 看:https://github.com/phpredis/phpredis/blob/develop/cluster.markdown#session-handler
您需要确保 rediscluster 是会话的注册保存处理程序。您可以在 中检查phpinfo()
。
您还使用redis您的 save_path 的样式,而不是重新聚类样式。这只需要 save_path 中的 hostname:port,但至少需要一个种子。它应该看起来类似于:
session.save_handler = rediscluster
session.save_path = seed[]=redis-config-endpoint:6379&option=value
其中 option 是 cluster.markdown 文件中定义的任何选项(timeout、read_timeout、persistent、failover……以及可能的 deliver)。
主节点和从节点之间的故障转移和分配似乎没有得到很好的记录(我打算提出一个 Github 问题),但如果你只有几个分片和每个分片上的单个节点,我相信这应该可以工作(因为 AWS 不要求你列出每个节点的端点,而只是配置端点)。你实际上不需要指定任何选项。
您还需要调整会话垃圾收集寿命以及它在给定session_start()
调用中发生的概率,以确保清理旧会话。