elasticsearch集群重启一般采用滚动重启方案。即每次重启一个节点,等该节点重启完成后,再重启下一个节点,直到所有节点重启完成。
1、尽可能停止集群的数据写入,当然在生产环境中,这一点很难做到,所以应该尽量选择数据写入的低峰期重启,以缩短重启时间。
2、关闭自动再平衡功能,这样做的目的在于当集群shutdown之后可以快速的启动。这个参数默认是开启的,默认情况下当实例启动时,会尝试从其他节点实例上拷贝相关的shard副本至本地,这样会浪费大量的时间和耗费高额的IO资源。如果自动再平衡选项关闭了,那么当新的实例启动,尝试加入集群的时候,它不会从其他实例上拷贝shard副本。
PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"none"
}
}
3、完成一些重启前的操作,比如修改配置,更新插件等等。如果只是单纯的重启,跳过此步。
4、关闭一个节点(head或者命令行:curl -XPOST ‘http://192.168.1.1:9200/_cluster/nodes/_local/_shutdown)
5、开启该节点,可以通过supervise自动开启,如果没有配置守护进程,也可以通过命令行开启:./elasticsearch >/dev/null 2>&1 &
6、es进程起来后,打开再平衡功能
7、PUT /_cluster/settings
{
"transient": {
"cluster.routing.allocation.enable":"all"
}
}
8、完成数据同步,这个过程需要一定的时间,等集群的状态变成green,数据同步完成。
9、操作下一个节点,重复2-8的操作,直到所有节点完成重启。
10、可选,如果之前有停止数据写入,这时可以重新开启数据写入
11、可选,关闭所有节点的自动再平衡功能,防止因意外重启事件造成系统资源消耗飙升。