2

我目前正在探索 CouchDB 复制,并试图找出配置文件[replicator]部分中max_replication_retry_countretries_per_request配置选项之间的区别。

基本上,我想将本地 couchdb 的连续复制配置到永远不会停止复制尝试的远程实例,考虑到潜在的连续离线时间(几天甚至几周)。因此,我希望进行无限复制尝试,最大重试间隔为 5 分钟左右。我可以这样做吗?我是否需要更改默认配置才能实现此目的?

4

1 回答 1

2

以下是我在 CouchDB 邮件列表中收到的回复:

如果我们谈论的是 Couch 1.6,则属性retries_per_request 控制当前复制在放弃之前将尝试读取 _changes 提要的次数。属性 max_replication_retry_count控制复制管理器将重试整个复制作业的尝试次数。将此属性设置为“infinity”应该使复制管理器永不放弃。

我不认为这些尝试之间的间隔是可配置的。据我了解,它将从重试之间的 2.5 秒开始,然后加倍直到达到 10 分钟,这将是硬上限。

扩展答案:

答案会略有不同,具体取决于您使用的是 1.x/2.0 版本还是当前主版本。

如果您使用的是 1.x 或 2.0 版本:设置“max_replication_retry_count = infinity”,以便它始终重试失败的复制。如果出现任何错误,该设置控制整个复制作业如何重新启动。然后“retries_per_request”可用于处理单个复制器 HTTP 请求的错误。基本上是快速立即重试成功的情况。“retries_per_request”的默认值为 10。第一次失败后,有 0.25 秒的等待时间。然后在下一次失败时,它会翻倍到 0.5,依此类推。最大等待间隔为 5 分钟。但是,如果您希望定期离线,那么长时间重试单个请求可能不值得,因此将“retries_per_request”减少到 6 或 7。

如果您正在使用具有新调度复制器的当前主服务器:无需设置“max_replication_retry_count”,该设置将消失,并且只要复制文档存在,所有复制作业将始终重试。但是“retries_per_request”的工作方式与上述相同。当复制作业连续失败时,复制调度程序也会进行指数退避。第一次退避为 30 秒。然后它加倍到 1 分钟、2 分钟,依此类推。最大退避等待时间约为 8 小时。但是,如果您不想在网络连接恢复时平均等待 4 小时来重新启动复制,并且希望大约 5 分钟左右,请在“复制器”配置部分中设置“max_history = 8”。max_history 控制为每个复制作业保留多少过去事件的历史记录。如果连续崩溃的历史较少,则退避等待间隔也会更短。

总结一下,对于 1.x/2.0 版本:

[复制器] max_replication_retry_count = 无限重试次数 = 6

对于当前的主人:

[复制器] max_history = 8 retries_per_request = 6

于 2017-06-20T16:26:47.610 回答