【发布时间】:2017-07-30 09:43:16
【问题描述】:
我正在尝试设置 memcached 以允许在 2 个负载平衡的 Apache 服务器上进行会话共享 - 在我的 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);
没有显示任何内容,因为会话看起来没有设置。
值得注意的是,在 phpinfo 中,我在 session 部分的顶部看到了这些行:
Session Support enabled
Registered save handlers files user
Registered serializer handlers php_serialize php php_binary wddx
已注册的保存处理程序列出了文件和用户,但没有关于 memcached - 这可能是它不起作用的原因吗?我该如何更改/添加它?
node1_ip 应该是公网 IP 还是私有 IP 还是无所谓?
我可以远程登录到 localhost 11211 但不能登录到 NODE1_IP 11211 - 连接被拒绝。端口 11211 已打开 - 尝试将 /etc/sysconfig/memcached 更改为“-l NODE1_IP:11211”,但仍然拒绝连接
如果我将 /etc/sysconfig/memcached 中的选项更改为空,即 OPTIONS "" 那么我可以 telnet 到 NODE1_IP 11211,所以看起来我放入 memcached 配置的格式是错误的?
我还有什么需要做的吗?我尝试更改保存路径,添加和删除 tcp,使用 127.0.0.1,使用实际 IP 地址,使用以逗号分隔的所有 IP 地址,但仍然无法正常工作。
【问题讨论】:
-
如何在 NODE1_IP 和 NODE2_IP 上同步 memcached?
-
已尝试在两个节点以及 /etc/sysconfig/memcached 中的 OPTIONS 中设置 session.save_path = "tcp://NODE1_IP:11211, tcp://NODE2_IP:11211" 但这没有似乎没有任何区别
-
@bhttoan 我做了一个真正的噩梦,让 memcached 在我的负载均衡器后面工作,最终切换到 redis。我玩得很轻松,因为我的应用程序是用 Laravel 构建的。出于兴趣,您是否在使用框架?
-
尝试将两台服务器指向同一个 memcached 实例以确认处理程序正常工作。向会话中写入一些内容,然后检查
stats items是否返回密钥。 -
iirc
save_path应该是host:port。尝试不带 tcp 的session.save_path = "NODE1_IP:11211"。