ES滚动升级方案

前言

为了修复 Log4j 的漏洞,采用升级ES版本的方式解决问题,整个过程为滚动升级不会影响到线上的正常使用。


一、升级版本

旧版本:V7.8.1

新版本:V7.16.2,修复Log4j方式为升级log4j jar到v2.17.0

二、准备工作

1.环境搭建

在目标主机上准备好ES V7.16.2的环境配置工作,准备完成后等待滚动重启。

2.查看分片

找出集群中只有一个shard的Index,避免滚动升级时数据丢失,如果该index存储的消息不重要可忽略,反之当更新到当前node时需要将该shard迁移到其它node上去。

GET /_cat/shards?v

index:索引名称
shard:分片数
prirep:分片类型,p:primary为主分片,r:replicas为复制分片
state:分片状态,STARTED为正常分片,INITIALIZING为异常分片
docs:记录数
store:存储大小
ip:es节点ip
node:es节点名称

三、滚动升级

1.禁用分片分配

升级集群,没有必要让节点上的 shard 进行 reallocation,避免 IO。设置只允许 新 index 的主分片分配。

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": "new_primaries"
  }
}
 
all - 默认的,允许所有shards分配
primaries - 只允许主分片分配
new_primaries - 只允许新index的主分片分配
none - 所有的都不允许

2.禁止同步更新。

停止非必要的索引并执行synced-flush,分片恢复会快得多 。

POST _flush/synced

3.迁移数据

迁移目标node上的index数据到新的node上去,避免数据丢失

1:关闭ES rebalance,停止当前Node上的shard被均衡到其他机器上,避免造成不必要的IO
PUT _cluster/settings?pretty
{
  "transient" : {
    "cluster.routing.rebalance.enable" : "none"
  }
}

2:迁移数据,通过下列命令将指定的 index 迁移到指定 Node,等待当前Node上的单副本 index 都迁移完成后再停止Node
PUT ${indexName}/_settings
{
    "index.routing.allocation.exclude._ip": "xxx.xxx.xxx.xxx" //当前需要升级的Node ip
}

3:查看数据迁移进度
GET _cat/shards/${indexName}?v&s=ip:asc

4.更新节点

根据各自的部署方式来停止旧的节点,启动新的节点 ,最后查看新节点是否加入集群。

GET _cat/nodes

5.重启分片分配

节点加入集群后,设置重新启用分片分配并开始使用该节点

PUT _cluster/settings
{
  "persistent": {
    "cluster.routing.allocation.enable": null
  }
}

 6.等待节点恢复

1:在升级下一个节点之前,请等待集群完成分片分配。您可以通过提交_cat/health请求来检查进度,直到集群恢复green,这个过程根据分片数量的多少,需要消耗一定的时间
GET _cat/health?v
 
2:未同步刷新的碎片可能需要更长的时间才能恢复。您可以通过提交_cat/recovery请求来监视各个分片的恢复状态
GET _cat/recovery

 6.重复滚动更新

当节点恢复并且集群稳定后,对每个需要更新的节点重复这些步骤。_cat/health您可以通过请求监控集群的运行状况

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值