安全重启步骤

  • 暂停数据写入程序,停止索引数据,同时备份集群
  • 关闭集群shard allocation
  • 执行同步刷新POST /_flush/synced
  • 关闭节点修改变更配置
  • 先重启全部Master节点,再运行其他节点
  • 集群health status变成yellow开启集群shard allocation
  • 等待recovery完成重新开启数据写入程序

速度调优

  • 可临时增大 max_bytes_per_sec;随后在进行更改
  • 可以多节点同时操作
  • 可以将历史索引的副本数暂时调整为0;集群恢复后在进行调整
  • 使用 _forcemerge

相关API

  • 增大max_bytes_per_sec:http://localhost:port/_cluster/settings?flat_settings=true{"transient" : {"indices.recovery.max_bytes_per_sec" : 200mb}}
  • 恢复max_bytes_per_sec:http://localhost:port/_cluster/settings?flat_settings=true{"transient" : {"indices.recovery.max_bytes_per_sec" :null}}

重启或删除节点操作步骤

1、停止数据写入,备份数据
2、禁用分片分配
关闭节点时,分配过程会等待index.unassigned.node_left.delayed_timeout(默认情况下为一分钟),然后再开
始将该节点上的分片复制到集群中的其他节点,这可能涉及大量I /O操作, 由于关闭的节点升级后即将重新启动,
因此该I / O是不必要的。 在关闭节点之前禁用此功能,可以避免浪费大量的时间进行分配复制及消耗高额I/O资
源。

  1. # curl -X PUT "http://127.0.0.1:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "none" } }'

image.png
3、停止非必要的索引和执行同步刷新

  1. # curl -X POST http://127.0.0.1:9200/_flush/synced

尽管可以在升级过程中继续建立索引,但如果临时停止非必要索引并执行同步刷新,则碎片恢复速度会更快。
在执行同步刷新时,请检查响应以确保没有故障。 由于挂起索引操作而失败的同步刷新操作会在响应主体中列出,
尽管请求本身仍然返回200状态。如果请求失败,请重新发出请求。
3、关闭即将升级版本的节点
////////////////////////////////////////////////按照实际需求操作/////////////////////////////////////////////////////
4、启动升级的节点
执行启动命令启动新升级的节点并通过查看日志文件或 curl -X GET “estest:9001/_cat/nodes” 确认节点重新加
入群集。
5、等待集群变黄重新启用分片分配
节点加入群集后,请删除cluster.routing.allocation.enable设置以启用分片分配:

  1. # curl -X PUT "http://127.0.0.1:9200/_cluster/settings" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": null } }'

image.pngimage.png
6、等待节点恢复
可以通过提交_cat /health请求来检查进度:

  1. # curl http://127.0.0.1:9200/_cat/health
  2. 1575097592 15:06:32 es-yt red 5 3 627 627 0 12 4717 14 2.5s 11.7%

未同步刷新的分片可能需要更长时间才能恢复。
可以通过提交_cat/recovery请求来查看单个碎片的恢复状态:

  1. # curl http://127.0.0.1:9200/_cat/recovery

7、在其他节点重复上述操作
当节点恢复并且群集稳定时,对每个需要更新的节点重复以上步骤。(也可同时对集群各节点执行重启操作)

排除停用节点

步骤1 排除停用节点

可以通过告知群集将其从分配中排除来停用节点。

  1. PUT _cluster/settings
  2. {
  3. "transient" : {
  4. "cluster.routing.allocation.exclude._ip" : "10.0.0.1"
  5. }
  6. }

这将导致Elasticsearch将该节点上的分片分配给其余节点,而不会将群集状态更改为黄色或红色(即使您的副本数设置为0)。重新分配所有分片后,您可以关闭节点并执行您需要执行的任何操作。 完成后,Elasticsearch将再剩余节点上再次重新平衡分片。

步骤2 检查集群健康状态
  1. curl -XGET 'http://ES_SERVER:9200/_cluster/health?pretty'

如果没有节点relocating,则排除节点已经被安全剔除,可以考虑关闭节点。

步骤3 判定数据是否还存在

查看节点上是否还有文档存在。

  1. curl -XGET 'http://ES_SERVER:9200/_nodes/NODE_NAME/stats/indices?pretty'

上述三步,能保证节点稳妥删除。