2017-03-09 41 views
0

我试图建立分布式缓存,允许在2负载平衡的Apache服务器会话共享的工作 - 在我的php.ini我:PHP会话不memcached的

节点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 /分布式缓存,我有:

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 Support enabled 
Registered save handlers files user 
Registered serializer handlers php_serialize php php_binary wddx 

登记保存处理程序列出了有关memcached的文件和用户,但没有 - 也许这可以解释为什么这是不工作?我怎样才能改变/添加到?

如若node1_ip是公共或私有IP或者没有关系呢?

我可以telnet到本地主机11211而不是NODE1_IP 11211 - 获得连接拒绝。端口11211已打开 - 尝试将/ etc/sysconfig/memcached更改为“-l NODE1_IP:11211”但仍然连接被拒绝

如果我将/ etc/sysconfig/memcached中的选项更改为“可以telnet到NODE1_IP 11211,这样看来我放入memcached config的格式是错误的?

还有什么我需要做的吗?我尝试使用实际IP地址更改保存路径,添加和删除tcp,使用127.0.0.1,使用以逗号分隔的所有IP地址,但仍无法使其工作。

+0

如何在NODE1_IP和NODE2_IP上同步memcached? –

+0

已尝试在两个节点以及/ etc/sysconfig/memcached中的OPTIONS中设置session.save_path =“tcp:// NODE1_IP:11211,tcp:// NODE2_IP:11211”,但这似乎没有任何区别 – bhttoan

+0

@bhttoan我有一个真正的噩梦让memcached在我的负载均衡器后面工作,最终转而使用redis。我有一个简单的时间,因为我的应用程序是用Laravel构建的。出于兴趣,你是否在使用框架? – Spholt

回答

0

假设你正在使用负载均衡粘性会话,而不能来自同一个客户担保的请求是由同一个Apache服务。

OPTIONS="-l 127.0.0.1"告诉memcached来监听本地回环只,也就是说,它是无法访问的,从任何地方,但本地主机。您需要更改该设置以便在专用网络接口上进行收听(确保它不能从互联网上公开访问)。

为了保持会话都可用的Apache服务器上,你需要同步的memcached。最简单的方法是通过指向save_path两个服务器复制所有数据,并设置session_redundancy以3:

session.save_path = "tcp://NODE1_IP:11211, tcp://NODE2_IP:11211" 
memcache.allow_failover=1 
memcache.session_redundancy=3 

这样的会议将被保存到两个memcached的服务器。

如果您不想牺牲冗余内存,只保留1个memcached运行,并指向两个Apache服务器。

编辑:

php_memcache库的安装,例如Debian的发行版:

PHP 5.x的:apt-get install php5-memcache

PHP 7.x版:apt-get install php-memcache

+0

感谢您的答案 - 尝试所有这些都无济于事。仍然不会在我登录时创建会话。在php.ini和/ etc/sysconfig/memcached中,我将IP设置为专用网络地址,是正确的还是应该将save_path设置为公共IP地址? – bhttoan

+0

也在phpinfo中,我在“Sessions”下有“注册的保存处理程序\t文件用户” - 是否需要任何其他选项来使用memcache? – bhttoan

+0

是的,如果安装了php_memcache,则注册的保存处理程序应该是“files user memcache” –

0

如果您有:

session.save_handler = memcached 

这意味着你正在使用的memcache d延伸和不是memcache之一。

而在这种情况下,配置应写入而不TCP://协议:

session.save_path NODE1_IP:11211 

的session.save_path = TCP:// NODE1_IP:11211是为memcache扩展名,最后没有“d”。