Elasticsearch 平滑下线节点实践指南

栏目: IT技术 · 发布时间: 4年前

内容简介:往期文章精选:

在 Elasticsearch 日常运维中,有时候要对集群的某一个节点进行下线、上线操作,比如增加磁盘,扩展内存,版本升级,或节点回收等。本文就根据近期的一次生产实践,梳理如何实现 Elasticsearch 节点平滑下线。

所谓平滑下线,是指服务不中断,不影响正常的数据写入和业务查询。首先我们不能直接 kill 服务进程,这样可能会造成数据丢失,影响正常业务。下面整理了正确的操作步骤。

一、检查集群配置,避免脑裂问题

在做节点下线操作之前,建议先检查 master-eligible 节点的数量与 minimum_master_nodes 配置,确认下线节点不会影响集群可用性与稳定性,特别是针对小集群。涉及到的参数如下:

discovery.zen.minimum_master_nodes: 3
node.master: true

其中配置了 node.master 为 true 的节点即为 master-eligible 节点,这些节点有资格参与集群 master 节点选举,而且该参数默认值为 true,小集群经常会忽略配置该参数。master 节点主要职责是创建/删除索引,分配分片,发现与协调其他节点等。

minimum_ master_nodes 属性是为了避免数据丢失和脑裂问题,表示集群中最少要包含多少个 master-eligible 节点。例如集群中 只有  2 个 master-eligible 节点,而  minimum_master_nodes  配置为 3,Elasticsearch 就选举不出 master 节点,也就 形成不了一个集群,Elasticsearch 服务会处于不可用状态。因此,minimum_master_nodes 这个参数的配置非常重要,官方建议设为 (master_eligible_nodes / 2) + 1 ,需要我们根据集群 master-eligible 节点数量进行设置。

因此,下线节点前要检查是否需要修改  minimum_master_nodes。如果需要, 建议先通过命令动态修改,并修改配置文件待下一次重启生效。动态修改 minimum_master_nodes  的命令:

# 设置 minimum_master_nodes 为 2
curl -XPUT 'http://hostname:9200/_cluster/settings' -H 'Content-Type: application/json' -d '{
  "persistent" : {
    "discovery.zen.minimum_master_nodes" : 2
  }
}'

这就是下线节点之前要做的必要检查,确保没有问题之后,接下来的操作也不复杂

二、将节点从集群路由策略中排除

通过以下方式将下线节点从集群路由策略中排除:

curl -XPUT http://hostname:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{
  "transient": {
    "cluster.routing.allocation.exclude._name": "{node.name}"
  }
}'

上面其实会触发分片的  Allocation 机制,涉及的参数为  cluster.routing.allocati on.exclude.{attribute},其中  {attribute} 表示节点的匹配方 式,支持三种:

  • _name:匹配 node 名称,多个 node 名称用逗号隔开;

  • _ip:匹配 node ip 地址,多个地址用逗号隔开;

  • _host:匹配 node 主机名,多个主机名用逗号隔开;

执行后将导致 {node.name} 节点上的分片慢慢迁移到其他节点, 可能 会花几分钟甚至更多的时间,期间不会影响正常业务

三、等待所有分区与数据迁移完成

上一步执行后,不能马上停服务,必须要等待所有分片迁移到其他节点,若安装了 ES head 插件,建议 通过界面查看 分区迁移情况集群健康状态 。也可以通过以下命令查看:

curl -s "http://hostname:9200/_cat/shards" | grep RELOCATING
curl http://hostname:9200/_cluster/health?pretty

所有分片迁移完成后,可再通过以下命令 节点数据是否已迁移 都是 0 表示数据也已经迁移,如:

curl http://hostname:9200/_nodes/{node.name}/stats/indices?pretty
  ...
  "indices" : {
        "docs" : {
          "count" : 0,
          "deleted" : 0
        },
        "store" : {
          "size_in_bytes" : 0
        },
  ...

接下来就可以直接停服务进程了

四、停掉节点服务进程

节点分片迁移完成后,停掉 ES 下线节点的服务进程:

# 若配置了服务,可 stop 服务
systemctl stop elasticsearch.service
# 或者 kill 服务进程
kill {pid}

五、恢复集群路由策略

此时节 点已经完全从集群中删除了,可恢复集群路由策略:

curl -XPUT http://hostname:9200/_cluster/settings?pretty -H 'Content-Type: application/json' -d '{
  "transient": {
    "cluster.routing.allocation.exclude._name": null
  }
}'

至此节点下线操作完成。这里的目标是将节点从集群中下线剔除,并没有上线操作,如果要再次上线该节点,只需要启动服务即可,节点会自动加入集群并分配分片。

六、总结

本文 主要 利用集群路由策略实现 分片的 迁移 ,从而实现了 Elasticsearch 集群节点的平滑下线,其实也能够实现节点的 循环重启

参考: Elasticsearch集群管理之1——如何高效的添加、删除节点?

往期文章精选:

1、 HBase 性能调优第一弹:内存篇

2、 从原理到参数解析,HBase 刷写与合并机制介绍

4、 如何快速全面掌握Kafka?5000字吐血整理

Elasticsearch 平滑下线节点实践指南

如果您喜欢这篇文章,点【在看】与转发都是一种鼓励,期待得到您的认可 ❥(^_-)


以上所述就是小编给大家介绍的《Elasticsearch 平滑下线节点实践指南》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Smarter Than You Think

Smarter Than You Think

Clive Thompson / Penguin Press HC, The / 2013-9-12 / USD 27.95

It's undeniable—technology is changing the way we think. But is it for the better? Amid a chorus of doomsayers, Clive Thompson delivers a resounding "yes." The Internet age has produced a radical new ......一起来看看 《Smarter Than You Think》 这本书的介绍吧!

SHA 加密
SHA 加密

SHA 加密工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具