私はこの厄介な問題を抱えています。問題は、私のPHP Memcachedクライアントがデッドサーバーへの書き込みを試み続けていることです。私は$ memcached-> getstatsを(と、サーバの統計情報をチェックするとき)には、このようなものになります。PHP Memcachedはデッドサーバへの書き込みを続ける
{
"server1:11211": {
"pid" : 15,
"uptime" : 600
...
},
"server2:11211": {
"pid" : -1,
"uptime" : 0
...
},
}
私の理解から、SERVER2が死んでいることを示し、?しかし、クラスタにデータを書き込もうとすると、このデッド・サーバに鍵の半分を書き込もうとします。両方のサーバーが生存しているときにうまく動作しますが、そのうちの1つを終了すると、キーの配布方法に影響しないように見えます。
マイMemcachedのインスタンスは、次のようになります。
protected static function getMemcached()
{
if(!self::$memcached)
{
self::$memcached = new Memcached();
self::$memcached->setOptions(array(
Memcached::OPT_CONNECT_TIMEOUT => 100,
Memcached::OPT_LIBKETAMA_COMPATIBLE => true,
Memcached::OPT_REMOVE_FAILED_SERVERS => true,
Memcached::OPT_SERVER_FAILURE_LIMIT => 2,
Memcached::OPT_RETRY_TIMEOUT => 1
));
// Prevent adding a server to the connection pool each request
if (!self::$memcached->getServerList())
{
// Add new connection
self::$memcached->addServers(self::getHosts());
}
}
return self::$memcached;
}
がMemcached::OPT_REMOVE_FAILED_SERVERS => true
は、サーバーがダウンしている場合、それはサーバプールから削除されるべきであると言うことではないでしょうか?これを正しく理解していないのですか? PHPクライアントからデッドサーバーにpingを実行しようとすると、不明なホストエラーが発生します。 addServers()
でプールに追加する前に、各サーバーの状態を確認する必要がありますか?
また、すべての書き込み要求には、getResultMessage()
のSUCCESSがあります。
は本当にこの上でいくつかの入力を感謝し、
返信いただきありがとうございます。私が理解すれば、新しい接続を開き、それぞれが取得した後に 'Memcached :: OPT_LIBKETAMA_COMPATIBLE'オプションを適用する必要がありますか? –
が届くごとに表示されます。私は次のようなものを試してみます: if(!self :: $ memcached-> getServerList()) { //新しい接続を追加します self :: $ memcached-> addServers(self :: getHosts()); }他 { //統計情報を取得し、ノードが が//私はこのソリューションをテストしていませんが、私は分布がするので、キャッシュはゼロからスタートすると思いアライブサーバに } を再接続に失敗したかどうかを確認変化する –