date: 2020-05-28title: es全集群重启和滚动重启 #标题
tags: 重启es集群 #标签
categories: elastic stack # 分类
在某些情况下,可能需要执行全集群重新启动或滚动重新启动。在完全集群重新启动的情况下,是关闭并重新启动集群中的所有节点,而在滚动重新启动的情况下,一次只关闭一个节点,因此服务保持不中断。
全集群重启
禁用shard分配
当关闭一个节点时,集群开始将该节点上的shard(分片)复制到集群中的其他节点上,这会涉及大量1/O操作。但因为节点很快就要重新启动,所以这个I/0是不必要的。我们可以通过在关闭节点之前禁用副本分配:
接下来的put、post等操作均是在kibana的开发者工具里的控制台进行的,如下:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
上述操作也可以在命令行中这样执行:
curl -XGET "http://es1:9200/_cat/nodes"
停止索引并执行同步刷新
执行同步刷新可以加速碎片恢复。
POST _flush
注:在7.x以下的版本,请执行POST _flush/synced
进行刷新同步。
请确保刷新成功,返回结果如下:
如果没有成功,请继续刷新操作。
停止机器学习
机器学习功能需要付费,要白金用户的许可。所以如果你是普通的es集群,那么可以略过这步了。
POST _ml/set_upgrade_mode?enabled=true
停止集群中所有节点
至此,你就可以执行下面的操作停止集群中的所有节点了(不同的安装方式或操作系统上可能不太一样,我这里是centos 7使用tar.gz包安装的集群)
$ ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9
执行你要进行的操作
至此,es集群就全部停止了,你现在可以执行所要进行的操作了,执行完成后,再看下面的操作,将es集群启动起来。
重启es集群
如果你有专有的master节点,请先启动master节点,等待它形成集群,然后再继续启动其他数据节点。可以通过查看日志来检查进度。
# 先启动master节点
$ su -s /bin/bash -c "/usr/local/es/bin/elasticsearch -p /data/es/es.pid -d" es
当查看master节点的日志,发现输出cluster的uuid,则表示集群已形成,具体输出如下:
等待所有节点加入集群并报告状态为黄色
查询集群健康状态或者节点状态
GET _cat/health
GET _cat/nodes
注:集群状态为yellow是正常的。因为我们还没有启用shard分配。
重新启用shard分配
当所有节点都加入集群并恢复它们的主分片时,通过恢复cluster.routing.allocation来重新启用分配。执行指令如下:
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
返回如下:
{
"acknowledged" : true,
"persistent" : { },
"transient" : { }
}
再次查看集群及节点状态
GET _cat/health
返回如下:
1590574353 10:12:33 my-es green 3 2 14 7 0 0 0 0 - 100.0%
重启机器学习
如果你需要开启机器学习,那么还需要重启它。如下:
POST _ml/set_upgrade_mode?enabled=false
滚动重启
禁用分片
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
执行同步刷新
POST _flush/synced
注:在7.x版本以上的版本,建议使用POST _flush/
即可。
停止机器学习(可选)
POST _ml/set_upgrade_mode?enabled=true
如果执行滚动重新启动,可以在关闭机器学习节点时让机器学习作业继续运行,该节点的作业将自动移动到另一个节点并恢复模型状态。,但会增加集群的负载。
关闭单个节点
此时,就可在终端上关闭单个节点了。
$ ps -ef | grep elasticsearch | grep -v grep | awk '{print $2}' | xargs kill -9
修改配置并重启节点
配置修改后,即可启动节点了,并执行下面的指令来检查节点状态。
GET _cat/nodes
再次开启分片分配
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
重新启动机器学习(可选)
如果你之前停止了机器学习,那么此时可以启动它了。
POST _ml/set_upgrade_mode?enabled=false
在重新启动滚动时重复上述操
当节点恢复并且集群稳定时,为需要更改的每个节点重复上面这些步骤。