CouchBase 复制负载平衡 - 如何降低失败时客户端复制尝试的频率



我是Couch的新手,继承了一个中型项目,该项目在大约70部客户端Android手机上使用CouchBase Mobile(Developer Preview V2.0)(所有HTC Desire S),然后与主CouchDB服务器同步。

不幸的是,构建系统的人已经不在这里了,所以我正在寻求社区的帮助。

我的观察:

  • 客户端电话似乎处于几乎恒定的状态,即调用复制,然后失败,然后重新调用复制,失败等。除了无法从服务器中提取新数据外,它还消耗了过多的电池电量。
  • 服务器明显过载。Erlang 和 Couch 占用了大量的 CPU 和内存。
  • 当服务器负担较轻时,复制似乎工作正常。例如,重新启动 CouchDB 服务后,复制工作正常一段时间。

我的假设:

  • 对我来说,这闻起来像一个负载平衡问题。随着服务器繁忙,越来越多的客户端的复制失败,然后这些客户端只会更频繁地请求复制,从而使问题变得更糟。

我如何尝试修复它:

  • 在客户端上的 CouchBase "default.ini"文件中,我编辑了以下内容,试图限制客户端调用复制的频率。

    • max_replication_retry_count = 1
    • http_connections = 5
    • connection_timeout = 60000

尽管如此,我仍然可以看到CouchBase在LogCat中耕耘,不断尝试但未能复制。

谁能建议我如何开始调试它,以便更有效地隔离问题?为我指出正确的方向?...非常感谢。


以下是来自 LogCat
09-28 12:48:48.593 的复制错误: I/CouchDB(4468): [info] [<0.8140.0>] 复制"0284a8a927077abfd2b86a2616e07fed"正在使用:09-28 12:48:48.593: I/CouchDB(4468):4 个工作进程
09-28 12:48:48.593: I/CouchDB(4468):工作器批处理大小为 500 09-28 12:48:48.593:I/CouchDB(4468):5 个 HTTP 连接 09-28 12:48:48.593:
I/CouchDB(4468):连接
超时 60000
毫秒
09-28 12:48:48.593: I/CouchDB(4468): 套接字选项包括: [{keepalive,true},{nodelay,false}]09-28 12:48:48.593: I/CouchDB(4468): 源开始序列 4971 09-28 12:48:49.824: I/CouchDB(4468): [信息] [<0.8140.0>] 文档funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae触发的复制0284a8a927077abfd2b86a2616e07fed
09-28 12:48:49.834: I/CouchDB(4468): [info] [<0.8139.0>]
在 <0.8140.0> (funf->https://*****@monarca.dk:5984/monarca_funf/)
09-28 12:48:51.225
开始新的复制0284a8a927077abfd2b86a2616e07fed: E/CouchDB(4468): [错误] [<0.8140.0>] ChangesReader 进程死亡的原因: {file_corruption,09-28
12:48:51.225: E/CouchDB(4468): <<"文件损坏">>}
09-28 12:48:51.225: E/CouchDB(4468): [错误] [<0.8140.0>] 复制0284a8a927077abfd2b86a2616e07fed(funf->https://*****@monarca.dk:5984/monarca_funf/) 失败: changes_reader_died
09-28 12:48:51.245: I/CouchDB(4468): [信息] [<0.8149.0>] 重试 POST 请求以 https://*@monarca.dk:5984/monarca_funf/_revs_diff 由于错误closing_on_request
0.25 秒 09-28 12:48:51.245:I/CouchDB(4468):[信息] [<0.8148.0>] 由于错误closing_on_request
,在 0.25 秒内重试对 https://*@monarca.dk:5984/monarca_funf/_revs_diff 的 POST 请求 09-28 12:48:51.476:E/CouchDB(4468):[错误] [<0.298.0>] 复制0284a8a927077abfd2b86a2616e07fed错误(由文档funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae触发):changes_reader_died


这是有问题的复制文档。
{"_id":"funf_client_to_server_49fd7812-409d-47df-a1cd-888db15a24ae","_rev":"825-082674db3441880a23d6b6aa51be7e3e","target":"https://*@monarca.dk:5984/monarca_funf","连续":false,"source":"funf","filter":"monarcaandroid/deletefilter","_replication_id":"3dfdfca7dfd47d9352c9048497660e4c","_replication_state":"错误","_replication_state_time":"2012-09-28T12:51:25+02:00"}


这是复制文档引用的"删除过滤器"。

"function(doc) {n  return !doc._deleted;n}"

因为它是 android 上的 couchbase 移动版,我认为这是基于 couchdb 1.1 或早期的 couchdb 1.2。这可能是在您尝试的设置(max_replication_retry_count、http_connections 和 connection_timeout)登陆 couchdb 1.2 发布版本之前。这只是一个猜测。您可能希望 1) 升级您的 couchdb/couchbase 版本(如果您找到更高版本,请告诉我们),或者 2) 只需有一个计时器任务即可在后台执行单个复制。

最好使用_replicator数据库进行复制。它将免费为您进行复制重试。重新尝试复制之前的延迟呈指数级增长。

可从此处获得信息

错误日志显示"文件损坏"; 可能是暗示一些沙发数据库损坏。您可能需要查看您的_replicator数据库是否有任何损坏。

相关内容

最新更新