web-dev-qa-db-ja.com

PHP memcachedセッションの冗長性

共有する方法PHP複数のMemcachedサーバーでのセッション の記事に従って、それを自分の環境に実装しようとしています:

_/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_に到達でき、SELinuxPermissiveモードです。

一部のチャンクが1つのmemcachedサーバーに保存されているのを確認できますが、別のサーバーには保存できません。

私は何が間違っているのですか?

3
alexus

私が書いたその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'が必要です

その記事のステップ2を読んでください。3つのサーバーはすべてまったく同じ順序です。

編集#2

memcache.session_redundancyの値はnoと等しくなければなりません。 PHPのバグ によるサーバーの+ 1

したがって、あなたのケースではそれはでなければなりません:

memcache.session_redundancy=3
4
A.Jesin