迁移卷

OpenStack 具有在支持其卷类型的后端之间迁移卷的能力。迁移卷会透明地将卷的数据从当前后端移动到新的后端。这是一个管理员功能,可用于包括存储疏散(用于维护或退役)或手动优化(例如,性能、可靠性或成本)等功能。

以下工作流程可用于迁移

  1. 如果存储可以自行迁移卷,则会给予它机会。这允许块存储驱动程序启用存储可能执行的优化。如果后端无法执行迁移,则块存储使用以下两种通用流程之一。

  2. 如果卷未附加,则块存储服务会创建一个卷并将数据从原始卷复制到新卷。

    注意

    虽然大多数后端都支持此功能,但并非全部都支持。有关更多详细信息,请参阅 驱动程序文档

  3. 如果卷已附加到 VM 实例,则块存储会创建一个卷,并调用 Compute 将数据从原始卷复制到新卷。目前,这仅由 Compute libvirt 驱动程序支持。

例如,此场景显示了两个 LVM 后端,并将附加卷从一个迁移到另一个。此场景使用第三个迁移流程。

首先,列出可用的后端

# cinder get-pools
+----------+----------------------------------------------------+
| Property |                       Value                        |
+----------+----------------------------------------------------+
|   name   |           server1@lvmstorage-1#lvmstorage-1        |
+----------+----------------------------------------------------+
+----------+----------------------------------------------------+
| Property |                      Value                         |
+----------+----------------------------------------------------+
|   name   |           server2@lvmstorage-2#lvmstorage-2        |
+----------+----------------------------------------------------+

注意

Block Storage API 从 V2 版本开始支持 cinder get-pools

您还可以像以下这样获取可用的后端

# cinder-manage host list
server1@lvmstorage-1    zone1
server2@lvmstorage-2    zone1

但需要在末尾添加池名称。例如,server1@lvmstorage-1#zone1

接下来,作为管理员用户,您可以查看卷的当前状态(用您自己的 ID 替换示例 ID)

$ openstack volume show 6088f80a-f116-4331-ad48-9afb0dfb196c

+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | zone1                                |
| bootable                       | false                                |
| consistencygroup_id            | None                                 |
| created_at                     | 2013-09-01T14:53:22.000000           |
| description                    | test                                 |
| encrypted                      | False                                |
| id                             | 6088f80a-f116-4331-ad48-9afb0dfb196c |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | test                                 |
| os-vol-host-attr:host          | server1@lvmstorage-1#lvmstorage-1    |
| os-vol-mig-status-attr:migstat | None                                 |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | d88310717a8e4ebcae84ed075f82c51e     |
| properties                     | readonly='False'                     |
| replication_status             | disabled                             |
| size                           | 1                                    |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | in-use                               |
| type                           | None                                 |
| updated_at                     | 2016-07-31T07:22:19.000000           |
| user_id                        | d8e5e5727f3a4ce1886ac8ecec058e83     |
+--------------------------------+--------------------------------------+

请注意这些属性

  • os-vol-host-attr:host - 卷的当前后端。

  • os-vol-mig-status-attr:migstat - 此卷迁移的状态(None 表示当前没有正在进行的迁移)。

  • os-vol-mig-status-attr:name_id - 卷在后端存储上的名称基于的卷 ID。在迁移卷之前,其在后端存储上的名称可能基于卷的 ID(请参阅 volume_name_template 配置参数)。例如,如果 volume_name_template 保持为默认值 (volume-%s),您的第一个 LVM 后端将具有名为 volume-6088f80a-f116-4331-ad48-9afb0dfb196c 的逻辑卷。在迁移过程中,如果您创建一个卷并复制数据,该卷将获得新的名称,但保留其原始 ID。这由 name_id 属性公开。

    注意

    如果您计划退役一个块存储节点,则必须在执行迁移后停止该节点上的 cinder 卷服务。

    在运行 CentOS、Fedora、openSUSE、Red Hat Enterprise Linux 或 SUSE Linux Enterprise 的节点上,运行

    # service openstack-cinder-volume stop
    # chkconfig openstack-cinder-volume off
    

    在运行 Ubuntu 或 Debian 的节点上,运行

    # service cinder-volume stop
    # chkconfig cinder-volume off
    

    停止 cinder 卷服务将阻止将卷分配给该节点。

将此卷迁移到第二个 LVM 后端

$ openstack volume migrate 6088f80a-f116-4331-ad48-9afb0dfb196c \
  --host server2@lvmstorage-2#lvmstorage-2

您可以使用 openstack volume show 命令查看迁移的状态。在迁移过程中,migstat 属性显示诸如 migratingcompleting 等状态。发生错误时,migstat 设置为 None,并且 host 属性显示原始 host。成功后,在本示例中,输出如下所示

$ openstack volume show 6088f80a-f116-4331-ad48-9afb0dfb196c

+--------------------------------+--------------------------------------+
| Field                          | Value                                |
+--------------------------------+--------------------------------------+
| attachments                    | []                                   |
| availability_zone              | zone1                                |
| bootable                       | false                                |
| consistencygroup_id            | None                                 |
| created_at                     | 2013-09-01T14:53:22.000000           |
| description                    | test                                 |
| encrypted                      | False                                |
| id                             | 6088f80a-f116-4331-ad48-9afb0dfb196c |
| migration_status               | None                                 |
| multiattach                    | False                                |
| name                           | test                                 |
| os-vol-host-attr:host          | server2@lvmstorage-2#lvmstorage-2    |
| os-vol-mig-status-attr:migstat | completing                           |
| os-vol-mig-status-attr:name_id | None                                 |
| os-vol-tenant-attr:tenant_id   | d88310717a8e4ebcae84ed075f82c51e     |
| properties                     | readonly='False'                     |
| replication_status             | disabled                             |
| size                           | 1                                    |
| snapshot_id                    | None                                 |
| source_volid                   | None                                 |
| status                         | in-use                               |
| type                           | None                                 |
| updated_at                     | 2017-02-22T02:35:03.000000           |
| user_id                        | d8e5e5727f3a4ce1886ac8ecec058e83     |
+--------------------------------+--------------------------------------+

请注意,migstat 为 None,host 是新的 host,并且 name_id 包含迁移创建的卷的 ID。如果您查看第二个 LVM 后端,您会找到逻辑卷 volume-133d1f56-9ffc-4f57-8798-d5217d851862

注意

迁移过程对非管理员用户不可见(例如,通过卷 status)。但是,在迁移进行时,某些操作不允许,例如附加/分离卷和删除卷。如果用户在迁移期间执行此类操作,将返回错误。

注意

当前不允许迁移具有快照的卷。