2016-02-24 72 views
0

我使用phpredis(在25.02.2016從https://github.com/phpredis/phpredis builded)與PHP 5.5.9。使用單個redis實例(版本3.0.7)(遠程和本地redis實例)成功測試該擴展。RedisClusterException與連接到redis集羣時不是本地的phpredis

這是連接到配置的redis集羣的代碼(沒有sentinel,只通過配置)。

$cluster = new \RedisCluster(NULL, 
     array("192.168.127.203:7000", "192.168.127.203:7001", "192.168.127.203:7002")); 
$cluster->setOption(RedisCluster::OPT_SLAVE_FAILOVER, RedisCluster::FAILOVER_ERROR); 
var_dump($cluster->_masters()); 
var_dump($cluster->get('foo1')); 

當我們在與redis實例相同的服務器上執行此代碼時,我們成功獲取所有主設備和foo1的值。但是,當我們在另一個網站服務器執行的代碼,我們得到以下的主人從羣集:

array (size=3) 
    0 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7005 
    1 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7000 
    2 => 
    array (size=2) 
     0 => string '127.0.0.1' (length=9) 
     1 => int 7001 

和所獲得的價值將無法與該消息的RedisClusterException「不能與集羣中的任何節點進行通信」 。

我不確定這是否是庫中的錯誤,或者如果我以錯誤的方式使用lib。代碼與文檔中的代碼相同。我認爲一個問題是,我們得到的主機與本地IP而不是遠程IP。

感謝您的幫助。

回答

2

終於找出問題所在。 它在客戶端庫文件中沒有任何內容,只是集羣配置中存在錯誤。

創造用於從文檔下面的代碼片段:

./redis-trib.rb create --replicas 1 127.0.0.1:7000 127.0.0.1:7001 \ 
127.0.0.1:7002 127.0.0.1:7003 127.0.0.1:7004 127.0.0.1:7005 
當然

正確命令是:

./redis-trib.rb create --replicas 1 192.168.127.203:7000 192.168.127.203:7001 \ 
192.168.127.203:7002 192.168.127.203:7003 192.168.127.203:7004 192.168.127.203:7005 

只是信息,如果有人有類似的問題。

+0

謝謝你,我正在使用Predis,但遭受同樣的問題! – dwjv