我正在尝试按照如何在多个Memcached服务器上共享PHP会话文章,并将其实施到我的环境中:
/etc/php.d/memcache.ini :
# grep -v ^\; /etc/php.d/memcache.ini extension=memcache.so memcache.allow_failover=1 memcache.session_redundancy=2 session.save_handler=memcache session.save_path='tcp://192.168.52.143:11211, tcp://192.168.52.142:11211' #
phpinfo(); :
# php -i | grep -E 'memcache.allow_failover|memcache.session_redundancy|session.save_handler|session.save_path' memcache.allow_failover => 1 => 1 memcache.session_redundancy => 2 => 2 session.save_handler => memcache => memcache session.save_path => tcp://192.168.52.142:11211, tcp://192.168.52.143:11211 => tcp://192.168.52.142:11211, tcp://192.168.52.143:11211 #
这两个系统都是RHEL6并运行php-5.3.3 :
# cat /etc/redhat-release Red Hat Enterprise Linux Server release 6.6 (Santiago) # rpm -q php php-pecl-memcache php-5.3.3-40.el6_6.x86_64 php-pecl-memcache-3.0.5-4.el6.x86_64 #
明智的TCP : .142能够达到.143:11211 ,而.143能够达到.142:11211 , SELinux处于Permissive模式。
我能够看到一些块存储在一个memcached服务器,但没有在另一个。
我究竟做错了什么?
我写的DigitalOcean文章有memcache.session_redundancy ,你的configuration文件使用了memcache.redundancy ,两者都不一样,这可能是它没有按预期工作的原因。
memcache.redundancy的默认值是1并且对于这个设置工作正常。
extension=memcache.so memcache.allow_failover=1 memcache.session_redundancy=2 session.save_handler=memcache session.save_path = 'tcp://192.168.52.143:11211,tcp://192.168.52.142:11211'
http://php.net/manual/en/memcache.ini.php
你的评论:
IP在另一台服务器上反向,但语法相同。
这是问题所在, session.save_path 必须在所有服务器上都是确切的 。
所以这两个服务器必须有'tcp://192.168.52.143:11211,tcp://192.168.52.142:11211'
阅读该文章的第二步 ,所有3台服务器的顺序完全相同。
memcache.session_redundancy的值必须等于no。 由于PHP中的错误 ,服务器+ 1 。
所以在你的情况下,它必须是:
memcache.session_redundancy=3
只要:
memcache.allow_failover=1 memcache.redundancy=2
应该在memcache.ini中。
其他人应该在php.ini。