3.11. 复制器

3.11.1. 复制器数据库配置

[replicator]
max_jobs

2.1 版新增。

正在运行的活动复制数量。此值表示触发自动复制调度程序的阈值。系统将每隔 interval 毫秒检查有多少个复制作业正在运行,如果运行的作业数量超过 max_jobs,调度程序将在调度程序队列中暂停并重新启动最多 max_churn 个作业。将此值设置得太高会导致性能问题,而设置得太低则意味着复制作业可能没有足够的时间在再次取消调度之前取得进展。此参数可以在运行时调整,并在下一个重新调度周期生效。

[replicator]
max_jobs = 500
interval

2.1 版新增。

以毫秒为单位的调度间隔。在每个重新调度周期中,调度程序可能会启动或停止最多 max_churn 个作业。

[replicator]
interval = 60000
max_churn

2.1 版新增。

在重新调度期间启动和停止的复制作业的最大数量。此参数与 interval 一起定义了作业替换的速率。但是,在启动期间,可以在短时间内启动更多作业(最多 max_jobs)。

[replicator]
max_churn = 20
max_history

为每个作业记录的事件的最大数量。此参数定义了作业连续失败计数的上限,进而定义了在确定重新启动作业之前的延迟时使用的最大回退因子。崩溃计数的长度越长,可能的延迟时间就越长。

[replicator]
max_history = 20
update_docs

2.1 版新增。

当设置为 true 时,复制器将使用错误和触发状态更新复制文档。这近似于 2.1 之前的复制器行为。

[replicator]
update_docs = false
worker_batch_size

使用较低的批次大小,检查点会更频繁地完成。较低的批次大小还会减少使用的总 RAM 内存量。

[replicator]
worker_batch_size = 500
worker_processes

更多工作进程可以提供更高的网络吞吐量,但也可能意味着更多的磁盘和网络 IO。

[replicator]
worker_processes = 4
http_connections

每个复制的最大 HTTP 连接数。

[replicator]
http_connections = 20
connection_timeout

每个复制的 HTTP 连接超时。当复制器发出更改馈送请求时,这将除以三 (3)。即使对于非常快/可靠的网络,如果远程数据库太忙,也可能需要增加它。

[replicator]
connection_timeout = 30000
retries_per_request

2.1.1 版更改。

如果请求失败,复制器将最多重试 N 次。N 的默认值为 5(2.1.1 版之前为 10)。请求将以从 0.25 秒开始的双倍指数回退重试。因此,默认情况下,请求将在 0.25、0.5、1、2、4 秒的间隔内重试。当重试次数用尽时,整个复制作业将停止,并稍后重新尝试。

[replicator]
retries_per_request = 5
socket_options

一些套接字选项,在某些情况下可能会提高性能。

  • {nodelay, boolean()}

  • {sndbuf, integer()}

  • {recbuf, integer()}

  • {priority, integer()}

有关选项的完整列表,请参阅 inet Erlang 模块的手册页。

[replicator]
socket_options = [{keepalive, true}, {nodelay, false}]
valid_socket_options

3.3 版新增。

有效的套接字选项。不在此列表中的选项将被忽略。大多数这些选项都是低级选项,设置其中一些选项可能会导致意外或不可预测的行为。有关选项的完整列表,请参阅 inet Erlang 文档。

[replicator]
valid_socket_options = buffer,keepalive,nodelay,priority,recbuf,sndbuf
ibrowse_options

3.3.3 版新增: 需要非默认的 ibrowse 设置来支持仅 IPV6 的复制源或目标。

  • {prefer_ipv6, boolean()}

有关选项的完整列表,请参阅 ibrowse 网站。

[replicator]
ibrowse_options = [{prefer_ipv6, true}]
valid_ibrowse_options

3.3.3 版新增。

有效的 ibrowse 选项。不在此列表中的选项将被忽略。

[replicator]
valid_ibrowse_options = prefer_ipv6
valid_endpoint_protocols

3.3 版新增。

有效的复制端点协议。端点 URL 不在此列表中的复制作业将无法运行。

[replicator]
valid_endpoint_protocols = http,https
valid_proxy_protocols

3.3 版新增。

