有时有需要从ES集群中去除多个节点的需求,比如迁移一套ES集群到另外一套ES集群,这时可以先将新的ES节点加入到现有集群里,再将老ES节点下线。

一 实验环境

 ​​​​​二 实验步骤

2.1 集群扩容-添加新节点

可参考ES集群扩容-新增一个节点_雅冰石的专栏-CSDN博客

该文章以新增一个节点node-4为例,请参考该文章为ES集群新增三个节点,令外两个节点名称分别是node-5及node-6.

2.2 集群缩容-去除老节点

删除符合主节点条件的节点时,不要同时删除太多的节点,这一点很重要。例如,如果当前有七个符合主节点条件的节点,并且您希望将其减少到三个,则不可能一次停止四个节点:这样做将只剩下三个节点,这不到投票配置的一半,这意味着集群无法采取任何进一步的操作。

要删除其中一个节点,必须首先通知Elasticsearch该节点不应属于投票配置的一部分。然后,您可以使被排除的节点脱机,不会影响集群的可用性。

只有在短时间内从集群中移除至少一半符合主资格的节点时,才需要投票排除。删除不符合主节点条件的节点时不需要它们,删除不到一半符合主节点条件的节点时也不需要它们。

只要集群中至少有三个主合格节点,作为一般规则,最好一次删除一个节点,让集群有足够的时间自动调整投票配置,并使容错级别适应新的节点集。

2.2.1 移出第一个节点

2.2.1.1 从投票选举中排除要下线的节点

#这里排除掉node-1为例

curl -u elastic -X POST "192.168.144.246:10412/_cluster/voting_config_exclusions/node-1"

192.168.144.246:10412这里写集群中任意节点的IP和端口即可。

/*

我看官网上写的语法是POST /_cluster/voting_config_exclusions?node_names=node_name,可是我试了不行,也许是版本不同的原因吧。

*/

#验证是否排除成功

curl -X GET "192.168.144.246:10412/_cluster/state?filter_path=metadata.cluster_coordination.voting_config_exclusions&pretty" -u elastic

Enter host password for user 'elastic':

{

  "metadata" : {

    "cluster_coordination" : {

      "voting_config_exclusions" : [

        {

          "node_id" : "nSXSmSBAS8qYRt3au_G1lg",

          "node_name" : "node-1"

        }

      ]

    }

  }

}

若能在输出中看到要排除的node,说明排除成功

2.2.1.2 停止要下线的节点

systemctl stop elasticsearch

#取消开机自启动

systemctl disable elasticsearch

2.2.1.3 检查集群状态

下线一个节点,会触发分片重新分配,这期间集群的状态是yellow,需要等待一下,确定集群状态是green。

curl -u elastic http://192.168.144.246:10412/_cluster/health/

[root@Centos7-Mode-V8 ~]# curl -u elastic http://192.168.144.246:10412/_cluster/health/

Enter host password for user 'elastic':

{"cluster_name":"vcom","status":"green","timed_out":false,"number_of_nodes":5,"number_of_data_nodes":3,"active_primary_shards":5,"active_shards":10,"relocating_shards":0,"initializing_shards":0,"unassigned_shards":0,"delayed_unassigned_shards":0,"number_of_pending_tasks":0,"number_of_in_flight_fetch":0,"task_max_waiting_in_queue_millis":0,"active_shards_percent_as_number":100.0}[root@Centos7-Mode-V8 ~]#

可以看到集群状态变为green,且节点数量变少了。

2.2.2 移出第二个节点

可参考2.2.1‘移出第一个节点’步骤,需要将将node1-改为node2。

2.2.2 移出第三个节点

可参考2.2.1‘移出第一个节点’步骤,需要将将node1-改为node3。

2.2.4 在维护完成后应清除排除项

curl -X DELETE "192.168.144.246:10412/_cluster/voting_config_exclusions?pretty" -u elastic

2.2.5 卸载下线的ES

为了防止ES节点启动后,自动加入到ES集群(如果配置了iscovery.zen.ping.unicast.hosts,会自动发现集群),需要把该ES节点卸载。

2.3 检查业务

测试业务,确保仍能正常运行

--本篇文章参考了

https://www.elastic.co/guide/en/elasticsearch/reference/7.16/add-elasticsearch-nodes.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