迁移卷¶
OpenStack 具有在支持其卷类型的后端之间迁移卷的能力。迁移卷会透明地将卷的数据从当前后端移动到新的后端。这是一个管理员功能,可用于包括存储疏散(用于维护或退役)或手动优化(例如,性能、可靠性或成本)等功能。
以下工作流程可用于迁移
如果存储可以自行迁移卷,则会给予它机会。这允许块存储驱动程序启用存储可能执行的优化。如果后端无法执行迁移,则块存储使用以下两种通用流程之一。
如果卷未附加,则块存储服务会创建一个卷并将数据从原始卷复制到新卷。
注意
虽然大多数后端都支持此功能,但并非全部都支持。有关更多详细信息,请参阅 驱动程序文档。
如果卷已附加到 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 属性显示诸如 migrating 或 completing 等状态。发生错误时,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)。但是,在迁移进行时,某些操作不允许,例如附加/分离卷和删除卷。如果用户在迁移期间执行此类操作,将返回错误。
注意
当前不允许迁移具有快照的卷。