我正在尝试跟随如何在多个 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
服务器中的一些块,但看不到存储在另一台服务器中的一些块。
我究竟做错了什么?
答案1
我撰写的那篇 DigitalOcean 文章中有memcache.session_redundancy
,您的配置文件使用了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 个服务器都有完全相同的顺序。
编辑#2
的值memcache.session_redundancy
必须等于服务器数量 + 1由于一个PHP 中的错误。
因此,就你的情况而言,必须是:
memcache.session_redundancy=3
答案2
仅有的:
memcache.allow_failover=1
memcache.redundancy=2
应该在 memcache.ini 中。
其余的应该在 php.ini 中。