Php

PHP memcached 會話冗餘

  • February 3, 2015

我正在嘗試遵循How To Share PHP Sessions on Multiple Memcached Servers文章並將其實施到我的環境中:

/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伺服器中的一些塊,但在另一個伺服器中看不到。

我究竟做錯了什麼?

我寫的那篇 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必須等於no。由於PHP 中的錯誤,伺服器數量 + 1

所以在你的情況下,它必須是:

memcache.session_redundancy=3

引用自:https://serverfault.com/questions/663453