• elasticsearch-6.8.5升级至6.8.22


    为了解决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"
      }
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

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

    可以加快分片恢复速度。

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

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

    首先设置升级模式

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

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

    停止机器学习

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

    关闭所有作业

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

    4. 关闭单个节点

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

    如果服务是systemd管理:

    systemctl stop elasticsearch.service
    
    • 1

    如果服务是init管理:

    service elasticsearch stop
    
    • 1

    如果服务是daemon管理:

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

    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/
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

    6. 升级所有插件

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

    ./bin/elasticsearch-plugin install <plugin_name>
    
    • 1

    7. 启动已升级的节点

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

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

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

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

    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"
    
    • 1
    • 2

    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
      }
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    9. 等待节点恢复

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

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

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

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

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

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

    再次确认状态。

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

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

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

    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"   # 数据馈送开始时间
    }
    '
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13

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

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

    12. 重复操作

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

  • 相关阅读:
    C 嵌入式系统设计模式 17:静态优先级模式
    基于蒙特卡洛的大规模电动汽车充电行为分析(Matlab代码实现)
    深度学习零基础学习之路——第四章 UNet-Family中Unet、Unet++和Unet3+的简介
    反激变压器计算方法_笔记
    学生选课系统0级流程图和ER图应该怎么画
    Java线程之间通信方式
    Python+requests+pytest+excel+allure 接口自动化测试实战
    关于我对线程安全问题中死锁的理解
    6、Linux驱动开发:设备-更简单的设备注册
    算法-贪心算法-简单-买卖股票的最佳时机
  • 原文地址:https://blog.csdn.net/u011143903/article/details/125404457