附录 A. 部署迁移选项
本节包含与 DCN 存储相关的主题,以及迁移或更改架构。
A.1. 验证边缘存储
通过测试 glance 多存储和实例创建,确保中央和边缘站点的部署正在工作。
您可以将镜像导入到本地文件系统上可用的 glance 中,或者在 web 服务器上可用。
始终将镜像副本存储在中央站点,即使没有在中央位置使用该镜像的实例。
先决条件
使用
glance stores-info
命令检查镜像服务可用的存储。在以下示例中,提供了三个存储: central、dcn1 和 dcn2。它们分别与 glance 分别存储在中央位置和边缘站点:$ glance stores-info +----------+----------------------------------------------------------------------------------+ | Property | Value | +----------+----------------------------------------------------------------------------------+ | stores | [{"default": "true", "id": "central", "description": "central rbd glance | | | store"}, {"id": "dcn0", "description": "dcn0 rbd glance store"}, | | | {"id": "dcn1", "description": "dcn1 rbd glance store"}] | +----------+----------------------------------------------------------------------------------+
A.1.1. 从本地文件导入
您必须首先将镜像上传到中央位置的存储中,然后将镜像复制到远程站点。
确保您的镜像文件采用 RAW 格式。如果镜像不采用 raw 格式,则必须在将镜像导入到镜像服务前转换镜像:
file cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.img: QEMU QCOW2 Image (v3), 117440512 bytes qemu-img convert -f qcow2 -O raw cirros-0.5.1-x86_64-disk.img cirros-0.5.1-x86_64-disk.raw
Import the image into the default back end at the central site:
glance image-create \ --disk-format raw --container-format bare \ --name cirros --file cirros-0.5.1-x86_64-disk.raw \ --store central
A.1.2. 从 Web 服务器导入镜像
如果镜像托管在 web 服务器上,您可以使用 GlanceImageImportPlugins
参数将镜像上传到多个存储。
此流程假设在 glance 中启用了默认镜像转换插件。此功能自动将 QCOW2 文件格式转换为 RAW 镜像,这是 Ceph RBD 的最佳选择。您可以通过运行 glance image-show ID | grep disk_format
来确认 glance 镜像采用 RAW 格式。
流程
使用
glance
命令的image-create-via-import
参数从 Web 服务器导入镜像。使用--stores
参数。# glance image-create-via-import \ --disk-format qcow2 \ --container-format bare \ --name cirros \ --uri http://download.cirros-cloud.net/0.4.0/cirros-0.4.0-x86_64-disk.img \ --import-method web-download \ --stores central,dcn1
在本例中,qcow2 cirros 镜像从官方 Cirros 站点下载,由 glance 转换为 RAW,并导入到由
--stores
参数指定的中央站点和边缘站点 1。
或者,您可以将 --stores
替换为 --all-stores True
,以将镜像上传到所有存储。
A.1.3. 将镜像复制到新站点
您可以将现有镜像从中央位置复制到边缘站点,这可让您在新创建的位置访问之前创建的镜像。
将 glance 镜像的 UUID 用于复制操作:
ID=$(openstack image show cirros -c id -f value) glance image-import $ID --stores dcn0,dcn1 --import-method copy-image
注意在本例中,--
stores
选项指定cirros
镜像将从中央站点复制到边缘站点 dcn1 和 dcn2。或者,您可以使用--all-stores True
选项,该选项将镜像上传到当前没有镜像的所有存储中。确认镜像的副本位于每个存储中。请注意,
store
键(属性映射中的最后一个项)被设置为central,dcn0,dcn1
:$ openstack image show $ID | grep properties | properties | direct_url=rbd://d25504ce-459f-432d-b6fa-79854d786f2b/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap, locations=[{u'url: u'rbd://d25504ce-459f-432d-b6fa-79854d786f2b/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'central'}}, {u'url': u'rbd://0c10d6b5-a455-4c4d-bd53-8f2b9357c3c7/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'dcn0'}}, {u'url': u'rbd://8649d6c3-dcb3-4aae-8c19-8c2fe5a853ac/images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076/snap', u'metadata': {u'store': u'dcn1'}}], os_glance_failed_import=', os_glance_importing_to_stores=', os_hash_algo='sha512, os_hash_value=b795f047a1b10ba0b7c95b43b2a481a59289dc4cf2e49845e60b194a911819d3ada03767bbba4143b44c93fd7f66c96c5a621e28dff51d1196dae64974ce240e, os_hidden=False, stores=central,dcn0,dcn1 |
即使没有在该站点上使用虚拟机,也始终将镜像副本存储在中央站点。
A.1.4. 确认边缘站点中的实例可以使用基于镜像的卷引导
您可以使用边缘站点中的镜像来创建持久的根卷。
流程
识别要作为卷创建的镜像 ID,并将该 ID 传递给
openstack volume create
命令:IMG_ID=$(openstack image show cirros -c id -f value) openstack volume create --size 8 --availability-zone dcn0 pet-volume-dcn0 --image $IMG_ID
识别新创建的卷的卷 ID,并将其传递给
openstack server create
命令:VOL_ID=$(openstack volume show -f value -c id pet-volume-dcn0) openstack server create --flavor tiny --key-name dcn0-key --network dcn0-network --security-group basic --availability-zone dcn0 --volume $VOL_ID pet-server-dcn0
您可以通过在 dcn0 边缘站点的 ceph-mon 容器中运行 rbd 命令来验证卷是否基于镜像,以列出卷池。
$ sudo podman exec ceph-mon-$HOSTNAME rbd --cluster dcn0 -p volumes ls -l NAME SIZE PARENT FMT PROT LOCK volume-28c6fc32-047b-4306-ad2d-de2be02716b7 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 excl $
确认您可以创建实例的根卷的 cinder 快照。确保服务器停止以静止数据以创建干净的快照。使用 --force 选项,因为实例关闭时卷状态会一直
使用
。openstack server stop pet-server-dcn0 openstack volume snapshot create pet-volume-dcn0-snap --volume $VOL_ID --force openstack server start pet-server-dcn0
列出 dcn0 Ceph 集群上 volumes 池的内容,以显示新创建的快照。
$ sudo podman exec ceph-mon-$HOSTNAME rbd --cluster dcn0 -p volumes ls -l NAME SIZE PARENT FMT PROT LOCK volume-28c6fc32-047b-4306-ad2d-de2be02716b7 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 excl volume-28c6fc32-047b-4306-ad2d-de2be02716b7@snapshot-a1ca8602-6819-45b4-a228-b4cd3e5adf60 8 GiB images/8083c7e7-32d8-4f7a-b1da-0ed7884f1076@snap 2 yes
A.1.5. 确认可以在站点之间创建和复制镜像快照
验证您可以在 dcn0 网站创建新镜像。确保服务器停止以静止数据来创建干净的快照:
NOVA_ID=$(openstack server show pet-server-dcn0 -f value -c id) openstack server stop $NOVA_ID openstack server image create --name cirros-snapshot $NOVA_ID openstack server start $NOVA_ID
将镜像从
dcn0
边缘站点复制到 hub 位置,这是 glance 的默认后端:IMAGE_ID=$(openstack image show cirros-snapshot -f value -c id) glance image-import $IMAGE_ID --stores central --import-method copy-image
有关 glance 多存储操作的更多信息,请参阅 具有多个存储的镜像服务。