一、项目背景
由于现有版本elasticsearch7.17.6版本存在retful漏洞,需要升级到7.17.14版本以上。这次打算直接升级到7.17.28版本。
1.版本升级路线确认
链接信息:Upgrade Elasticsearch | Elasticsearch Guide [7.17] | Elastic
2.准备升级
在开始升级之前,请务必仔细准备。一旦你拥有 started 要将集群升级到版本 7.17.28,您必须完成 升级。一旦集群包含版本 7.17.28 的节点,它就可以使 对其内部状态的更改,无法还原。如果您无法完成 升级后,您应该丢弃部分升级的集群,部署 空集群,并从 快照。
在开始将集群升级到版本 7.17.28 之前,您应该执行 以后。
- 检查弃用日志,看看你是否正在使用任何 已弃用的功能,并相应地更新您的代码。
- 查看重大更改并进行任何必要的更改 对版本 7.17.28 的代码和配置进行更改。
- 如果您使用任何插件,请确保每个插件都有一个版本 与 Elasticsearch 版本 7.17.28 兼容。
- 在升级生产环境之前,在隔离环境中测试升级 簇。
- 通过拍摄快照来备份您的数据!
二、升级步骤
1.确认目前elasticsearch集群的节点情况,优先升级数据节点,最后升级主节点。
GET _cat/nodes
2.关闭集群重分配
curl -u elastic:xxxx -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d' { "persistent": { "cluster.routing.allocation.enable": "primaries" } } '
在某一台数据节点执行此操作,单个节点不存在副本的分配,但是多个节点的集群环境,当一个节点关闭后,相关的分片会重新分配,并产生大量的磁盘IO。
3.关闭单个节点
kill -9 $(cat pid) 或
systemctl stop elastic
具体看环境吧
4.升级您关闭的节点
解压elasticsearch-7.17.28.tar.gz
tar -xf elasticsearch-7.17.28.tar.gz -C /path/
拷贝配置文件。
cp -r ./elasticsearch-7.17.6/config/ ./elasticsearch-7.17.28/
拷贝7.17.6版本下的path.data路径内容到7.17.28版本(具体看数据量,可以拷贝时间过长)
cp -r ./elasticsearch-7.17.6/data ./elasticsearch-7.17.28/
拷贝完,更新一下用户和用户组权限
chown -R elastic:elastic elasticsearch-7.17.28
5.升级任何插件
在线升级
#原集群只安装了中文分词 IK 插件,所以要先卸载该插件
./bin/elasticsearch-plugin remove analysis-ik
#在新目录执行此操作7.17.28版本
./bin/elasticsearch-plugin install analysis-ik l
离线升级
下载和版本一样的插件
解压安装新版本插件,例如ik分词器
unzip elasticsearch-analysis-ik-7.17.28.zip -d /path/elasticsearch/plugins/ik
6.启动升级后的节点
#启动es,具体参数看你的环境
/path/elasticsearch/bin/elasticsearch -d -e xxx
#启动新升级的节点,并通过检查 日志文件或通过提交请求:_cat/nodes
curl -X GET "localhost:9200/_cat/nodes?pretty"
7.重新启用分片分配
对于数据节点,节点加入集群后,删除设置以启用分片分配并启动 使用节点:cluster.routing.allocation.enable.
# kibana
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
# shell
curl -u elastic:passwd -X PUT "localhost:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d'
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
'
8.等待节点恢复
在升级下一个节点之前,请等待集群完成分片分配。 您可以通过提交 请求来检查进度:
curl -u elastic:passwd -X GET "localhost:9200/_cat/health?v=true&pretty"