elasticsearch-6.8.5升级至6.8.22

elasticsearch-6.8.5升级至6.8.22

    • 滚动升级
      • 1. 禁用分片分配
      • 2. 停止非必要的索引并执行同步刷新
      • 3. 停止任何正在运行的机器学习作业
      • 4. 关闭单个节点
      • 5. 升级关闭的节点
      • 6. 升级所有插件
      • 7. 启动已升级的节点
      • 8. 重新启用分片分配
      • 9. 等待节点恢复
      • 10. 验证该节点是否已经完成版本升级
      • 11. 重新启动机器学习和作业
      • 12. 重复操作

为了解决apache log4j漏洞,需对elasticsearch6.8.5进行升级,升级至6.8.22版本后对应apache log4j版本为2.17.0。

有三种升级方式,滚动升级(rolling upgrades)、集群整体重启(full cluster restart upgrade)、重新索引(reindex)。

如果有其他插件或者组件,需要一并进行升级。

本说明采用滚动升级方式,滚动升级允许一次升级一个节点,因此升级不会中断服务。

以下升级步骤,仅限 6.x --> 6.y 升级(y>x)参考。

根据实际情况,替换以下内容:

elastic用户,默认是elastic

为elastic用户设置的密码

任一master节点ip

插件名称

集群名称

滚动升级

1. 禁用分片分配

关闭节点时,分配过程会等待(默认情况下为一分钟),然后才开始将该节点上的分片复制到集群中的其他节点,通过在关闭节点之前禁用副本分配来避免时钟争用。

curl -X PUT -u <username>:<password> "http://:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d '
{
  "persistent": {
    "cluster.routing.allocation.enable": "primaries"
  }
}
'

2. 停止非必要的索引并执行同步刷新

可以加快分片恢复速度。

curl -X POST -u <username>:<password> "http://:9200/_flush/synced?pretty"

3. 停止任何正在运行的机器学习作业

首先设置升级模式

curl -X POST -u <username>:<password> "http://:9200/_ml/set_upgrade_mode?enabled=true&pretty"

停止机器学习和作业,可以不做,但做了有好处。

停止机器学习

curl -X POST -u <username>:<password> "http://:9200/_xpack/ml/datafeeds/_all/_stop?pretty"

关闭所有作业

curl -X POST -u <username>:<password> "http://:9200/_xpack/ml/anomaly_detectors/_all/_close?pretty"

4. 关闭单个节点

关闭正在进行升级的节点。

如果服务是systemd管理:

systemctl stop elasticsearch.service

如果服务是init管理:

service elasticsearch stop

如果服务是daemon管理:

kill -9 $(ps -ef | grep elastic | grep -v grep | awk '{print $2}')

5. 升级关闭的节点

复制旧版本安装目录下的如data、config、logs、plugins等到新版本安装目录下,具体数据根据实际情况判断。

# 解压
tar -zxvf elasticsearch-6.8.22.tar.gz

# 将旧版本重命名
mv elasticsearch elasticsearch-6.8.5.bak

# 重命名新版本
mv elasticsearch-6.8.22 elasticsearch

# 拷贝文件,具体根据实际情况来
cp -ar elasticsearch-6.8.5.bak/data elasticsearch/
cp -ar elasticsearch-6.8.5.bak/logs elasticsearch/
cp -ar elasticsearch-6.8.5.bak/config elasticsearch/

6. 升级所有插件

升级节点后,必须升级所有插件。

./bin/elasticsearch-plugin install <plugin_name>

7. 启动已升级的节点

启动新升级的节点,并通过检查日志文件或提交请求来确认它已加入群集。

查看日志,验证是否加入集群,或有无报错。

tail -f -n 100 elasticsearch/logs/<cluster_name>.log

查看是否加入集群,及集群状态。

curl -X GET -u <username>:<password> "http://:9200/_cat/nodes?pretty"
curl -X GET -u <username>:<password> "http://:9200/_cluster/health?pretty"

8. 重新启用分片分配

curl -X PUT -u <username>:<password> "http://:9200/_cluster/settings?pretty" -H 'Content-Type: application/json' -d '
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}
'

9. 等待节点恢复

切记:在升级下一个节点之前,请等待集群完成分片分配,可以使用以下请求来查看进度。

curl -X GET -u <username>:<password> "http://:9200/_cat/health?v&pretty"

最后status转为green,表示所有主分片和副本都已分配。

恢复过程中可以使用以下请求来监控各个分片的恢复状态和进度。

curl -X GET -u <username>:<password> "http://:9200/_cat/recovery?pretty"

10. 验证该节点是否已经完成版本升级

再次确认状态。

curl -X GET -u <username>:<password> "http://:9200/_cat/health?v&pretty"

以下请求命令会显示节点ip、主机名、elastic版本号。

curl -X GET -u <username>:<password> "http://:9200/_cat/nodes?h=ip,name,version&v&pretty"

11. 重新启动机器学习和作业

如果在升级之前关闭了所有机器学习作业,则必须打开它们,如果没做,就不需要以下操作。

# 开启作业
curl -X POST -u <username>:<password> "http://:9200/_xpack/ml/anomaly_detectors/_all/_open?pretty" -H 'Content-Type: application/json' -d '
{
  "timeout": "35m"
}
'

# 开启机器学习
curl -X POST -u <username>:<password> "http://:9200/_xpack/ml/datafeeds/_all/_start?pretty" -H 'Content-Type: application/json' -d '
{
  "start": "2022-06-22T18:22:16Z"   # 数据馈送开始时间
}
'

更改升级模式,将其返回到活动状态。

curl -X POST -u <username>:<password> "http://:9200/_ml/set_upgrade_mode?enabled=false&pretty"

12. 重复操作

重复上述1-11步骤重复升级其他剩余节点。

你可能感兴趣的:(elasticsearch,elasticsearch,java,大数据)