Php
PHP memcached 會話冗餘
我正在嘗試遵循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:11211
,SELinux
處於Permissive
模式。我能夠看到儲存在一個
memcached
伺服器中的一些塊,但在另一個伺服器中看不到。我究竟做錯了什麼?
我寫的那篇 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
必須等於no。由於PHP 中的錯誤,伺服器數量 + 1。所以在你的情況下,它必須是:
memcache.session_redundancy=3