升级OpenSearch集群版本
CSS服务支持升级OpenSearch集群版本,满足不同业务场景下的版本优化、功能增强等需求。
升级类型 |
适用场景 |
升级流程 |
---|---|---|
同版本升级 |
升级集群的内核补丁。集群升级至当前版本的最新镜像,用于修复问题或优化性能。例如,集群版本为“1.3.6(1.3.6_24.3.3_0102)”,同版本升级后,集群版本会升级到1.3.6版本最新的镜像“1.3.6(1.3.6_24.3.4_0109)”(版本号仅做示例,非现网实际版本号)。 |
升级过程采用的是one-by-one的方式,不会中断业务。 |
跨版本升级 |
升级集群的版本。集群升级至目标版本的最新镜像,用于功能加强或版本收编。例如,集群版本为“1.3.6(1.3.6_24.3.3_1224)”,跨版本升级后,集群版本会升级到2.17.1版本最新的镜像“2.17.1(2.17.1_24.3.4_0109)”(版本号仅做示例,非现网实际版本号)。 |
约束限制
- 最多同时支持20个集群升级。
- 升级过程涉及数据迁移,单个节点的数据迁移的超时阈值为48小时,超时将导致升级失败。当集群数据量大时,建议手动调整数据迁移速率,避免在业务高峰期操作。
- 暂不支持从OpenSearch 1.3.6升级到OpenSearch 2.17.1。
升级影响
在进行集群版本升级前,您需要了解以下关键影响和操作建议,以便合理规划升级,确保升级过程平滑且对业务影响最小。
- 性能影响
升级采用逐个节点滚动进行,确保业务不中断。但该过程中的数据迁移会消耗IO性能,且单节点下线可能影响集群性能。
建议在业务低峰期提高数据迁移速率以缩短任务耗时,并在业务高峰期前降低迁移速率以减轻对集群性能的影响。数据迁移速率由“indices.recovery.max_bytes_per_sec”参数决定,该参数值默认是“CPU核数 x 32MB”(如4核CPU默认128MB)。该参数取值范围为40MB至1000MB,可根据业务需求调整。PUT /_cluster/settings { "transient": { "indices.recovery.max_bytes_per_sec": "1000MB" } }
- 请求处理影响
升级过程中,节点替换可能导致发送到该节点的请求可能会失败。为了降低影响可以采用如下措施:
- 通过终端节点服务或独享型负载均衡器访问集群,确保请求自动路由到可用节点。
- 在客户端实现指数退避重试机制(建议配置3次重试)。
- 在业务低峰期进行升级。
- OpenSearch Dashboards和Cerebro组件重建
升级会重建OpenSearch Dashboards和Cerebro,可能导致暂时无法访问。由于不同OpenSearch Dashboards版本不兼容,升级期间OpenSearch Dashboards可能因版本问题无法使用。这些问题在集群升级成功后会自动恢复。
- 升级过程特性
升级任务一旦启动就无法中止,直到任务成功或失败才会结束。任务失败通常只影响单个节点,在有副本的情况下业务不受影响。如有需要可以通过替换OpenSearch集群指定节点修复当升级失败的节点。
升级时长
集群升级时长的估算公式如下:
升级时长(分钟)= 15(分钟)x 节点总个数 + 数据迁移时长(分钟)
其中:
- 15分钟为初始化、升级镜像等非数据迁移操作的基准耗时,是经验值。
- 节点总个数是集群的数据节点、Master节点、Client节点和冷数据节点数量之和。
数据迁移时长(分钟)= 数据总量(MB)÷ [ 数据节点的CPU核数 x 32(MB/s)x 60(秒)x 并发度 ]
其中:
- 当并发度大于1时,实际迁移速率受集群负载影响,实际迁移速率只能达到并发度一半的提升效果。
- 32MB/s表示每个CPU核每秒可处理32MB数据,是经验值。
以上公式为理想状态下的理论估算值,建议在实际计算时增加20%-30%的冗余时间。
升级前检查
为了保证升级成功,需要做升级前检查,升级前检查主要包括如下事项:
检查项 |
检查方式 |
描述 |
正常状态 |
---|---|---|---|
集群状态 |
系统检查 |
升级任务启动后,系统会自动检查集群状态。集群状态为green或者yellow,表示集群可以正常提供服务,不存在未分配的主分片。 |
“集群状态”为“可用”,且不存在正在进行中的任务。 |
节点个数 |
系统检查 |
升级任务启动后,系统会自动检查节点个数。为了保证业务的连续性,集群在每个AZ中同类型节点数必须大于或等于2,有Master节点的集群必须保证数据节点数大于或等于2,没有Master节点的集群必须保证数据节点数和冷数据节点数之和大于或等于3。 |
|
磁盘容量 |
系统检查 |
升级任务启动后,系统会自动检查磁盘容量。升级过程中会逐一下线节点再新建节点,需要保证单节点下线后,其余节点的磁盘容量能够接纳该节点的所有数据,且磁盘使用率小于80%。 |
下线单节点后,剩余节点能够包含集群的所有数据,且磁盘使用率小于80%。 |
数据副本 |
系统检查 |
检测集群中索引的最大主备分片数是否能够分配到剩余数据节点和冷数据节点中,防止升级过程中出现节点下线后副本无法分配的情况。 |
数据节点数+冷数据节点数>索引副本数的最大值+1 |
数据备份 |
系统检查 |
升级前要做好数据备份,防止升级故障数据丢失。在提交升级任务时,可以选择是否需要系统检查全量索引的快照备份。 |
确认是否存在数据备份。 |
资源充足 |
系统检查 |
升级任务启动后,系统会自动检查资源。升级过程中会新建资源,需要保证有资源可用。 |
资源可用且配额充足。 |
自定义插件 |
系统检查+人工检查 |
历史版本的集群装有自定义插件才需要进行该项检查。如果集群装有自定义插件,则需要在插件管理界面上传目标版本的所有插件包,升级过程中才能将自定义插件转入新节点中,否则集群升级成功后,自定义插件将丢失。升级任务启动后,系统会自动检查是否已经上传自定义插件包,但是上传的插件包是否正确需要人工检查。
说明:
如果上传的插件包不正确或者不兼容将导致升级过程中无法自动安装插件包,升级任务会失败。如果需要恢复集群,可以终止升级任务,执行替换OpenSearch集群指定节点操作,修复当前升级失败的节点。 升级完成后,自定义插件对应的“插件状态”将会重置为“已上传”状态。 |
装有自定义插件的集群已经把对应版本的插件包上传到升级插件列表中。 |
自定义配置 |
系统检查 |
升级过程中,系统会自动同步集群配置文件“opensearch.yml”中的内容。 |
如果集群有自定义的参数配置,升级完成后,配置都未丢失。 |
非标操作 |
人工检查 |
确认是否存在非标操作。非标操作指的是没有被记录下来的手动操作,这些操作在升级过程中无法自动传递,比如“opensearch_dashboards.yml”配置文件修改、系统配置、回程路由等。 |
有些非标操作是兼容的,例如安全插件的修改,可以通过元数据保留下来;系统配置修改,可以通过镜像的操作保留下来。但是有些非标操作例如“opensearch_dashboards.yml”文件修改就无法保留,需要提前备份。 |
兼容性检测 |
系统检查+人工检查 |
跨版本升级的升级任务启动后,系统会自动检测集群升级前后两个版本是否有不兼容配置。如果集群装有自定义插件,则自定义插件的版本兼容性需要人工检测。 |
跨版本升级时,升级前后没有不兼容的配置。 |
集群负载检测 |
系统检查+人工检查 |
当集群负载过高时,升级任务大概率会卡住或失败,建议升级前进行集群负载检测,选择在低负载的时候进行升级。 升级配置中也支持选择进行“集群负载检测”。 |
|
执行升级任务
- 登录云搜索服务管理控制台。
- 在左侧导航栏,选择“集群管理 > OpenSearch”。
- 在集群列表,单击目标集群名称,进入集群详情页。
- 选择“集群快照”页签,参考手动创建快照备份全量索引数据。
创建升级任务时支持选择进行全量索引快照备份检测,避免升级失败数据丢失。
- 选择“版本升级”页签,在升级页面,配置升级参数。
表3 升级参数说明 参数
说明
升级类型
选择升级类型。
- 同版本升级:升级集群的内核补丁,集群升级至当前版本的最新镜像。
- 跨版本升级:升级集群的版本,集群升级至目标版本的最新镜像。
目标镜像
选择目标版本的镜像。选中镜像后,下方会显示镜像名称和目标版本的详细说明。
实际支持的目标版本请以升级页面中“目标镜像”的可选值为准。如果无可选择目标镜像,有如下几个原因:
- 当前集群已是最新版本集群。
- 当前集群是23年之前创建的旧集群,且存在向量索引。
- 当前局点暂未录入新版本镜像。
- 当前集群不支持该类型的升级。
配置委托
升级节点时需重新绑定网卡,当前账号需具备VPC资源的使用权限。通过配置IAM委托,使当前账号授权CSS服务访问其拥有的VPC资源。- 当首次配置委托时,可以单击“自动创建委托”新建委托“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%)
如检测异常,请等待负载降低或主动优化后再升级。
- 设置“数据迁移并发度”。
提升数据迁移并发度可以加快升级进程,但是数据迁移会消耗IO性能,并发迁移数据节点越多,集群负载越高,会导致集群性能受影响。建议按需设置合适的并发度,推荐保持默认值1(节点),最大值小于数据节点数量的一半。
- 选择是否启用“全量索引快照备份检测”。
- 配置完成后,单击“确定”启动升级前检测,系统会基于升级前检查进行检测,检测通过后直接启动升级任务。
如果升级检测未通过,页面右上方将会显示错误信息,请根据提示调整集群配置后再升级。
图1 检测失败的错误信息当下方任务记录列表的“任务状态”为“成功”时,表示升级完成。
- 升级完成后,确认操作结果。
- 在集群列表,单击目标集群名称,进入集群详情页。
- 选择“概览”页签,在“基本信息”下方查看集群版本,确认是否升级成功。
图2 查看集群版本
查看升级任务
在升级页面的“任务记录”列表,可以查看当前升级任务。
展开任务列表,单击“查看进度”查看详细的升级进度。
当“任务状态”为“失败”时,可以重试任务或者直接终止任务。
- 重试升级:在任务列表的操作列,单击“重试”,重新升级。
- 终止升级:在任务列表的操作列,单击“终止”,结束升级。
当升级任务终止后,升级失败的节点会维持当前状态,而升级成功的节点不会回退到旧版本。因此,终止升级可能导致集群中存在多个版本(部分节点为旧版本,部分节点为新版本)。建议在处理完问题后尽快重新启动升级,以确保所有节点版本一致,避免影响业务稳定性。
执行跨版本升级时,当系统显示“任务状态”为“失败”,必须验证所有节点均未成功升级,方可终止升级任务。