EBS云盘容灾方案实践-异步复制

更新时间:
复制 MD 格式

当业务需要跨可用区高可用时,可使用ESSD云盘实现。本文将通过手动部署或一键实验部署搭建资源,验证其在可用区故障下实现数据异步复制和业务快速恢复的能力。

计费说明

在部署实验任务时,会根据使用的阿里云资源(ECS实例、ESSD云盘等)进行计费。如果通过实验室一键部署,创建的实验任务本身不会收费。

实验室一键部署过程中使用到的阿里云资源仅支持按量付费。

部署测试环境

手动部署

  1. 自定义购买实例。需要购买2个不同可用区实例,主要参数示例如下:

    实例类型

    配置示例

    容灾测试故障实例

    付费类型:按量付费

    地域:华东1(杭州)

    可用区:可用区B

    实例规格:ecs.g7.large

    操作系统:Alibaba Cloud Linux3.2104 LTS 64

    系统盘:ESSD云盘 PL0 20 GiB

    数据盘:ESSD云盘 PL0 20 GiB

    容量测试恢复实例

    付费类型:按量付费

    地域:华东1(杭州)

    可用区:可用区K

    实例规格:ecs.g7.large

    操作系统:Alibaba Cloud Linux3.2104 LTS 64

    系统盘:ESSD云盘 PL0 20 GiB

    单独购买数据盘:ESSD云盘 PL0 20 GiB

    云盘异步复制从盘必须与主盘完全一致,且为待挂载状态。
  2. 登录容灾测试故障实例。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。

  3. 初始化数据盘。

    1. 执行以下指令创建文件系统。

      sudo mkfs -t ext4 /dev/vdb
    2. 执行以下指令创建挂载目录。

      sudo mkdir /data
    3. 执行以下指令挂载目录。

      sudo mount /dev/vdb /data

通过实验室一键部署

重要

实验室部署的一键搭建能力可用于快速验证和测试新特性,不适合直接应用到生产环境中。生产环境建议手动部署。

  1. 前往实验场景页面。

    1. 登录块存储EBS控制台

      首次登录EBS控制台时,请根据页面提示创建一个EBS服务关联角色。更多信息,请参见块存储EBS服务关联角色
    2. 在左侧导航栏选择实验室 实验场景

    3. 在顶部菜单栏左上角处,选择地域。

    4. EBS云盘容灾方案实践-异步复制实验场景模板中,单击一键创建实验任务

  2. 设置实验场景的基础信息后,单击下一步。

    参数

    说明

    实验场景

    默认为EBS云盘容灾方案实践-异步复制

    实验任务名称

    已默认填写,可以根据需要修改。

    描述(可选)

    设置实验任务的描述信息。

    高级配置(可选)

    为实验任务设置标签和资源组信息。

  3. 依赖检查界面,检查依赖情况,显示为未发现异常时,单击下一步

  4. 资源参数页面,确定或修改实验任务的参数后,单击下一步

    参数

    说明

    ecs实例规格

    选择需要创建的ECS实例规格。示例选择ecs.g7.large,28GiB实例规格。

    系统盘磁盘类型

    仅支持cloud_essd

    数据盘磁盘类型

    仅支持cloud_essd

    发生故障的可用区

    选择容灾测试故障实例对应的可用区。示例选择cn-hangzhou-b

    故障恢复的可用区

    选择容灾测试恢复实例对应的可用区。示例选择cn-hangzhou-k

    故障ECS实例密码

    根据需要设置故障ECS实例密码。

    重要

    请牢记设置的实例密码,以便后续远程连接ECS实例。

    故障恢复ECS实例密码

    根据需要设置故障恢复ECS实例密码。

    重要

    请牢记设置的实例密码,以便后续远程连接ECS实例。

  5. 检查确认配置参数以及费用信息后,单击确认。在弹出的创建实验任务对话框中,单击确定

    创建任务成功后,系统会准备资源,并搭建好对应的实验场景,预计需要15分钟,请耐心等待。

    实验任务依赖于ROS资源编排能力,一个实验任务对应于一个资源栈,最多允许创建200个实验任务。
  6. 当任务状态变为创建完成后,单击实验任务ID,进入任务详情页面。

  7. 登录容灾测试故障实例

    1. 基础信息配置信息中,单击配置项FailureEcsLoginAddress对应的

    2. 输入设置的密码后,登录ECS实例。

      若忘记密码,可返回任务详情页面,查看配置项FailureEcsInstancePassword对应的获取。
    3. 初始化数据盘。

      1. 执行以下指令创建文件系统。

        sudo mkfs -t ext4 /dev/vdb
      2. 执行以下指令创建挂载目录。

        sudo mkdir /data
      3. 执行以下指令挂载目录。

        sudo mount /dev/vdb /data

验证与清理

