SuperAPI AI 工具集

huawei-cloud-rds-mysql-replica-promotion

部署与运维

查看项目

更新于 11-02 04:01

技能介绍

用途

本技能用于将华为云 RDS for MySQL 单机实例转换为主备(HA)实例,以降低单实例部署带来的风险。转换通过 hcloud(KooCLI)命令行工具完成,整个流程包含严格的前置条件检查、可选的转换前手动备份、转换任务轮询和结果验证。由于该转换不可逆,工作流在执行变更步骤前要求用户明确确认,并提前展示转换的风险与影响。

前置条件

  • Python >= 3.9
  • hcloud >= 7.2.2,且已配置 AKSK 认证(hcloud configure init)
  • 目标 RDS for MySQL 实例当前必须为 ACTIVE 状态的单机(Single)实例

工作流步骤

工作流提供了一份可复制的检查清单,共 11 个步骤:

  • Step 0:风险披露与确认
  • Step 1:环境检查
  • Step 2:区域确认(可选)
  • Step 3:实例发现与选择(可选)
  • Step 4:可用区发现与选择(可选)
  • Step 5:前置条件检查
  • Step 6:成本评估
  • Step 7:转换前监控基线
  • Step 8:执行单机转主备
  • Step 9:结果确认与监控对比
  • Step 10:工作流总结

Step 0:风险披露与确认

必须完整阅读并展示 risks-and-impact.md 的全部内容,不得摘要或省略任何章节、表格或注释。需覆盖的章节包括:单实例部署的固有风险(R-001..R-005 风险表)、单机与主备的能力对比表、转换为主备的运维影响(影响表、CPU 上升说明、转换期间实例状态说明)、成本说明(计费模式表、预付费差价计算、其他成本说明)、回滚指引。展示完整风险披露后,必须要求用户明确确认;若用户未确认或选择退出,必须终止工作流且不执行任何云操作。

Step 1:环境检查

必须检查 Python 是否安装、hcloud 命令行工具是否安装、hcloud 是否已配置认证。返回成功 JSON 表示已配置认证;DNS 或认证错误表示未配置。任一检查失败,必须向用户报告缺失项及修复说明并终止工作流。

Step 2:区域确认(可选)

--region 是工作流中每个脚本(Step 3-9)使用的全局参数。每个参数值在工作流中必须且只能确认一次。若用户在触发技能时已提供区域,则跳过本步骤;若未提供,必须要求用户提供区域代码(如 cn-north-4),用户输入即为该参数的确认,不得再次要求确认。

Step 3:实例发现与选择(可选)

若用户已提供实例 ID,则跳过本步骤,实例存在性及 type=Single、status=ACTIVE 的验证由 Step 5 的只读 pre_check.py 完成。若未提供,运行 list_instances.py 列出该区域所有 MySQL 实例,以表格形式展示实例 ID、名称、类型(Single/Ha/Replica)、状态、计费模式,并要求用户选择目标实例 ID。用户的选择即为确认。

Step 4:可用区发现与选择(可选)

若用户已提供目标可用区,则跳过本步骤,可用性验证由 Step 5 的 pre_check.py 完成。若未提供,运行 list_azs.py 列出该区域所有可用区,以表格形式展示可用区 ID 及可用状态。需说明:备节点目标可用区必须可用;默认建议备节点与实例当前可用区不同(跨 AZ 容灾),但允许选择同一可用区(同 AZ 延迟最短),由用户决定。用户的选择即为确认。

Step 5:前置条件检查

调用 pre_check.py 验证所有前置条件。需列出命令行参数详情(参数名、必填/可选、默认值、描述等),要求用户提供 --instance-id 和 --target-az,--region 直接引用。确认规则:若三个参数均在触发时提供,必须回显三个已确认值并请求用户确认后再运行;若为交互路径,直接运行,不得再次回显确认。脚本按顺序验证:实例为 Single 且 ACTIVE、规格支持 HA 且目标可用区可用、已启用自动备份。任一检查失败,必须向用户展示失败信息并终止工作流。

