索引恢复设置
对等恢复(Peer recovery)将数据从主分片同步到新的或现有的分片副本。
当 Elasticsearch 发生以下情况时,会自动进行对等恢复:
- 重新创建在节点故障期间丢失的分片
- 由于集群重新平衡或更改了分片分配设置,将分片迁移到另一个节点
您可以使用 cat recovery API 查看正在进行和已完成的恢复列表。
indices.recovery.max_bytes_per_sec-
(动态,每秒字节值) 限制每个节点的总入站和出站恢复流量。适用于对等恢复以及快照恢复(即从快照还原)。默认值为
40mb(即 40MiB/s),除非该节点是专用的冷节点或冻结节点,在这种情况下,默认值与该节点可用的总内存有关总内存 冷节点和冻结节点的默认恢复速率 ≤ 4 GiB 40 MiB/s > 4 GiB 且 ≤ 8 GiB 60 MiB/s > 8 GiB 且 ≤ 16 GiB 90 MiB/s > 16 GiB 且 ≤ 32 GiB 125 MiB/s > 32 GiB 250 MiB/s 此限制分别应用于每个节点。如果集群中的多个节点同时执行恢复,则集群的总恢复流量可能会超过此限制。
如果此限制设置得过高,正在进行的恢复可能会消耗过多的带宽和其他资源,从而对集群的性能产生影响,在极端情况下甚至可能导致集群不稳定。
这是一个动态设置,这意味着您可以在每个节点的
elasticsearch.yml配置文件中进行设置,也可以使用 cluster update settings 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_snapshots为false时,Elasticsearch 将通过从当前主分片传输索引数据来构建这个新副本。当此设置维true(注:应为 为 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 Service、Elastic Cloud Enterprise 和 Elastic Cloud on Kubernetes 的间接使用而设计。不支持直接使用。
当作为托管服务运行 Elasticsearch 时,以下设置允许该服务指定每个节点上磁盘读取、磁盘写入和网络流量的绝对最大带宽,并允许您根据这些绝对最大值控制每个节点上的最大恢复带宽。它们具有两个效果:
- 如果未设置
indices.recovery.max_bytes_per_sec,它们将决定用于恢复的带宽,从而覆盖上述默认行为。 - 它们对恢复带宽施加了一个节点范围的限制,该限制与
indices.recovery.max_bytes_per_sec的值无关。
如果您未设置 indices.recovery.max_bytes_per_sec,则最大恢复带宽将作为绝对最大带宽的一定比例进行计算。对读流量和写流量分别进行计算。该服务分别使用 node.bandwidth.recovery.disk.read、node.bandwidth.recovery.disk.write 和 node.bandwidth.recovery.network 定义磁盘读取、磁盘写入和网络传输的绝对最大带宽,并且您可以通过调整 node.bandwidth.recovery.factor.read 和 node.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.write和node.bandwidth.recovery.network。 node.bandwidth.recovery.disk.write- (每秒字节值) 节点上类似恢复的工作负载的绝对最大磁盘写入速度。如果设置了此项,则还必须设置
node.bandwidth.recovery.disk.read和node.bandwidth.recovery.network。 node.bandwidth.recovery.network- (每秒字节值) 节点上类似恢复的工作负载的绝对最大网络吞吐量,该吞吐量适用于读取和写入。如果设置了此项,则还必须设置
node.bandwidth.recovery.disk.read和node.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_sec和node.bandwidth.recovery.factor.read,可用于恢复的最大读取带宽的比例。必须大于0且不大于1。如果未设置,将使用node.bandwidth.recovery.operator.factor的值。如果未设置任何因子设置,则使用值0.4。启用了操作员权限功能时,此设置只能由操作员用户更新。 node.bandwidth.recovery.operator.factor.write- (浮点数,动态) 如果未设置
indices.recovery.max_bytes_per_sec和node.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。启用了操作员权限功能时,此设置只能由操作员用户更新。