Eucalyptus之EBS实现分析
原文链接: http://2010ronnie.appspot.com/?p=123002首先来看EBS实现的主要功能,然后从功能进行解析。EBS主要操作对象就是volume和snapshot。下面先以euca2ools来说
volume:euca-create-volume,euca-describe-volumes,euca-attach-volume,euca-detach-volume,euca-delete-volume
snapshot:euca-create-snapshot,euca-describe-snapshots,euca-delete-snapshots
当用户向Eucalyptus请求euca-create-volume时候,Eucalyptus向相应的SC发出命令,SC会在/var /lib/eucalyptus/volumes(默认配置,可更改)下创建一个相应大小的文件(dd命令),然后会调用losetup将该文件关联到一 个loop设备,再调用pvcreate和vgcreate创建一个逻辑卷,将设备纳入lvm管理。接下来就是需要一个让NC发现该设备的方 法,Eucalyptus在SC端使用Linux iSCSI target framework(tgt)提供iSCSI网络服务,在SC将tgt配置成deamon服务,并对每个volume进行了配置。当用户调用euca- attach-volume时候,attach目标Instance所在的NC将会通过ietadm(iscsiadm)询问SC关于volume的信 息,找到后将在Instance的工作目录建立一个xml描述该volume,然后通过libvirt提供的virsh命令将此volume挂载到 Instance,Instance即可进行格式化,mount等操作。euca-detach-volume基本就是上述操作的逆过程。
snapshot是利用了lvm的snapshot功能(关于这个准备另外翻译一篇文档描述),可以通过snapshot备份EBS。
首先SC建立一个足够大的image file添加到EBS所在的逻辑卷组(VG),这个足够大是指能够容纳下EBS的逻辑卷,因为在lvm的snapshot中,如果开始设置的 snapshot偏小,当对original的修改超出snapshot时候,snapshot就失效了,如果当snapshot的大小大于等于 orginal的时候,是绝对安全的。然后将使用dd命令将snapshot拷贝到snap文件,然后snap文件是存储到Walrus(S3)的,这时 候就需要从SC传输到Walrus
页:
[1]