EBS云盘容灾方案实践-快照方案

更新时间:
复制为 MD 格式

块存储有多种云盘容灾技术,包括快照、异步复制、regional disk等等。不同技术方案在成本和恢复时间点等方面有区别。本次实验任务是在云上构建一个在云服务器ECS上运行的微服务应用,并使用快照方案的云盘容灾方案在模拟故障场景下快速恢复数据和应用服务。

场景简介

本次实验任务是在云上构建一个在云服务器ECS上运行的微服务应用,并使用快照方案的云盘容灾方案在模拟故障场景下快速恢复数据和应用服务。

费用说明

本实验使用云服务器ECS实例和快照,实验总费用不超过2.1元。如果您调整了资源规格、使用时长,或执行了本方案以外的操作,可能导致费用发生变化,请以控制台显示的实际价格和最终账单为准。

背景知识

本场景主要涉及以下云产品和服务:

前提条件

创建实验资源

  1. 在实验页面,勾我已阅读并同意《阿里云云起实践平台服务协议》我已授权阿里云云起实践平台创建、读取及释放实操相关资源后,单击开始实操

  2. 创建资源需要5分钟左右的时间,请您耐心等待。

  3. 云产品资源列表,您可以查看本场景涉及的云产品资源信息。

    image

安全设置

资源创建完成后,为了保护您阿里云主账号上资源的安全,请您重置云服务器ECS的登录密码。

  1. 重置云服务器ECS的登录密码。

    重要

    注意需修改容灾测试故障实例和容灾测试恢复实例两台服务器的登录密码。

    1. 云产品资源列表的ECS云服务器区域,单击管理

      image

    2. 实例详情页签的基本信息区域,单击重置密码

      image

    3. 重置实例密码对话框中,设置新密码确认密码重置密码的方式选择在线重置密码配置SSH密码登录策略选择开启,单击确认修改

      image

      返回如下结果,表示ECS实例root用户的登录密码重置成功。

      image

  2. 设置安全组端口。

    1. 云产品资源列表的安全组区域,单击管理

      image

    2. 访问规则区域的入方向中,添加SSH(22)HTTP(80)HTTPS(443)端口。

      重要

      添加端口时,授权对象建议选择您的本机IP地址

      Image 48.png

      image

在裸设备上创建文件系统

重要

云服务器ECS实例重启后需要重新执行此步骤挂载云盘并创建文件系统。

  1. 云产品资源列表的ECS云服务器区域,单击远程连接

    说明

    此处连接的服务器为容灾测试故障实例,进入ECS控制台可看到服务器名称。

    image

  2. 登录实例对话框中,输入用户自定义密码,单击确定

    image

  3. 执行以下命令,获取数据盘的设备名称。

    sudo fdisk -l 

    image

  4. 执行以下命令,安装e2fsprogs工具。

    sudo yum install -y e2fsprogs
  5. 执行以下命令,为目标数据盘创建ext4文件系统。

    说明

    /dev/vdb是数据盘的设备名,请您根据实际环境替换。

    sudo mkfs.ext4 /dev/vdb
  6. 执行以下命令,将目标数据盘挂载至新建的/data挂载目录。

    说明

    本示例以挂载数据盘/dev/vdb至挂载目录/data为例,请您根据实际环境替换。

    sudo mkdir /data
    sudo mount /dev/vdb /data
  7. 执行以下命令,查看是否挂载成功

    df -Th

    image

部署微服务

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

    pip3 install Flask

    image

  2. 执行如下命令,在数据盘挂载目录新建并编辑微服务python文件。

    vim /data/app.py
  3. i进入输入模式,将如下代码复制到文件中。输入完成后按Esc,输入:wq,保存并退出。

    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中。

    python /data/app.py

    image

  5. 云产品资源列表的ECS云服务器区域,复制公网IP地址。

    image

  6. 打开浏览器网页,在地址栏中访问如下地址,得到最近一次的记录时间,表明当前服务健康并持续提供服务。

    说明

    <公网IP>需替换为当前服务器(容灾测试故障实例)公网IP。

    http://<公网IP>/read