Step 6:成本评估

基于 Step 5 预检报告中的单机规格、存储和计费模式,评估转换为 HA 的成本增加。运行 rds_cost_estimate.py 的 compare 模式,脚本从单机规格推导对应 HA 规格(x86 追加 .ha;ARM 将 .single 替换为 .ha),按实例计费模式过滤后报价计算与存储,报告单机价格、HA 价格、价差及 HA 倍数(约 2 倍)。按需价格为真实按需报价;存储卷按规格报价,HA 高于单机(包月/包年约 +60%,按需约 +10%)。必须以表格形式展示对比结果,仅展示报告中实际有值的价格行。该评估为只读操作,不会创建任何资源。BSS 报价走全局 BSS 通道(--cli-region=cn-north-1),真实实例区域在 product_infos.N.region 中携带,不影响报价。

Step 7:转换前监控基线

运行 rds_monitor.py 捕获转换前实例的监控基线。使用 300 秒默认窗口(覆盖一个完整 5 分钟 CES 采集周期),报告 CPU 利用率、内存利用率、磁盘利用率、IOPS、连接使用率和复制延迟(单机实例为 null)。必须向用户展示基线快照,并说明其取自转换前的单机实例。若无法捕获基线,如实记录为“无数据”并继续。

Step 8:执行单机转主备

此步骤不可逆(将云实例从 Single 变为 Ha,成本约翻倍),需要用户明确确认。需向用户展示已确认参数:--instance-id、--target-az 和实例计费模式。展示转换影响与成本信息:不可逆、成本约翻倍、存储容量翻倍且存储成本上升、CPU 短暂上升、备份存储成本。计费模式说明:预付费(prePaid)实例脚本自动携带 is_auto_pay=true,华为云自动从账户扣取差价,需确保账户余额充足;按需(postPaid)实例无需支付差价。必须获得用户明确确认后才能运行转换命令。

备份处理(询问用户,默认备份):需说明默认转换前先执行手动备份,手动备份占用云上备份存储,超出免费额度后产生备份存储成本。需告知用户一次备份大致耗时,来源顺序为:最新自动备份时长(查询 ListBackups --backup_type=auto,取首条记录 begin_time/end_time 差值);若无自动备份,用最新手动备份记录时长;若完全无备份记录,按存储大小(GB)× 1024 / 100 MB/s 估算并标注为保守值。询问用户是否保留手动备份:若选择不备份,使用 --skip-backup 直接转换(自动备份策略仍适用);若保留备份,不加 --skip-backup。

运行 convert.py,脚本先执行转换前手动备份(除非 --skip-backup),然后执行转换并阻塞至完成(通常约 10 分钟)。脚本将转换状态(backup_id / job_id,或预付费实例的 order_id)持久化到 <output>.state.json,以便被 shell/会话超时终止的进程可恢复。必须根据报告的 conversion.final_status 判断转换结果,而非进程退出码。预付费实例 API 返回 order_id 而非 job_id,脚本轮询实例状态(MODIFYING INSTANCE TYPE → type=Ha + status=ACTIVE),无百分比进度,约 10 分钟完成。不得将长时间运行的脚本通过 | tail -N 管道处理,应直接运行查看实时进度,或将 stderr 重定向到日志文件。若进程因超时被终止,使用 resume.py 恢复而非重跑。

Step 9:结果确认与监控对比

(资料中该步骤内容未完整提供,暂未提供详细信息。)

Step 10:工作流总结

(资料中该步骤内容未完整提供,暂未提供详细信息。)

适用场景

适用于需要将华为云 RDS for MySQL 单机实例升级为主备(HA)实例以提升可用性、降低单点故障风险的运维场景。

限制

  • 转换不可逆。
  • 目标实例必须为 ACTIVE 状态的单机实例。
  • 需要 Python >= 3.9 和 hcloud >= 7.2.2 并配置 AKSK 认证。
  • 预付费实例需确保账户余额充足以支付差价。
  • 手动备份会占用备份存储并可能产生费用。