验证方案

  1. 容灾测试故障实例中部署模拟业务。

    1. 部署微服务。

      1. 执行以下命令,安装服务依赖。

        sudo pip3 install Flask
      2. 执行以下命令,新建并编辑文件app.py。

        sudo vim /data/app.py
      3. i键进入编辑模式,修改为以下内容后按Esc键退出编辑模式,输入:wq后按下回车键,保存并退出。代码为一个持续写入时间戳的Python应用。

        from flask import Flask
        import threading
        import time
        import os
        from datetime import datetime
        app = Flask(__name__)
        # 路径到文件
        log_file_path = os.path.expanduser('/data/time.log')
        # 创建一个后台线程来写入当前时间
        def log_time():
            while True:
                current_time = datetime.now()  # 获取当前的日期和时间
                current_time_str = current_time.strftime("%Y-%m-%d %H:%M:%S.%f")[:-3]  # 格式化为带毫秒的时间字符串
                with open(log_file_path, 'a') as f:
                    f.write(f"{current_time_str} \n")  # 写入时间
                time.sleep(0.01)
        @app.route('/')
        def hello_world():
            return 'Hello, World!'
        @app.route('/read')
        def read_latest_line():
            try:
                with open(log_file_path, 'r') as f:
                    lines = f.readlines()
                    # 返回最近的一行
                    return lines[-1] if lines else "Log file is empty."
            except FileNotFoundError:
                return "Log file not found."
        if __name__ == '__main__':
            # 启动写入时间的后台线程
            threading.Thread(target=log_time, daemon=True).start()
            # 启动Flask应用
            app.run(port=80, host='0.0.0.0')
      4. 执行以下命令,后台运行Python文件,该应用会以10ms为间隔记录时间至/data/time.log中。

        sudo nohup python /data/app.py &
  2. 创建云盘异步复制

    若通过实验室部署测试环境,无需执行此步骤,将自动创建一个名为容灾测试的云盘异步复制对。

    1. 登录块存储EBS控制台。在左侧导航栏,选择企业级特性 > 云盘异步复制

    2. 选择生产站点,然后单击创建云盘异步复制。并依照界面提示完成创建。

      参数

      说明

      地域和可用区

      容灾测试故障云盘所属的地域和可用区。

      云盘

      选择容灾测试故障云盘。

      服务关联角色

      默认已创建

      灾备地域和可用区

      容灾测试恢复云盘所属的地域和可用区。

      目标云盘

      选择容灾测试恢复云盘。

      风险告知&合规承诺

      阅读并勾选我已知晓相关风险,并且我同意以下合规承诺我已知晓该风险

      开启数据复制时间控制

      保持默认关闭即可。

  3. 启动异步复制。

    1. 单击异步复制列表中目标复制对操作列的启动

    2. 启动复制对对话框中,启动异步复制。

      1. 单击创建快照:为目标云盘先创建快照,做好数据备份。

        重要

        启动异步复制功能后,目标云盘原有数据将会被覆盖。因此建议在启动前为目标云盘创建快照,做好数据备份,以避免数据丢失。如果已提前创建了快照,则无需再次创建。

      2. 单击确定,系统将自动持续复制数据。

        异步复制必须处于已创建同步中正常已停止状态。

        当异步复制状态变更为正常时,表示云盘异步复制功能已成功启动并完成了数据的初始同步,后续系统将按照固定的时间周期(15分钟),自动将主盘上的数据异步复制到从盘,实现云盘数据的异步容灾。

  4. 记录最近恢复点。

    1. 单击目标异步复制对进入复制对详情页。

    2. 切换至灾备站点后,记录最近恢复点,后续模拟可用区故障时需要对比确定恢复情况。

      示例中,最近恢复点为2025-12-31 14:04:34。

  5. 模拟可用区故障。

    通过停止容灾测试故障实例,模拟实例被误释放、机房断电或所在可用区故障等场景。

    1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

    2. 单击容灾测试故障实例ID进入实例详情页,单击全部操作展开所有操作面板,然后搜索并单击停止

    3. 设置停止方式和模式后,单击确定

      设置

      说明

      停止方式

      停止

      强制停止可能丢失实例操作系统中未写入磁盘的数据。

      停止模式

      普通停机模式

  6. 故障切换。

    1. 返回目标异步复制对详情页,单击右上角故障切换

    2. 阅读注意事项,并单击确定

      开启故障切换功能后,异步复制的状态会变更为故障切换完成

  7. 在其他可用区恢复业务。

    1. 挂载容灾测试恢复云盘容灾测试恢复实例上。

      1. 访问ECS控制台-块存储-云盘。在页面左侧顶部,选择目标资源所在的资源组和地域。

      2. 在目标ESSD云盘的操作列中,单击挂载

      3. 目标实例选择容灾测试恢复实例,然后按照界面提示完成挂载操作。

    2. 远程连接容灾测试恢复实例。

      1. 访问ECS控制台-实例。在页面左侧顶部,选择目标资源所在的资源组和地域。

      2. 进入目标实例详情页,单击远程连接,选择通过Workbench远程连接。根据页面提示登录,进入终端页面。

    3. 分别执行以下两条命令,创建并挂载文件系统。

      sudo mkdir /data
      sudo mount /dev/vdb /data
    4. 验证数据是否丢失。

      查看日志记录,最新为2025-12-31 14:04:33.143,与记录的灾备站点的最近恢复点一致。

      sudo tail -f /data/time.log
      [root@xxx ~]# tail -f /data/time.log
      2025-12-31 14:04:33.062
      2025-12-31 14:04:33.072
      2025-12-31 14:04:33.083
      2025-12-31 14:04:33.093
      2025-12-31 14:04:33.103
      2025-12-31 14:04:33.113
      2025-12-31 14:04:33.123
      2025-12-31 14:04:33.133
      2025-12-31 14:04:33.143

清理资源

手动部署

  1. 删除云盘异步复制

  2. 释放容灾测试故障实例和容灾测试恢复实例,具体操作请查看释放实例

  3. 释放ESSD云盘,具体操作请查看释放云盘

通过实验室部署

  1. 删除云盘异步复制

  2. 卸载释放两台实例的ESSD云盘。

  3. 删除实验任务。

    1. 登录块存储EBS控制台

    2. 在左侧导航栏选择实验室 实验记录

    3. 在顶部菜单栏左上角处,选择地域。

    4. 在目标实验任务的操作列,单击删除

      也可选中多个实验任务,在列表底部单击批量删除

      警告

      删除实验任务时默认不会释放实验资源,如果选中删除资源,实验任务中的资源,例如ECS实例、数据库实例等均会被释放,请谨慎操作。