资讯详情

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)参考。

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

<username> elastic用户,默认是elastic

<password> 为elastic用户设置的密码

<master_ip> 任一master节点ip

<plugin_name> 插件名称

<cluster_name> 集群名称

滚动升级

1. 禁止分片分配

关闭节点时,将等待分配过程(默认为一分钟),然后开始将节点上的分片复制到集群中的其他节点,并在关闭节点前禁止副本分配,以避免时钟纠纷。

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

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

可加快分片恢复速度。

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

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

首先设置升级模式

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

停止机器学习和作业,不能做,但做得好。

停止机器学习

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

关闭所有作业

curl -X POST -u <username>:<password> "http://<master_ip>: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. 关闭节点升级

复制旧版本的安装目录ata、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://<master_ip>:9200/_cat/nodes?pretty"
curl -X GET -u <username>:<password> "http://<master_ip>:9200/_cluster/health?pretty"

8. 重新启用分片分配

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

9. 等待节点恢复

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

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

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

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

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

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

再次确认状态。

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

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

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

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

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

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

# 开启机器学习
curl -X POST -u <username>:<password> "http://<master_ip>: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://<master_ip>:9200/_ml/set_upgrade_mode?enabled=false&pretty"

12. 重复操作

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

标签: 16z二极管丝印

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台