美文网首页Elastic Search程序员
Elasticsearch集群重启及滚动升级步骤和官网命令改进

Elasticsearch集群重启及滚动升级步骤和官网命令改进

作者: 唯米天空 | 来源:发表于2020-09-07 02:21 被阅读0次

参考:https://www.elastic.co/guide/en/elasticsearch/reference/current/restart-cluster.html

ES集群实际使用中,如果按照官网文档操作,在单个节点操作过程中,会出现分片重新分配的情况。本文对官网的步骤参数进行了修正,使用了transient和persistent结合的方式,不会引发分片重新分配。

1. 关闭ES集群

1.1. 禁止分片自动分布

curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
    "persistent" : {
        "cluster.routing.allocation.enable" : "none"
    },    
    "transient" : {
        "cluster.routing.allocation.enable" : "none"
    }
}
'

1.2. 执行同步刷新

curl -X POST "localhost:9200/_flush/synced"

1.3. 关闭各节点

发送TERM信号关闭进程

kill <pid>

2. 启动ES集群

2.1. 依次启动

nohup /opt/elasticsearch/bin/elasticsearch >> /dev/null 2>&1 &

2.2. 查看集群状态是否正常(green)

通过命令或者head界面查看。

命令:

curl -XGET "http://localhost:9200/_cat/health"
curl -XGET "http://localhost:9200/_cat/nodes"

2.3. 启用分片自动分布

    curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
    {
        "persistent" : {
            "cluster.routing.allocation.enable" : "none"
        },    
        "transient" : {
            "cluster.routing.allocation.enable" : "all"
        }
    }
    '

2.4. 查看集群状态和分片情况

curl -XGET "http://localhost:9200/_cat/health"
curl -XGET "http://localhost:9200/_cat/recovery"

3. 错误操作

如果集群未设置persistent的自动分配分片参数,则不要只使用persistent来关闭自动分配分片,在整个集群重启之前,不生效,会导致在单个节点关闭的情况下,分片迁移到其他节点。要同时设置transient,保证既在单个节点关闭的情况下,分片不会重新分配,也能保证集群重启后,分片不会重新分配。

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

可以看到,整个集群未关闭重启的情况下,某个节点的重启日志,cluster.routing.allocation.enable并未生效:

[2020-09-07T01:21:44,679][INFO ][o.e.c.s.ClusterSettings  ] [es-node-3] updating [cluster.routing.allocation.enable] from [ALL] to [all]
[2020-09-07T01:21:44,679][INFO ][o.e.c.s.ClusterSettings  ] [es-node-3] updating [cluster.routing.rebalance.enable] from [ALL] to [none]

整个集群重启后,这个persistence才生效。

[2020-09-07T01:35:30,610][INFO ][o.e.c.s.ClusterSettings  ] [es-node-3] updating [cluster.routing.allocation.enable] from [ALL] to [none]

5. 滚动升级或者单个节点维护

使用transient方式关闭分片自动分配即可。

curl -X PUT "localhost:9200/_cluster/settings" -H 'Content-Type: application/json' -d'
{
    "persistent" : {
    },    
    "transient" : {
        "cluster.routing.allocation.enable" : "none"
    }
}
'

节点重启后,分片仍会处于unsigned状态,开启分片自动分配后,unsigned的分片就会立刻在被重启的节点上生效。

相关文章

网友评论

    本文标题:Elasticsearch集群重启及滚动升级步骤和官网命令改进

    本文链接:https://www.haomeiwen.com/subject/tctkektx.html