我正在运行一个网站,其中有 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 仍在尝试读取故障转移节点。为什么会这样?任何可能的解决方案?
| 归档时间: |
|
| 查看次数: |
2235 次 |
| 最近记录: |