从使用 ec2-consistent-snapshot 拍摄的快照还原 Amazon EBS RAID0 阵列

从使用 ec2-consistent-snapshot 拍摄的快照还原 Amazon EBS RAID0 阵列

我在 Amazon EC2 上配置了一个新的 MySQL 服务器,并决定将数据存储在 EBS RAID0 阵列上。到目前为止一切顺利,并且我已经使用 ec2-consistent-snapshot 测试了这些设备的快照,效果很好。

现在,如何根据这些快照快速地在新实例上重建阵列?

当您使用 ec2-consistent-snapshot 创建多个卷的快照时,您无法分辨 RAID 中每个设备使用了哪个卷。我可能完全错了,但由于您要跨卷分条数据,因此理所当然地,您必须将每个新卷放在 RAID 上与创建快照的卷相同的位置。

一个例子:

  • RAID0 配置中的 3x200gb 卷。
  • vol-1 是 RAID 中的 /dev/sdh 设备 0
  • vol-2 是 RAID 中的 /dev/sdh1 设备 1
  • vol-3 是 RAID 中的 /dev/sdh2 设备 2

您使用以下命令创建 ec2 快照:ec2-consistent-snapshot <options> vol-1 vol-2 vol-3

您现在有 3 个快照,追溯它们是哪个设备的唯一方法是查看源卷 id,然后查看源卷 id 在实例上安装为哪个设备,然后检查源卷实例上的 RAID 配置的详细信息。

这显然是极其手动的......并且不快(如果另一个 mysql 实例失败,这显然很难快速启动一个新的 mysql 实例。更不用说,您必须在快照时记录 RAID 上的设备位置,因为如果源卷实例崩溃,您就无法获得 RAID 配置)。

因此,总结一下:

  • 我是否遗漏了 ec2-consistent-snapshot 和软件 RAID0 阵列的工作原理?
  • 如果没有,是否有任何已知的解决方案/最佳实践来解决不知道快照属于 RAID 阵列中的哪个设备/位置的问题?

我希望这清楚了,感谢您的帮助!

答案1

由于您要跨卷分条数据,因此理所当然地,您必须将每个新卷放在 RAID 上与创建快照的卷相同的位置。

我测试了你的前提,虽然它看上去合乎逻辑,但观察结果却并非如此。

让我详细说明一下:
我和你有同样的要求。但是我使用的 RAID0 只有 2 个卷。

我正在使用 Ubuntu 10,并有 2 个 EBS 设备形成用 XFS 格式化的 RAID0 设备。

raid0 设备使用以下命令创建:
sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices 2 /dev/sdg /dev/sdh

我已经安装了 MYSQL 和一堆其他软件,它们配置为使用 /dev/md0 来存储它们的数据文件。

使用相同的卷:完成后,我卸载所有内容,停止 Raid 并像这样重新组装: sudo mdadm --assemble /dev/md0 /dev/sdh /dev/sdg 事实是,无论顺序如何/dev/sdg /dev/sgh,RAID 都会正确地重建。

使用快照:发布此内容后,我用来ec2-consistent-snapshot同时创建 2 个 EBS 磁盘的快照。然后,我从此磁盘创建卷,将其附加到新实例(已为软件配置),重新组装 RAID(我也尝试过交换 EBS 卷的顺序),安装它,然后就可以开始了。

听起来很奇怪,但它确实有效。

答案2

我运行了类似的配置(4 个 EBS 卷上的 RAID0),因此也有同样的担忧,即从使用创建的快照重建 RAID 阵列ec2 一致快照

幸运的是,RAID 阵列中的每个设备都包含元数据(在超级块中),记录其在阵列中的位置、阵列的 UUID 和阵列级别(例如 RAID0)。要在任何设备上查询此超级块,请运行以下命令(匹配的行'^这个'描述所查询的设备):

$ sudo mdadm --examine /dev/sdb1
/dev/sdb1:
          Magic : a92b4efc
        Version : 00.90.00
           UUID : 2ca96b4a:9a1f1fbd:2f3c176d:b2b9da7c
  Creation Time : Mon Mar 28 23:31:41 2011
     Raid Level : raid0
  Used Dev Size : 0
   Raid Devices : 4
  Total Devices : 4
Preferred Minor : 0

    Update Time : Mon Mar 28 23:31:41 2011
          State : active
 Active Devices : 4
Working Devices : 4
 Failed Devices : 0
  Spare Devices : 0
       Checksum : ed10058a - correct
         Events : 1

     Chunk Size : 256K

      Number   Major   Minor   RaidDevice State
this     0     202       17        0      active sync   /dev/sdb1

   0     0     202       17        0      active sync   /dev/sdb1
   1     1     202       18        1      active sync   /dev/sdb2
   2     2     202       19        2      active sync   /dev/sdb3
   3     3     202       20        3      active sync   /dev/sdb4

如果您在不属于阵列的设备上执行相同的查询,您将获得:

$ sudo mdadm --examine /dev/sda1
mdadm: No md superblock detected on /dev/sda1.

这证明该命令确实依赖于设备本身存储的信息而不是某些配置文件。

您还可以从 RAID 设备开始检查 RAID 阵列的设备,检索类似的信息:

$ sudo mdadm --detail /dev/md0

我使用后者以及ec2-描述-卷为 ec2-consistent-snapshot 构建卷列表(-n- 调试允许在不创建快照的情况下测试此命令)。以下命令假定目录/mysql是卷的挂载点,并且 AWS 区域是美国西部-1

$ sudo -E ec2-consistent-snapshot --region us-west-1 --mysql --freeze-filesystem /mysql --mysql-master-status-file /mysql/master-info --description "$(date +'%Y/%m/%d %H:%M:%S') - ASR2 RAID0 (4 volumes) Snapshot" --debug -n $(ec2-describe-volumes --region us-west-1 | grep $(wget http://169.254.169.254/latest/meta-data/instance-id -O - -q) | egrep $(sudo mdadm --detail $(awk '{if($2=="/mysql") print $1}' /etc/fstab) | awk '/ \/dev\//{printf "%s ", $7}' | sed -e 's# /#|/#g') | awk '{printf "%s ", $2}')

答案3

我知道这不能回答您的问题,但我正在做一些类似的事情,但使用的是亚马逊的基本 ec2-create-snapshot 工具和一个 cron 脚本。它不如 ec2-consistent-snapshot 快,但我获得了所需的额外控制:fsync、锁定写入,最重要的是,适当地命名快照,以便可以按正确的顺序重建它们。

相关内容