Couchbase PHP SDK 给出一般网络错误

anu*_*sn7 5 php couchbase

我正在运行一个网站,其中有 2 个服务器用于网站代码(在 PHP 中)和 1 个服务器作为负载平衡器。所有 3 个都在运行 couchbase 实例,作为一个集群的一部分。

在此处输入图片说明

在 PHP 代码中,我使用 couchbase 桶如下:

$cluster = new \CouchbaseCluster('http://127.0.0.1:8091');
$greyloftWebbucket = $cluster->openBucket('some_bucket');
$query = \CouchbaseViewQuery::from('abcd', 'pqrs');
Run Code Online (Sandbox Code Playgroud)

当所有 couchbase 实例都在运行时,这种安排工作正常。当其中任何一个关闭并且我尝试访问存储桶时,我会随机收到以下错误:

[2015-07-17 13:46:08] production.ERROR: exception 'CouchbaseException' with message 'Generic network failure. Enable detailed error codes (via LCB_CNTL_DETAILED_ERRCODES, or via `detailed_errcodes` in the connection string) and/or enable logging to get more information' in [CouchbaseNative]/CouchbaseBucket.class.php:282
Stack trace:
#0 [CouchbaseNative]/CouchbaseBucket.class.php(282): _CouchbaseBucket->http_request(1, 1, '/_design/abcd...', NULL, 1)
#1 [CouchbaseNative]/CouchbaseBucket.class.php(341): CouchbaseBucket->_view(Object(_CouchbaseDefaultViewQuery))
#2 /var/www/greyloft-laravel/app/couchbasemodel.php(25): CouchbaseBucket->query(Object(_CouchbaseDefaultViewQuery))
#3 /var/www/greyloft-laravel/app/Http/Controllers/Listing.php(42): App\couchbasemodel::listings()
#4 [internal function]: App\Http\Controllers\Listing->index()
Run Code Online (Sandbox Code Playgroud)

也就是说,一次页面将正确加载并显示存储桶内容,然后一次将显示上述错误。我是否直接访问负载均衡器或任何服务器都没有关系。

此外,在 couchbase 集群中enabled复制设置为1自动故障转移。在所有 3 个服务器中,我都设置了LCB_LOGLEVEL=5

怎么了?Couchbase PHP SDK 还是其他问题?我将不胜感激。

更新:

根据mnunberg 的建议,我正在使用新的连接字符串

$cluster = new \CouchbaseCluster('http://127.0.0.1:8091?detailed_errcodes=1');
Run Code Online (Sandbox Code Playgroud)

有了这个,错误信息是现在。它仍然随机弹出(大约一半的时间):

CouchbaseException in CouchbaseBucket.class.php line 74: The remote host refused the connection. Is the service up?
Run Code Online (Sandbox Code Playgroud)

正在进行自动故障转移。在 Couchbase 控制台日志中:

Failed over 'ns_1@<ip_address>': ok
Node ('ns_1@<ip_address>') was automatically failovered.
Run Code Online (Sandbox Code Playgroud)

在我看来,SDK 仍在尝试读取故障转移节点。为什么会这样?任何可能的解决方案?