我在Amazon EC2上configuration了一个新的MySQL服务器,并决定将我的数据存储在EBS RAID0arrays上。 到目前为止,我已经用ec2-consistent-snapshot来testing这些设备的快照了。
现在,您如何快速从这些快照重build新实例上的数组?
当您使用ec2-consistent-snapshot创build多个卷的快照时,无法知道哪个卷用于RAID中的每个设备。 我可能是完全错误的,但是因为你要在卷上分割数据,所以不得不将每个NEW卷放在创build快照的卷上的同一个位置。
一个例子:
你创build一个EC2快照: ec2-consistent-snapshot <options> vol-1 vol-2 vol-3 。
您现在有3个快照,而追溯哪个设备的唯一方法是查看源卷ID,然后查看实例上的源卷标识为哪个设备,然后检查RAID的详细信息configuration源卷的实例。
这显然是令人难以置信的手动…而且速度不是很快(如果另一个失败,很显然很难创build一个新的mysql实例,更不用说,你必须logging当时在RAID上的设备位置的快照,因为如果源卷实例崩溃,则无法进入RAIDconfiguration)。
所以,总之:
我希望这是清楚的,并感谢您的帮助!
由于要跨卷分割数据,因此您必须将每个NEW卷与创build快照的卷位于RAID上的相同位置。
我testing了你的前提,而且看起来是合乎逻辑的,否则就是观察。
让我详细说明一下:
我有和你一样的要求。 不过,我使用的RAID0只有2个卷。
我使用的是Ubuntu 10,并有2个EBS设备组成一个用XFS格式化的RAID0设备。
raid0设备使用以下命令创build:
sudo mdadm --create /dev/md0 --level 0 --metadata=1.1 --raid-devices 2 /dev/sdg /dev/sdh
我已经安装了MYSQL和一些其他configuration为使用/ dev / md0来存储数据文件的软件。
使用相同的卷 :一旦完成,我卸载一切,停止RAID和重新组装它像这样: sudo mdadm --assemble /dev/md0 /dev/sdh /dev/sdg事情是,不pipe/dev/sdg /dev/sgh ,RAID重build正确。
使用快照 :发布后,我使用ec2-consistent-snapshot来创build2个EBS磁盘的快照。 然后,我从这个磁盘创build卷,将其附加到一个新的实例(已经为软件configuration),重新组装RAID(我试图交换EBS卷的顺序),装上它,我准备好了去。
听起来很奇怪,但是很有效。
我运行一个类似的configuration( 4个EBS卷上的RAID0 ),因此也有同样的问题,用从ec2-consistent-snapshot创build的快照重新构buildRAIDarrays。
幸运的是,RAIDarrays中的每个设备都包含元数据(在超级块中),用于loggingarrays中的位置,arrays的UUID以及arrays的级别(例如RAID0)。 要在任何设备上查询此超级块,请运行以下命令(匹配'^ this'的行描述查询的设备):
$ 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.
这certificate这个命令真的依赖于存储在设备上的信息,而不是一些configuration文件。
也可以从RAID设备开始检查RAIDarrays的设备,检索类似的信息:
$ sudo mdadm --detail /dev/md0
我使用后面的ec2-describe-volumes来构buildec2-consistent-snaptshot的卷列表( -n和–debug允许testing此命令而不创build快照)。 以下命令假定目录/ mysql是卷的装入点,并且AWS区域是us-west-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}')
我知道这不能回答你的问题,但我正在做类似的事情,但与亚马逊的基础ec2-create-snapshot工具和一个cron脚本。 它不如ec2-consistent-snapshot快,但我得到了额外的控制,我需要:fsync,locking写入,最重要的是,适当地命名快照,以便他们可以按正确的顺序重组。