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

时间:2012-09-28 10:11:41

标签: android couchdb replication couchbase

我是Couch的新手,继承了一个中型项目,该项目在大约70个客户端Android手机(所有HTC Desire S)上使用CouchBase Mobile(Developer Preview V2.0),然后与主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):[info] [< 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>处开始新的复制0284a8a927077abfd2b86a2616e07fed。 (funf - > https://*****@monarca.dk:5984/monarca_funf/
09-28 12:48:51.225:E / CouchDB(4468):[错误] [< 0.8140.0>] ChangesReader进程因原因而死亡:{file_corruption,
09-28 12:48:51.225:E / CouchDB(4468):<<“file corruption”>>}
09-28 12:48:51.225:E / CouchDB(4468):[错误] [< 0.8140.0>]复制0284a8a927077abfd2b86a2616e07fedfunf - > https://*****@monarca.dk:5984/monarca_funf/)失败: changes_reader_died
09-28 12:48:51.245:I / CouchDB(4468):[info] [< 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):[info] [< 0.8148.0>]重试POST请求到https:// * @ monarca.dk:5984 / monarca_funf / _revs_diff由于错误closing_on_request而在0.25秒内完成 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”, “目标”:“https://开头的 * @ monarca.dk:5984 / monarca_funf “ ”连续“:假, ”源“: ”funf“, ”过滤器“: ”monarcaandroid / deletefilter“, ”_ replication_id“: ”3dfdfca7dfd47d9352c9048497660e4c“, ”_ replication_state“: ”错误“, ”_ replication_state_time“:” 2012 -09-28T12:51:25 + 02:00" }


这里是复制文档引用的“deletefilter”。

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

3 个答案:

答案 0 :(得分:0)

因为它是android上的couchbase mobile,我认为这是基于about couchdb 1.1或早期的couchdb 1.2。这可能是在您尝试的设置(max_replication_retry_count,http_connections和connection_timeout)落在couchdb 1.2发行版中之前。这只是猜测。您可能想要1)升级您的couchdb / couchbase版本(如果您找到以后的版本,请让我们都知道),或2)只需要一个计时器任务在后台进行单个复制。

答案 1 :(得分:0)

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

here

提供的信息

答案 2 :(得分:0)

错误日志显示文件损坏&#39 ;;可能是暗示一些沙发数据库腐败。您可能希望查看_replicator数据库是否存在任何损坏。