编辑

编辑

我正在尝试跟随如何在多个 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:11211SELinux处于Permissive模式。

我能够看到存储在一台memcached服务器中的一些块,但看不到存储在另一台服务器中的一些块。

我究竟做错了什么?

答案1

我撰写的那篇 DigitalOcean 文章中有memcache.session_redundancy,您的配置文件使用了memcache.redundancy,两者不同,这可能是它不能按预期工作的原因。

默认值memcache.redundancy1,它对于此设置来说工作正常。

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 中。

相关内容