有效的复制代理协议。代理 URL 不在此列表中的复制作业将无法运行。

[replicator]
valid_proxy_protocols = http,https,socks5
checkpoint_interval

1.6 版新增。

以毫秒为单位定义复制检查点间隔。 复制器 将以指定的间隔从源数据库发出 请求

[replicator]
checkpoint_interval = 5000

较低的间隔可能对频繁更改的数据有用,而较高的值将降低带宽并对不经常更新的数据库发出更少的请求。

use_checkpoints

1.6 版新增。

如果 use_checkpoints 设置为 true,CouchDB 将在复制期间以及复制完成后创建检查点。CouchDB 可以有效地从任何这些检查点恢复复制。

[replicator]
use_checkpoints = true

注意

检查点存储在源数据库和目标数据库上的 本地文档 中(这需要写入权限)。

警告

不建议禁用检查点,因为 CouchDB 将从源数据库的更改馈送的开头扫描。

use_bulk_get

3.3 版新增。

如果 use_bulk_gettrue,CouchDB 将尝试使用 _bulk_get HTTP API 端点从源获取文档。复制器应该在错误时自动回退到单个文档 GET;但是,在某些情况下,可能有用的是完全防止花费时间尝试调用 _bulk_get

cert_file

包含用户证书的文件的路径。

[replicator]
cert_file = /full/path/to/server_cert.pem
key_file

包含用户私有 PEM 编码密钥的文件的路径。

[replicator]
key_file = /full/path/to/server_key.pem
password

包含用户密码的字符串。仅在私钥文件受密码保护时使用。

[replicator]
password = somepassword
verify_ssl_certificates

设置为 true 以验证对等证书。

[replicator]
verify_ssl_certificates = false
ssl_trusted_certificates_file

包含对等方可信证书列表的文件(以 PEM 格式)。

[replicator]
ssl_trusted_certificates_file = /etc/ssl/certs/ca-certificates.crt
ssl_certificate_max_depth

最大对等方证书深度(即使证书验证关闭,也必须设置)。

[replicator]
ssl_certificate_max_depth = 3
auth_plugins

版本 2.2 中新增。

复制器客户端身份验证插件列表。插件将按顺序尝试,第一个成功初始化的插件将被使用。默认情况下,有两个插件可用:couch_replicator_auth_session 实现会话(cookie)身份验证,以及 couch_replicator_auth_noop 实现基本身份验证。为了向后兼容,无操作插件应在插件列表的末尾使用。

[replicator]
auth_plugins = couch_replicator_auth_session,couch_replicator_auth_noop
usage_coeff

版本 3.2.0 中新增。

使用系数在每个调度周期衰减历史公平份额使用情况。该值必须介于 0.0 和 1.0 之间。较低的值将确保历史使用情况更快衰减,而较高的值意味着它将被记住更长时间。

[replicator]
usage_coeff = 0.5
priority_coeff

版本 3.2.0 中新增。

优先级系数会衰减所有作业的优先级,使它们缓慢地向运行队列的前面漂移。此系数定义了此算法运行的最大时间窗口。例如,如果此值太小(0.1),则经过几个周期后,相当多的作业最终会达到优先级 0,并且会使此算法变得无用。默认值为 0.98,这样选择是为了确保如果一个作业运行了一个调度周期,然后没有运行 7 个小时,它仍然具有优先级 > 0。7 个小时的选择是因为它足够接近 8 个小时,而 8 个小时是默认的最大错误回退间隔。

[replicator]
priority_coeff = 0.98

3.11.2. 公平份额复制器份额分配

[replicator.shares]
$replicator_db

版本 3.2.0 中新增。

公平份额配置部分。较高的份额值会导致来自该数据库的作业有更高的运行机会。默认值为 100,最小值为 1,最大值为 1000。即使数据库不存在,也可以设置配置。

在此上下文中,选项 $replicator_db 充当复制器数据库名称的占位符。默认复制器数据库是 _replicator。可以创建其他复制器数据库。为了被系统识别为复制器数据库,它们的数据库名称应以 /_replicator 结尾。有关更多信息,请参见 复制器数据库 部分。

[replicator.shares]
_replicator = 50
foo/_replicator = 25
bar/_replicator = 25