Elasticsearch:为自管的 Elasticsearch 添加分片分配感知

Posted Elastic 中国社区官方博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Elasticsearch:为自管的 Elasticsearch 添加分片分配感知相关的知识,希望对你有一定的参考价值。

Elasticsearch 是一种流行的搜索和分析引擎,用于存储、搜索和分析大量数据。 为了增强 Elasticsearch 集群的可靠性,你可以利用自定义节点属性作为感知属性。 通过这样做,Elasticsearch 可以考虑您的硬件配置并相应地分配分片。 如果 Elasticsearch 知道哪些节点共享相同的物理服务器、机架或区域,它可以战略性地分配主分片和副本分片,以最大限度地降低在硬件故障时丢失所有分片副本的风险。相关阅读 “Elasticsearch:shard 分配感知”。

什么是分片分配感知?

分片分配感知是 Elasticsearch 中的一项功能,允许你根据特定节点属性分配分片。 通过这样做,你可以确保分片在集群中的节点之间均匀分布,从而提高性能和资源利用率,并最大限度地降低在硬件故障时丢失所有分片副本的风险。

如何为 Elasticsearch 集群添加分片分配感知?

要为 Elasticsearch 集群添加分片分配感知,你需要执行以下步骤:

步骤一:添加节点属性

第一步是为 Elasticsearch 集群中的所有节点添加节点属性。 你可以使用以下命令向节点添加节点属性:

node.attr.<attribute_name>: <attribute_value>

例如,如果要为节点添加名为 server 且值为 V1 的节点属性,则可以使用以下命令。使用你最喜欢的文本编辑器并更新 elasticsearch.yml

node.attr.server: V1

步骤二:禁用分片分配

下一步是禁用副本分片的分片分配,为滚动重启做准备。 你可以使用以下命令禁用分片分配:

PUT _cluster/settings

  "persistent": 
    "cluster.routing.allocation.enable": "primaries"
  

提示:请检查第 10 步是否有其他选项。

步骤三:执行 flush(可选)

虽然你可以在滚动重启期间继续索引,但如果你暂时停止非必要索引并执行 flush,则分片恢复会更快。 你可以使用以下命令执行刷新:

POST /_flush

步骤四:重启节点

下一步是重新启动 Elasticsearch 节点。 你可以使用以下命令重新启动节点:

service elasticsearch restart

提示:上述命令适合在 Linux 系统上的安装。针对其它系统的安装,请执行相应的命令。

步骤五:检查节点是否加入和节点属性

重启节点后,需要检查节点是否加入集群及其属性。 你可以使用以下命令检查加入的节点及其属性:

GET _cat/nodeattrs?v&s=attr

步骤六:重新启用分片分配

最后一步是重新启用分片分配。 你可以使用以下命令重新启用分片分配:

PUT _cluster/settings

  "persistent": 
    "cluster.routing.allocation.enable": null
  

提示:请检查第 10 步是否有其他选项。

步骤七:启用集群级感知

重新启动所有节点后,你可以启用集群级别的感知。 你可以使用以下命令启用集群级别的感知:

PUT _cluster/settings

  "persistent": 
    "cluster.routing.allocation.awareness.attributes": "server"
  

此命令告诉 Elasticsearch 根据你在步骤 1 中设置的节点属性分配分片。

注意:在运行上述 API 之前,不会有感知,也不会为感知进行分片重定位。

步骤八:检查分片分配

启用集群级别感知后,Elasticsearch 集群将开始根据新的节点属性分配分片的过程。 你可以使用 _cat/shards API 监控分片分配过程的进度:

GET _cat/shards?v

这将返回一个表,显示集群中每个分片的状态。 查看 INITIALIZING 和 RELOCATING 状态以查看分片分配的进度。

步骤九:调整分片重定位设置(可选)

你可以通过修改 indices.recovery.max_bytes_per_sec 和 cluster.routing.allocation.cluster_concurrent_rebalance 设置来调整分片重定位过程的速度。 默认情况下,分片恢复的最大每秒字节数设置为 40 MB。 你可以增加此值以加快分片重定位过程。

要将分片恢复的每秒最大字节数设置为 250 MB,请使用以下 API:

PUT _cluster/settings

  "persistent": 
    "indices.recovery.max_bytes_per_sec": "250mb"
  

你还可以使用 cluster.routing.allocation.cluster_concurrent_rebalance 设置调整并发分片重定位的数量。 默认情况下,只能同时发生两个分片重定位。 你可以增加此值以加快分片重定位过程。

要将并发分片重定位数设置为 10,请使用以下 API:

PUT _cluster/settings

  "persistent": 
    "cluster.routing.allocation.cluster_concurrent_rebalance": "10"
  

步骤十:调整节点未分配分片等待时间(可选)

如果你不想在每个节点重启后禁用(第 2 步)和重新启用(第 6 步)分片分配,你可以使用此选项。 如果你使用此选项,则无需在每次节点重启后执行第 2 步和第 6 步。

对于较大的 Elasticsearch 集群,你可能需要增加未分配的分片在重新分配之前等待的时间。 默认情况下,未分配的分片在分配给另一个节点之前等待一分钟。 你可以使用 index.unassigned.node_left.delayed_timeout 设置增加此等待时间。

要将未分配的分片等待时间增加到 5 分钟,请使用以下 API:

PUT _all/_settings

  "index.unassigned.node_left.delayed_timeout": "5m"

这会将未分配分片的等待时间增加到五分钟,从而使集群有更多时间来解决节点故障或其他可能导致分片未分配的问题。

结论

为自管理的 Elasticsearch 添加分片分配意识是确保你的集群针对性能和弹性进行优化的关键步骤。 通过启用集群级别感知和调整分片重定位设置,你可以帮助确保你的 Elasticsearch 集群始终以最佳性能运行,即使遇到节点故障或其他问题也是如此。 按照本文中概述的步骤,你可以轻松地将分片分配意识添加到你的自管理 Elasticsearch 集群,并享受更具弹性和性能的搜索解决方案的好处。

以上是关于Elasticsearch:为自管的 Elasticsearch 添加分片分配感知的主要内容,如果未能解决你的问题,请参考以下文章

ELK 实验elasticsearch集群搭建

ElasticSearch的备份迁移方案

ElasticSearch Client详解

搭建elasticsearch可视化插件

elasticsearch集群安装配置

Java连接Elasticsearch集群