模拟故障场景并基于不同容灾方案恢复

本章节通过模拟故障场景,以创建云盘快照的方式实现恢复服务和数据。

  1. 创建快照。

    1. 云产品资源列表的ECS云服务器区域,单击管理

      image

    2. 进入块存储页签,找到容灾测试故障云盘单击创建快照

      image

    3. 创建快照对话框中,设置快照名称容灾恢复测试,单击确认

      image

    4. 在左侧导航栏中选择快照,查看容灾恢复测试快照创建进度,等待快照进度到100%。

      image

  2. 模拟实例被误释放、机房断电、可用区故障。

    1. 在左侧导航栏中选择实例,找到容灾测试故障实例服务器,单击停止。通过停机ECS实例,模拟实例被误释放、机房断电、可用区故障等场景。

      image

    2. 停止实例对话框中,选择停止 > 普通停机模式后单击确定

      image

  3. 创建容灾测试恢复盘。

    1. 进入快照控制台。

    2. 云盘快照页签,单击容灾恢复测试快照右侧的image图标 > 创建云盘

      image

    3. 云盘购买页面,参考如下说明配置参数,未提及的配置保持默认或按需修改,然后单击确认下单

      参数

      示例

      是否挂载

      暂不挂载

      地域

      本教程所使用实例规格在华东1(杭州)。

      可用区

      可用区J。与您创建的ECS实例可用区保持一致,才可以在之后的步骤挂载云盘。

      付费类型

      按量付费

      云盘类型

      ESSD云盘 20GiB

      名称

      容灾测试恢复盘

      描述

      容灾测试恢复盘

      image

      image

  4. 挂载云盘。

    1. 前往ECS服务器控制台。

    2. 在左侧导航栏选择块存储,在云盘页签中,找到容灾测试恢复盘云盘,单击挂载

      image

    3. 挂载云盘对话框中,选择目标实例容灾测试恢复实例,勾选云盘随实例释放,单击下一步

      image

    4. 分区及创建文件系统并挂载部分,选择初始化方式通过云助手工具/文档进行初始化操作,单击立即操作

      image

    5. 检测挂载点节点,挂载点填写/data操作栏单击手动挂载

      image

      挂载完毕如下图所示。

      image

  5. 恢复服务。

    1. 前往ECS控制台

    2. 实例页面,单击容灾测试恢复实例右侧的远程连接

      image

    3. 远程连接对话框中,单击通过Workbench远程连接区域下的立即登录,输入创建容灾测试恢复实例时设置的用户名和密码。

      image

    4. 执行以下命令,进入挂载云盘目录。

      cd /data
    5. 执行以下命令,观测数据恢复情况。该命令查看最后几条数据,即快照方案的数据恢复时间点与快照创建时间相差大约5秒,数据恢复时间(RPO)为秒级。

      说明

      可按Ctrl+C退出查看。

      tail -f time.log

      image

    6. 执行以下命令,重新运行python应用。

      pip3 install Flask
      python /data/app.py

      image

    7. 打开浏览器网页,在地址栏中访问如下地址,得到最近一次的记录时间,表明当前服务健康并持续提供服务。

      说明

      <公网IP>需替换为当前服务器(容灾测试恢复实例)公网IP。

      http://<公网IP>/read

      image

清理资源

  • 在完成实验后,如果无需继续使用资源,请根据以下步骤,先删除相关资源后,再结束实操,否则资源会持续运行产生费用。

    • 删除快照。

      1. 在左侧导航栏选择快照页签,找到目标实例容灾恢复测试,单击删除快照

        image

      2. 删除快照对话框中,勾选我已确认快照删除后不可恢复,数据不可找回,单击确定

        image

    • 删除相关资源后,选择不保留资源,单击结束实操。在结束实操对话框中,单击确定

      image

  • 在完成实验后,如果需要继续使用资源,选择付费保留资源,单击结束实操。在结束实操对话框中,单击确定。请随时关注账户扣费情况,避免发生欠费。

    image