升级Elasticsearch集群版本
Elasticsearch集群的版本升级功能支持同版本升级、跨版本升级和跨引擎升级。
场景描述
升级场景
- 同版本升级是升级集群的内核补丁,用于修复问题或优化性能。
- 跨版本升级是升级集群的版本,用于功能加强或版本收编。
- 跨引擎升级是支持Elasticsearch集群升级至OpenSearch集群。
升级原理
升级过程采用的是one-by-one的方式,不会中断业务。升级时,先下线一个节点,将该节点的数据迁移到其余节点,再创建一个目标版本的新节点,将已下线节点的网卡port挂载到新节点,以此保留节点IP地址,待新节点加入到集群后,再依次将其余节点进行替换。当集群的数据量很大时,升级耗时将依赖数据迁移耗时。
升级流程
- 进行升级前检查:升级前检查
升级前检查大部分支持系统检查,少部分需要人工检查。
- 创建快照备份全量索引数据:手动创建快照
升级配置中支持选择进行全量索引快照备份检测,避免升级失败数据丢失。
- 创建升级任务,启动升级:创建升级任务
版本升级能力
当前版本 |
目标版本 |
---|---|
Elasticsearch:6.2.3 |
Elasticsearch:6.5.4,6.8.23 |
Elasticsearch:6.5.4 |
Elasticsearch:6.8.23 |
Elasticsearch:6.8.23 |
Elasticsearch:7.6.2,7.10.2 |
Elasticsearch:7.1.1 |
Elasticsearch:7.6.2,7.10.2 |
Elasticsearch:7.6.2 |
Elasticsearch:7.10.2 |
Elasticsearch:7.9.3 |
Elasticsearch:7.10.2 |
Elasticsearch:7.10.2 |
OpenSearch:1.3.6 |
说明:
|
约束限制
- 最多同时支持20个集群升级,建议在业务低峰期进行升级操作。
- 待升级的集群不能存在正在进行中的任务。
- 升级任务一旦启动就无法中止,直到升级任务的“任务状态”显示“失败”或“成功”才结束。
- 升级过程中,存在节点替换的过程,此时如果有请求发送到替换中的节点,请求可能会失败。为防止该情况出现,建议通过终端节点服务或者独享型负载均衡器接入集群进行访问。
- 升级过程中会重建Kibana和Cerebro组件,重建过程中,Kibana和Cerebro可能会访问失败。而且,由于不同Kibana版本相互不兼容,升级过程中Kibana还可能因为版本不兼容而无法访问。访问失败的问题,待集群升级成功后会自动恢复。
升级前检查
为了保证升级成功,需要做升级前检查,升级前检查主要包括如下事项:
检查项 |
检查方式 |
描述 |
正常状态 |
---|---|---|---|
集群状态 |
系统检查 |
升级任务启动后,系统会自动检查集群状态。集群状态为green或者yellow,表示集群可以正常提供服务,不存在未分配的主分片。 |
“集群状态”为“可用”。 |
节点个数 |
系统检查 |
升级任务启动后,系统会自动检查节点个数。为了保证业务的连续性,集群中数据节点和冷数据节点的个数之和要不小于3。 |
集群的数据节点和冷数据节点个数之和 ≥ 3 |
磁盘容量 |
系统检查 |
升级任务启动后,系统会自动检查磁盘容量。升级过程中会逐一下线节点再新建节点,需要保证单节点下线后,其余节点的磁盘容量能够接纳该节点的所有数据。 |
下线单节点后,剩余节点能够包含集群的所有数据。 |
数据副本 |
系统检查 |
检测集群中索引的最大主备分片数是否能够分配到剩余数据节点和冷数据节点中,防止升级过程中出现节点下线后副本无法分配的情况。 |
索引的主备分片数的最大值+1 ≤ 升级前的数据节点数和冷数据节点之和 |
数据备份 |
系统检查 |
升级前要做好数据备份,防止升级故障数据丢失。在提交升级任务时,可以选择是否需要系统检查全量索引的快照备份。 |
确认是否存在数据备份。 |
资源充足 |
系统检查 |
升级任务启动后,系统会自动检查资源。升级过程中会新建资源,需要保证有资源可用。 |
资源可用且配额充足。 |
自定义插件 |
系统检查+人工检查 |
历史版本的集群装有自定义插件才需要进行该项检查。如果集群装有自定义插件,则需要在插件管理界面上传目标版本的所有插件包,升级过程中才能将自定义插件转入新节点中,否则集群升级成功后,自定义插件将丢失。升级任务启动后,系统会自动检查是否已经上传自定义插件包,但是上传的插件包是否正确需要人工检查。
说明:
如果上传的插件包不正确或者不兼容将导致升级过程中无法自动安装插件包,升级任务会失败。如果需要恢复集群,可以终止升级任务,执行指定节点替换操作,修复当前升级失败的节点。 升级完成后,自定义插件对应的“插件状态”将会重置为“已上传”状态。 |
装有自定义插件的集群已经把对应版本的插件包上传到升级插件列表中。 |
自定义配置 |
系统检查 |
升级过程中,系统会自动同步集群配置文件“elasticsearch.yml”中的内容。 |
如果集群有自定义的参数配置,升级完成后,配置都未丢失。 |
非标操作 |
人工检查 |
确认是否存在非标操作。非标操作指的是没有被记录下来的手动操作,这些操作在升级过程中无法自动传递,比如“Kibana.yml”配置文件修改、系统配置、回程路由等。 |
有些非标操作是兼容的,例如安全插件的修改,可以通过元数据保留下来;系统配置修改,可以通过镜像的操作保留下来。但是有些非标操作例如“kibana.yml”文件修改就无法保留,需要提前备份。 |
兼容性检测 |
系统检查+人工检查 |
跨版本升级的升级任务启动后,系统会自动检测集群升级前后两个版本是否有不兼容配置。如果集群装有自定义插件,则自定义插件的版本兼容性需要人工检测。 |
跨版本升级时,升级前后没有不兼容的配置。 |
集群负载检测 |
系统检查+人工检查 |
当集群负载过高时,升级任务大概率会卡住或失败,建议升级前进行集群负载检测,选择在低负载的时候进行升级。 升级配置中也支持选择进行“集群负载检测”。 |
|
创建升级任务
- 登录云搜索服务管理控制台。
- 左侧导航栏选择“集群管理”,进入集群列表页面,单击目标集群名称,进入集群基本信息页面。
- 选择“版本升级”。
- 在升级页面,配置升级参数。
表3 升级参数说明 参数
描述
升级类型
- 同版本升级:升级集群的内核补丁,集群版本号不变。
- 跨版本升级:升级集群的版本,集群版本号升级。
- 跨引擎升级:Elasticsearch集群升级至OpenSearch集群,当前仅支持7.10.2版本Elasticsearch集群升级至1.3.6版本OpenSearch集群。
目标镜像
选择目标版本的镜像。选中镜像后,下方会显示镜像名称和目标版本的详细说明。
实际支持的目标版本请以升级页面中“目标镜像”的可选值为准。如果无法选择目标镜像,有如下几个原因:
- 当前集群已是最新版本集群。
- 当前集群是23年之前创建的旧集群,且存在向量索引。
- 当前局点暂未录入新版本镜像。
配置委托
删除节点会释放网卡,需要VPC的操作权限。选择IAM委托,授权当前账号访问和使用VPC的权限。
- 仅对接了IAM新平面时才显示该参数。
- 当首次配置委托时,可以单击“自动创建委托”新建委托“css-upgrade-agency”直接使用。
- 当已有自动创建的委托时,可以单击“委托一键授权”,删除委托中VPC Administrator系统角色和VPC FullAccess系统策略的权限,新增如下自定义策略授权委托到最小化权限。
"vpc:subnets:get", "vpc:ports:*"
- “自动创建委托”和“委托一键授权”需要如下最小权限。
"iam:agencies:listAgencies", "iam:roles:listRoles", "iam:agencies:getAgency", "iam:agencies:createAgency", "iam:permissions:listRolesForAgency", "iam:permissions:grantRoleToAgency", "iam:permissions:listRolesForAgencyOnProject", "iam:permissions:revokeRoleFromAgency", "iam:roles:createRole"
- 使用委托需要如下最小权限。
"iam:agencies:listAgencies", "iam:agencies:getAgency", "iam:permissions:listRolesForAgencyOnProject", "iam:permissions:listRolesForAgency"
- 配置完成后,单击“确认提交”。确认是否进行“全量索引快照备份检测”和“集群负载检测”,单击“确定”启动升级任务。
当集群负载过高时,升级任务大概率会卡住或失败。增加“集群负载检测”可以有效避免失败。
检测中如果出现以下四种情况,请等待或者主动降低负载。如果需求紧急且已了解升级失败风险,也可以不做“集群负载检测”。“集群负载检测”检测项包含:
- 最大search队列排队数小于1000(nodes.thread_pool.search.queue < 1000)
- 最大write队列排队数小于200(nodes.thread_pool.write.queue < 200)
- 最大cpu使用率小于90%(nodes.process.cpu.percent < 90)
- 最大load相对核数占比小于80%( nodes.os.cpu.load_average / cpu核数 < 80%)
- 在“任务记录”列表,显示当前升级任务。当“任务状态”为“运行中”时,可以展开任务列表,单击“查看进度”查看详细的升级进度。
当“任务状态”为“失败”时,可以重试任务或者直接终止任务。
- 重试升级:在任务列表的操作列,单击“重试”,重新升级。
- 终止升级:在任务列表的操作列,单击“终止”,结束升级。
- 同版本升级:当升级的“任务状态”为“失败”即可终止升级任务。
- 跨版本升级:当升级的“任务状态”为“失败”时,且没有任何节点升级成功的,才可以终止升级任务。
当升级任务终止后,集群的“任务状态”将清空“升级失败”的状态,相当于集群回退到升级前状态,不影响集群进行其他任务。