51工具盒子

依楼听风雨
笑看云卷云舒,淡观潮起潮落

ElasticSearch集群升级方案

# 前言 {#前言}

之前项目里用的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

检查数据是否正常,重新启动应用。

赞(1)
未经允许不得转载:工具盒子 » ElasticSearch集群升级方案