2017-03-08 4 views
-1

私はこの厄介な問題を抱えています。問題は、私の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; 
} 

PHP情報: PHP Info

Memcached::OPT_REMOVE_FAILED_SERVERS => trueは、サーバーがダウンしている場合、それはサーバプールから削除されるべきであると言うことではないでしょうか?これを正しく理解していないのですか? PHPクライアントからデッドサーバーにpingを実行しようとすると、不明なホストエラーが発生します。 addServers()でプールに追加する前に、各サーバーの状態を確認する必要がありますか?

また、すべての書き込み要求には、getResultMessage()のSUCCESSがあります。

は本当にこの上でいくつかの入力を感謝し、

答えて

0

はGitHubの上でこの問題をチェックアウト:指定されたキーはどんな与えられたサーバーに保存されないことであることを意味し、一貫したhttps://github.com/php-memcached-dev/php-memcached/issues/154

どう分布。配布方法を再度設定することで、ドライバに再計算を依頼すると配布が変更され、ハッシュ関数と不稼動サーバーが使用されなくなります。

+0

返信いただきありがとうございます。私が理解すれば、新しい接続を開き、それぞれが取得した後に 'Memcached :: OPT_LIBKETAMA_COMPATIBLE'オプションを適用する必要がありますか? –

+0

が届くごとに表示されます。私は次のようなものを試してみます: if(!self :: $ memcached-> getServerList()) { //新しい接続を追加します self :: $ memcached-> addServers(self :: getHosts()); }他 { //統計情報を取得し、ノードが が//私はこのソリューションをテストしていませんが、私は分布がするので、キャッシュはゼロからスタートすると思いアライブサーバに } を再接続に失敗したかどうかを確認変化する –

関連する問題