索引恢复设置编辑

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

当 Elasticsearch 执行以下操作时,会自动执行对等恢复:

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

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

恢复设置编辑

indices.recovery.max_bytes_per_sec

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

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

≤ 4 GB

40 MB/s

> 4 GB 和 ≤ 8 GB

60 MB/s

> 8 GB 和 ≤ 16 GB

90 MB/s

> 16 GB 和 ≤ 32 GB

125 MB/s

> 32 GB

250 MB/s

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

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

这是一个动态设置,这意味着您可以在每个节点的 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 服务Elastic 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。当启用操作员权限功能时,此设置只能由操作员用户更新。