索引恢复设置

编辑

对等恢复将数据从主分片同步到新的或现有的分片副本。

当 Elasticsearch 发生以下情况时,会自动进行对等恢复:

  • 重新创建节点故障期间丢失的分片
  • 由于集群重新平衡或 分片分配设置 的更改,将分片重新定位到另一个节点

您可以使用 cat recovery API 查看正在进行和已完成的恢复列表。

恢复设置

编辑
indices.recovery.max_bytes_per_sec

(动态) 限制每个节点的总入站和出站恢复流量。适用于对等恢复以及快照恢复(即,从快照还原)。除非节点是专用的 冻结 节点,否则默认为 40mb,在这种情况下,默认值与节点可用的总内存相关。

总内存 冷节点和冻结节点上的默认恢复速率

≤ 4 GB

40 MB/秒

> 4 GB 且 ≤ 8 GB

60 MB/秒

> 8 GB 且 ≤ 16 GB

90 MB/秒

> 16 GB 且 ≤ 32 GB

125 MB/秒

> 32 GB

250 MB/秒

此限制分别应用于每个节点。如果集群中的多个节点同时执行恢复,则集群的总恢复流量可能会超过此限制。

如果此限制过高,则正在进行的恢复可能会消耗过多的带宽和其他资源,这会对您的集群的性能产生影响,在极端情况下可能会使其不稳定。

这是一个动态设置,这意味着您可以在每个节点的 elasticsearch.yml 配置文件中设置它,并且可以使用 集群更新设置 API 动态更新它。如果您动态设置它,则相同的限制将应用于集群中的每个节点。如果您不动态设置它,则可以在每个节点上设置不同的限制,如果某些节点的带宽比其他节点好,则这很有用。例如,如果您使用 索引生命周期管理,则您可能会为热节点提供比温节点更高的恢复带宽限制。

专家对等恢复设置

编辑

您可以使用以下专家设置来管理对等恢复的资源。

indices.recovery.max_concurrent_file_chunks

(动态,专家) 每个恢复并行发送的文件块数。默认为 2

当单个分片的恢复未达到 indices.recovery.max_bytes_per_sec 设置的流量限制时,您可以增加此设置的值,最大值为 8

indices.recovery.max_concurrent_operations

(动态,专家) 每个恢复并行发送的操作数。默认为 1

在恢复期间并发重放操作可能会非常消耗资源,并可能干扰集群中的索引、搜索和其他活动。请勿在未仔细验证您的集群是否具有可用于处理由此产生的额外负载的资源的情况下增加此设置。

indices.recovery.use_snapshots

(动态,专家) 启用基于快照的对等恢复。

Elasticsearch 使用对等恢复过程来恢复副本并重新定位主分片,该过程涉及在目标节点上构建分片的新副本。当 indices.recovery.use_snapshotsfalse 时,Elasticsearch 将通过从当前主节点传输索引数据来构建此新副本。当此设置 为 true 时,Elasticsearch 将首先尝试从最近的快照复制索引数据,并且仅在无法识别合适的快照时才从主节点复制数据。默认为 true

如果您的集群在节点到节点的数据传输成本高于从快照恢复数据的成本的环境中运行,则将此选项设置为 true 可以降低您的运营成本。它还可以减少主节点在恢复期间必须执行的工作量。

此外,在恢复分片时,将咨询具有设置 use_for_peer_recovery=true 的存储库以查找合适的快照。如果未定义任何已注册存储库的此设置,则将从源节点恢复索引文件。

indices.recovery.max_concurrent_snapshot_file_downloads

(动态,专家) 每个恢复并行发送到目标节点的快照文件下载请求数。默认为 5

请勿在未仔细验证您的集群是否具有可用于处理由此产生的额外负载的资源的情况下增加此设置。

indices.recovery.max_concurrent_snapshot_file_downloads_per_node

(动态,专家) 在目标节点中并行执行的所有恢复的快照文件下载请求数。默认为 25

请勿在未仔细验证您的集群是否具有可用于处理由此产生的额外负载的资源的情况下增加此设置。

托管服务的恢复设置

编辑

此功能旨在由 Elasticsearch ServiceElastic Cloud EnterpriseElastic Cloud on Kubernetes 间接使用。不支持直接使用。

以托管服务形式运行 Elasticsearch 时,以下设置允许服务指定每个节点上的磁盘读取、磁盘写入和网络流量的绝对最大带宽,并允许您根据这些绝对最大值控制每个节点上的最大恢复带宽。它们具有两个效果

  1. 如果未设置 indices.recovery.max_bytes_per_sec,则它们会确定用于恢复的带宽,从而覆盖上述默认行为。
  2. 它们对恢复带宽施加一个节点范围的限制,该限制独立于 indices.recovery.max_bytes_per_sec 的值。

