ES集群重启预案
es每个节点均是有状态,不同索引分片配置设置不同,单个分片可能有冗余,可能有1备份。因此,为不影响服务,升级或者重启es服务需要逐个依次进行(滚动重启)
注:重启操作应在集群状态为green时进行,重启任一一个节点前后,都要保证在集群状态恢复到green状态时。
步骤1-禁用分片分配
如果不禁止,当停止某一节点后,分片分配进程会进行UNASSIGNED分片的分配(当集群状态达到recovery要求,触发恢复阈值时)。这样的情况下,会造成大量的IO操作。但是禁用分片后,功能上会禁止新建索引。
curl -X PUT http://0.0.0.0:9200/_cluster/settings?pretty -d '{"transient": {"cluster.routing.allocation.enable": "none"}}'
步骤2-验证修改后的配置:
curl -X GET http://0.0.0.0:9200/_cluster/settings?pretty
步骤3-执行同步刷新
这一步操作的原因是:当有分片在集群重启过程中并没有发生更新,则跳过对这些分片的同步校验,提高分片恢复的速度
curl -XPOST "http://0.0.0.0:9200/_flush/synced?pretty"
步骤4-重启client-node节点
重启client-node组节点有小概率导致写入丢失(由于LB的轮询策略:当一个节点离线后,10s内不会再将请求分配到该节点。可以通过不要立即重启另外的client节点来避免此问题)
子步骤1--重启一个client-node组的节点
子步骤2--确认节点加入集群
通过命令查看集群状态和查看节点数
curl -XGET http://0.0.0.0:9200/_cluster/health?pretty
子步骤3--按照子步骤1-2重启剩余的client-node节点
步骤5-重启master节点
子步骤1--重启一个master-node的非master节点
子步骤2--确认节点加入集群
子步骤3--重复子步骤1-2重启剩余的非master节点
子步骤4--重复子步骤1-2重启剩余的master节点
子步骤5--检查master是否重新选举成功(30s后会开始选举:原因discovery.zen.ping_timeout:30s)
master选举过程中会堵塞写操作,对search无影响,堵塞API的操作
步骤6-重启data-node节点
子步骤1--重启一个data-node组的data-node节点
子步骤2--确认节点加入集群
子步骤3--重复子步骤1-2重启剩余的data节点
步骤7-启用分片分配
curl -X PUT http://0.0.0.0:9200/_cluster/settings?pretty -d '{"transient": {"cluster.routing.allocation.enable": "all"}}'