跳转到: 导航, 搜索

SnapshotVolume

  • Launchpad 条目: NovaSpec:snapshot-volume
  • 创建: 2011-4-19
  • 贡献者: Kazutaka Morita

总结

使用 EC2 API 对 nova 卷进行快照

发布说明

这增加了对卷快照(EBS 快照)的支持。 OpenStack API 不支持卷快照,因此我们从使用 EC2 API 实现此功能开始。

这仅调用后端块存储系统的快照命令。 未来,我们应该将创建的卷快照备份到 Swift,就像 Amazon EBS 将快照备份到 S3 一样。

原理

这对于获取卷的一致镜像至关重要,该镜像用于备份或创建黄金卷。

用户故事

  • 用户创建快照以备份卷
  • 用户创建黄金卷以快速提供服务


$ euca-create-volume -s 4 -z 0
VOLUME  vol-00000001    4       creating (admin, None, None, None)      2011-04-19T20:18:10Z
$ euca-create-snapshot vol-00000001
SNAPSHOT        snap-00000001   vol-00000001    creating        2011-04-19T20:18:19Z    0%  

前提条件

nova-volume 的后端存储必须支持即时快照。

实现

这在数据库中添加了一个新的表 'snapshots'

snapshots = Table('snapshots', meta,
        Column('created_at', DateTime(timezone=False)),
        Column('updated_at', DateTime(timezone=False)),
        Column('deleted_at', DateTime(timezone=False)),
        Column('deleted', Boolean(create_constraint=True, name=None)),
        Column('id', Integer(),  primary_key=True, nullable=False),
        Column('volume_id', Integer(), nullable=False),
        Column('user_id',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False)),
        Column('project_id',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False)),
        Column('status',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False)),
        Column('progress',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False)),
        Column('volume_size', Integer()),
        Column('scheduled_at', DateTime(timezone=False)),
        Column('display_name',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False)),
        Column('display_description',
               String(length=255, convert_unicode=False, assert_unicode=None,
                      unicode_error=None, _warn_on_bytestring=False))
        )


并在卷驱动程序中添加了两个接口

class VolumeDriver(object):

    ...

    def create_snapshot(self, snapshot):
        """Creates a snapshot."""
        raise NotImplementedError()

    def delete_snapshot(self, snapshot):
        """Deletes a snapshot."""
        raise NotImplementedError()