Elasticsearch从2010年发布第一个版本起,以其快节奏的迭代速度迅速发展,当前已发布到7.1.0版本。其快节奏的迭代速度,也已使得集群升级成为Elasticsearch使用过程中很重要的一个话题。本文通过实际操作的方式,记录了一次6.5.1版本集群升级到6.7.1的过程,希望能为大家进行集群升级提供参考。
参考官方文档[Upgrade Elasticsearch],不同版本的升级方式参考下表
原版本 | 升级版本 | 升级方式 |
---|---|---|
5.x | 5.y | Rolling upgrade (where y > x) |
5.6 | 6.x | Rolling upgrade |
5.0-5.5 | 6.x | Full cluster restart |
<5.x | 6.x | Reindex to upgrade |
6.x | 6.y | Rolling upgrade (where y > x) |
注意从5.x升级到6.x时,需要删除或者reindx 2.x创建的索引
本次升级是从6.5.1升级到6.7.1,因此直接使用滚动升级即可,升级过程参考:参考:https://www.elastic.co/guide/en/elasticsearch/reference/6.7/rolling-upgrades.html
提前准备好升级包,可以减少节点升级操作时间,降低升级风险和耗时。
升级过程中需要不断地观察集群状态,以确定是否可以继续进行升级操作。Kibana提供的集群监控可以很方便的查看集群和节点状态。正常情况下集群的状态如下图:
确认集群的健康状态是Green, 各节点均处于online状态,无未分配shard
另外需要注意,由于采用滚动升级的方式,因此建议至少为集群中集群的副本数量至少为1,否则集群重启过程中会出现集群red的情况
每个节点以此进行下面步骤
1.Disable shard allocation. 由于节点在离开后会很快再加入集群,因此临时将分片分配设置为仅主节点可以减少不必要的数据迁移,并加快节点恢复速度。
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
2.Stop non-essential indexing and perform a synced flush. (Optional). 在集群升级过程汇总尽量减少不必要的索引操作,并在重启节点时执行一次flush,可以减少节点恢复时间。
POST _flush/synced
查看结果中是否有失败内容,如果有的话重试,直到没有错失败结果为止
3.停止ML job
4.停止原Elasticsearch进程
kill $(cat pid)
通过kibana可以看到关闭的节点处于offline状态,集群变为yellow状态,并出现未分配shard
5.启动新节点
./bin/elasticsearch -d -p pid
查看kibana监控等待节点状态变为online
可以看到集群此时仍处于yellow状态,并仍存在未分配shard
6.Enable shard allocation
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
等待集群状态变为Green, 未分配shard数降低为0, 该节点即升级成功,可以进行下一个节点的升级
为了保证kibana与ES之间的兼容性,在升级完ES之后建议同步升级Kibana,kibana升级参考:
https://www.elastic.co/guide/en/kibana/6.7/upgrade.html
https://www.elastic.co/guide/en/kibana/6.7/upgrade-standard.html
操作步骤如下
ps -ef|grep node
并kill如下命令对应的进程
./bin/../node/bin/node --no-warnings --max-http-header-size=65536 ./bin/../src/cli
5.启动新的kibana
先直接启动查看是否ok
./bin/kibana
确认没有问题后,停止,并使用下面命令后台启动
nohup ./bin/kibana >/dev/null 2>&1 &
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。