# 前言 {#前言}
之前项目里用的ES一直是7.6.2版本,后来得到通知需要将集群升级到7.17.13,因此写下这篇文章做个记录。
# 前期准备 {#前期准备}
升级版本:7.6.2 -> 7.17.13
机器数量:三台Linux服务器组成的集群
下载:https://www.elastic.co/cn/downloads/past-releases#elasticsearch (opens new window)
在上面的官网中下载7.17.13版本tar包
参考文档:https://www.elastic.co/guide/en/elasticsearch/reference/7.17/restart-upgrade.html (opens new window)
在官方文档中提供了滚动升级和停止后的升级,本次升级采用全部停止后的升级。
# 应用依赖升级 {#应用依赖升级}
maven依赖从7.6.2升级到7.17.13
<dependency>
<groupId>org.elasticsearch.client<groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.17.13</version>
</dependency>
1
2
3
4
5
有一些类的位置在这个版本发生了变化,对于编译报错的类换成新的import就行。
# 服务迁移 {#服务迁移}
# 关闭应用 {#关闭应用}
首先把所有用到ES的应用全部关闭。
# 禁用分片分配 {#禁用分片分配}
当关闭数据节点时,分配过程将等待 index.unassigned.node_left.delayed_timeout
(默认为一分钟)并将该节点上的分片复制到集群中的其他节点, 这可能涉及大量 I/O。由于该节点很快就会重新启动后,此 I/O 是不必要的
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": "primaries"
}
}
1
2
3
4
5
6
# 停止索引并执行同步刷新 {#停止索引并执行同步刷新}
POST _flush/synced
1
如果执行失败需要重新再执行一次
# 关闭所有节点 {#关闭所有节点}
首先通过下面的命令找到es对应的进程号
ps -ef | grep elasticsearch
1
接着执行kill命令
kill <PID>
1
# 部署新的ES服务 {#部署新的es服务}
将文件上传到和原本ES7.6.2的同级目录,执行解压缩命令
tar -xvf elasticsearch-7.17.13-linux-x86_64.tar.gz
1
接着将原来ES路径下config文件复制到新的路径下
cp -rf elasticsearch/config/* elasticsearch-7.17.13/config
1
在另外的两台服务器上也执行同样的操作。
这里需要注意elasticsearch.yml文件中的data地址和logs地址是否是绝对路径,如果是相对路径需要手动调整。
# 启动新的ES {#启动新的es}
进入新的ES目录下,执行下面的启动命令
./bin/elasticsearch -d
1
在页面上访问IP:9200,如果出现You Know,for Search则代表成功
# 重新启用分片 {#重新启用分片}
PUT _cluster/settings
{
"persistent": {
"cluster.routing.allocation.enable": null
}
}
1
2
3
4
5
6
检查数据是否正常,重新启动应用。