如果您未设置 indices.recovery.max_bytes_per_sec,则最大恢复带宽将计算为绝对最大带宽的比例。读取和写入流量分别执行计算。服务使用 node.bandwidth.recovery.disk.readnode.bandwidth.recovery.disk.writenode.bandwidth.recovery.network 分别定义磁盘读取、磁盘写入和网络传输的绝对最大带宽,您可以通过调整 node.bandwidth.recovery.factor.readnode.bandwidth.recovery.factor.write 来设置可用于恢复的绝对最大带宽的比例。如果启用了操作员权限功能,则服务还可以使用这些设置的操作员专用变体来设置默认比例。

如果您设置 indices.recovery.max_bytes_per_sec,则 Elasticsearch 将使用其值作为最大恢复带宽,只要该值不超过节点范围的限制即可。Elasticsearch 通过将绝对最大带宽乘以 node.bandwidth.recovery.operator.factor.max_overcommit 因子来计算节点范围的限制。如果您设置的 indices.recovery.max_bytes_per_sec 超过了节点范围的限制,则节点范围的限制优先。

服务应通过实验来确定绝对最大带宽设置的值,该实验使用类似于恢复的工作负载,其中有几个并发工作程序,每个工作程序以 512kiB 的块顺序处理文件。

node.bandwidth.recovery.disk.read
(每秒字节值) 节点上类似恢复的工作负载的绝对最大磁盘读取速度。如果设置,则还必须设置 node.bandwidth.recovery.disk.writenode.bandwidth.recovery.network
node.bandwidth.recovery.disk.write
(每秒字节值) 节点上类似恢复的工作负载的绝对最大磁盘写入速度。如果设置,则还必须设置 node.bandwidth.recovery.disk.readnode.bandwidth.recovery.network
node.bandwidth.recovery.network
(每秒字节值) 节点上类似恢复的工作负载的绝对最大网络吞吐量,该吞吐量同时适用于读取和写入。如果设置,则还必须设置 node.bandwidth.recovery.disk.readnode.bandwidth.recovery.disk.write
node.bandwidth.recovery.factor.read
(浮点数,动态) 如果未设置 indices.recovery.max_bytes_per_sec,则可用于恢复的最大读取带宽的比例。必须大于 0 且不大于 1。如果未设置,则使用 node.bandwidth.recovery.operator.factor.read 的值。如果未设置任何因子设置,则使用值 0.4
node.bandwidth.recovery.factor.write
(浮点数,动态) 如果未设置 indices.recovery.max_bytes_per_sec,则可用于恢复的最大写入带宽的比例。必须大于 0 且不大于 1。如果未设置,则使用 node.bandwidth.recovery.operator.factor.write 的值。如果未设置任何因子设置,则使用值 0.4
node.bandwidth.recovery.operator.factor.read
(浮点数,动态) 如果未设置 indices.recovery.max_bytes_per_secnode.bandwidth.recovery.factor.read,则可用于恢复的最大读取带宽的比例。必须大于 0 且不大于 1。如果未设置,则使用 node.bandwidth.recovery.operator.factor 的值。如果未设置任何因子设置,则使用值 0.4。当启用操作员权限功能时,只有操作员用户才能更新此设置。
node.bandwidth.recovery.operator.factor.write
(浮点数,动态) 如果未设置 indices.recovery.max_bytes_per_secnode.bandwidth.recovery.factor.write,则可用于恢复的最大写入带宽的比例。必须大于 0 且不大于 1。如果未设置,则使用 node.bandwidth.recovery.operator.factor 的值。如果未设置任何因子设置,则使用值 0.4。当启用操作员权限功能时,只有操作员用户才能更新此设置。
node.bandwidth.recovery.operator.factor
(浮点数,动态) 如果既未设置 indices.recovery.max_bytes_per_sec 也未设置任何其他因子设置,则可用于恢复的最大带宽的比例。必须大于 0 且不大于 1。默认为 0.4。当启用操作员权限功能时,只有操作员用户才能更新此设置。
node.bandwidth.recovery.operator.factor.max_overcommit
(浮点数,动态) 无论任何其他设置如何,都可用于恢复的绝对最大带宽的比例。必须大于 0。默认为 100。当启用操作员权限功能时,只有操作员用户才能更新此设置。