跳转到: 导航, 搜索

SheepdogSupport

  • Launchpad 条目: NovaSpec:sheepdog-support
  • 创建: 2010-11-15
  • 贡献者: Kazutaka Morita, Tomonori Fujita

总结

为 Nova 实例添加 Sheepdog 支持。

发布说明

Sheepdog 是一个用于 QEMU 的分布式块存储系统。 这提议将 Sheepdog 集成到 OpenStack 中,并为虚拟机提供高度可用的块存储卷,类似于 Amazon EBS。 关于 Sheepdog 的详细信息请参见 http://www.osrg.net/sheepdog/

原理

当前卷的实现方式(iSCSI/AoE 与 LVM)不适合 IaaS。

  • 该架构在容量和性能上都无法扩展
  • LVM 机器可能成为单点故障 (SPOF)
  • 如果我们拍摄大量的 LVM 快照,卷的性能会变得非常糟糕

用户故事

一家托管服务提供商希望为数千名用户提供块级别存储卷。 然而,单个 LVM 机器无法实现这种可扩展性,并且从成本角度来看,高端存储系统是不可接受的。 Sheepdog 解决了这个问题。

前提条件

无。

实现

创建一个新的类 SheepdogDriver,如下所示

class SheepdogDriver(VolumeDriver):
    """Executes commands relating to Sheepdog Volumes"""

    def check_for_setup_error(self):
        """Returns an error if prerequisites aren't met"""
        # TODO: check whether sheepdog is starting or not
        pass

    @defer.inlineCallbacks
    def create_volume(self, volume):
        """Creates a sheepdog volume"""
        yield self._try_execute("qemu-img create sheepdog:%s %s" %
                            (volume['name'], volume['size']))

    @defer.inlineCallbacks
    def delete_volume(self, volume):
        """Deletes a logical volume"""
        yield self._try_execute("collie vdi delete %s" % volume['name'])

    def ensure_export(self, context, volume):
        """Safely and synchronously recreates an export for a logical volume"""
        # TODO: check whether volume['name'] exists
        pass

    @defer.inlineCallbacks
    def create_export(self, context, volume):
        """Exports the volume"""
        pass

    @defer.inlineCallbacks
    def remove_export(self, context, volume):
        """Removes an export for a logical volume"""
        pass

    @defer.inlineCallbacks
    def discover_volume(self, volume):
        """Discover volume on a remote host"""
        defer.returnValue("sheepdog:%s" % volume['name'])

    @defer.inlineCallbacks
    def undiscover_volume(self, volume):
        """Undiscover volume on a remote host"""
        yield