同僚!
memcachedサーバーを処理するためにmemcache(2.2.6)クライアントライブラリ(http://pecl.php.net/package/memcache)でphp 5.3(5.3.8)を実行しています。私の目標は、セッションエンジン用のフェイルオーバーソリューションを用意することです。
- ネイティブphpセッションのみがサポートされます(カスタムハンドラーはサポートされません)
- プール内のmemcachedサーバーはほとんどありません
私が期待しているのは、memcachedサーバーの1つがダウンした場合、phpはプール内の2番目のサーバーを利用しようとします[正常に接続して幸せになります]が、プール内の最初のmemcachedサーバーがダウンしたときに受信します次のエラー:
Session start failed. Original message: session_start(): Server 10.0.10.111 (tcp 11211) failed with: Connection refused (111)
関連するphp設定は次のとおりです。
session.save_handler memcache
session.save_path tcp://10.0.10.111:11211?persistent=1&weight=1&timeout=1&retry_interval=10, tcp://10.0.10.110:11211?persistent=1&weight=1&timeout=1&retry_interval=10
およびmemcacheの設定(標準に近いと思いますが)は次のとおりです。
Directive Local Value
memcache.allow_failover 1
memcache.chunk_size 8192
memcache.default_port 11211
memcache.default_timeout_ms 1000
memcache.hash_function crc32
memcache.hash_strategy standard
memcache.max_failover_attempts 20
Memcachedは引き続き2番目のサーバーで実行されており、WEBサーバーから完全にアクセスできます。
telnet 10.0.10.110 11211
Trying 10.0.10.110...
Connected to 10.0.10.110 (10.0.10.110).
Escape character is '^]'.
get aaa
END
quit
Connection closed by foreign host.
つまり、リストされているすべてのサーバーに順番にクエリを実行する代わりに、キュー内の最初のサーバーへの接続に失敗するとクラッシュします。最後に、3.0.xクライアントライブラリのリリースが利用可能であることに気付きましたが、まだベータ版であるため、信頼性が高すぎるようには見えません。
標準のPHP、クライアントライブラリ、サーバーで目的の動作を実現するにはどうすればよいかアドバイスしてください。
どうもありがとう!
最高、ユージーン