我正在尝试设置 memcached 以允许在 2 个负载平衡的 Apache 服务器上共享 session - 在我的 php.ini 中我有:
节点1
session.save_handler = memcached
session.save_path = "tcp://NODE1_IP:11211"
和
节点2
session.save_handler = memcached
session.save_path = "tcp://NODE2_IP:11211"
在/etc/sysconfig/memcached 中,我有:
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 127.0.0.1"
在 phpinfo 中我有:
session.save_handler memcached memcached
session.save_path tcp://NODE1_IP:11211 tcp://NODE1_IP:11211
当我登录到我的应用程序时,我在登录页面和检查用户是否登录的页面上有 session_start ,但是当我:
print_r($_SESSION);
没有显示任何内容,因为 session 看起来没有被设置。
值得注意的是,在 phpinfo 中,我在 session 部分的顶部看到这些行:
Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary wddx
注册的保存处理程序列出了文件和用户,但没有列出有关 memcached 的内容 - 这可能是这不起作用的原因吗?我该如何更改/添加它?
node1_ip 应该是公共(public) IP 还是私有(private) IP 还是无关紧要?
我可以 telnet 到 localhost 11211,但不能到 NODE1_IP 11211 - 连接被拒绝。端口 11211 已打开 - 尝试将/etc/sysconfig/memcached 更改为“-l NODE1_IP:11211”,但仍然连接被拒绝
如果我将/etc/sysconfig/memcached 中的选项更改为空,即 OPTIONS ""那么我可以远程登录到 NODE1_IP 11211,那么我放入 memcached 配置的格式似乎是错误的?
还有什么需要我做的吗?我尝试过更改保存路径、添加和删除 tcp、使用 127.0.0.1、使用实际 IP 地址、使用所有用逗号分隔的 IP 地址,但仍然无法使其工作。
最佳答案
如果你有:
session.save_handler = memcached
这意味着您正在使用 memcacheD 扩展,而不是 memcache 扩展。
在这种情况下,配置应该不编写 tcp:// 协议(protocol):
session.save_path NODE1_IP:11211
session.save_path=tcp://NODE1_IP:11211 用于 memcache 扩展,末尾不带“d”。
关于PHP session 无法与 memcached 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42694782/