我有一个带有2个运行KVM和本地文件存储的节点的OpenNebula实例。这意味着没有实时迁移,因为vm映像被scp'到每个节点,因此也没有故障转移或实时迁移的选项。
我想实现NFS共享存储,并将VM从本地FS数据存储移动到NFS共享存储数据存储。 OpenNebula支持在数据存储区之间迁移VM,但仅迁移相同类型的数据存储区,即将'ssh'转换为'ssh',而不将'ssh'转换为'shared'。
我正在研究一种实现此目标的方法,并且希望获得一些反馈,以了解为什么这是一个好主意。
谢谢
答案 0 :(得分:0)
OpenNebula当前不支持将VM从一种类型的数据存储迁移到另一种不同类型的数据存储。我一直在研究一种有效的方法,并希望在此处进行记录,以获取对该方法的一些反馈和意见。
数据存储类型主要由传输管理器驱动程序“ TM_MAD”设置标识。不能通过Sunstone或cli更改此设置。因此,我们需要一种方法来做到这一点。这就是我所做的。我首先在一个VM中全新安装了OpenNebula 5.4.13,然后在VMware虚拟机中安装了两个均运行Debian 9的VM节点(不要忘记检查VM CPU选项的虚拟化)。
注意:这是一个实验过程,因此请确保先备份所有内容!
要迁移到其他商店,我们需要执行几个步骤。它们如下:
我们要做的第一件事是设置我们要使用的NFS共享。我为基本数据存储文件夹使用了一个共享,但是您可以为来自不同NFS服务器的每个数据存储ID使用单独的共享。
mkdir /share/one_datastore
,exportfs -rav
,showmount -e localhost
在修改数据存储区之前,首先需要做一些事情:
systemctl stop opennebula && systemctl stop opennebula-sunstone
。共享存储共享VM磁盘映像,因此所有节点都可以访问相同的数据。因此,将VM数据复制到NFS共享以准备安装。
showmount -e [nfs-server]
,mkdir /mnt/datastore
,mount [nfs-server]:/share/one_datastore /mnt/datastore
,mv /var/lib/one/datastores/* /mnt/datastore/
ls /mnt/datastore
应列出文件夹0、1和2,mount [nfs-server]:/share/one_datastore /var/lib/one/datastores
,ls /var/lib/one/datastores
应列出我们的3个文件夹0、1和2,OpenNebula前端现已配置为从NFS共享访问数据存储文件夹。接下来,我们要将数据存储类型从ssh更改为shared。
用于数据存储配置的数据存储在OpenNebula数据库/var/lib/one/one.db
中。我们可以通过编辑数据存储配置数据来更改驱动程序类型,该数据然后告诉OpenNebula使用哪个驱动程序以及如何处理数据存储数据。默认情况下,OpenNebula使用带MySql选项的sqlite数据库。我正在使用sqlite,但对MySql相同。
sqlite3 /var/lib/one/one.db
,.tables
查看所有表。 datastore_pool
是我们要修改的表,select * from datastore_pool;
中的所有记录将导致屏幕上充满了配置数据。每个记录都有一个标识符oid
,该标识符与数据存储区ID相匹配,如下所示(前0是默认SYSTEM数据库的数据存储区ID): 0|system|<DATASTORE><ID>0</ID><UID>0</UID><GID>0</GID><UNAME>oneadmin</UNAME><GNAME>oneadmin</GNAME><NAME>system</NAME><PERMISSIONS><OWNER_U>1</OWNER_U><OWNER_M>1</OWNER_M><OWNER_A>0</OWNER_A><GROUP_U>1</GROUP_U><GROUP_M>0</GROUP_M><GROUP_A>0</GROUP_A><OTHER_U>0</OTHER_U><OTHER_M>0</OTHER_M><OTHER_A>0</OTHER_A></PERMISSIONS><DS_MAD><![CDATA[-]]></DS_MAD><TM_MAD><![CDATA[ssh]]></TM_MAD><BASE_PATH><![CDATA[/var/lib/one//datastores/0]]></BASE_PATH><TYPE>1</TYPE><DISK_TYPE>0</DISK_TYPE><STATE>0</STATE><CLUSTERS><ID>0</ID></CLUSTERS><TOTAL_MB>0</TOTAL_MB><FREE_MB>0</FREE_MB><USED_MB>0</USED_MB><IMAGES></IMAGES><TEMPLATE><ALLOW_ORPHANS><![CDATA[NO]]></ALLOW_ORPHANS><DISK_TYPE><![CDATA[FILE]]></DISK_TYPE><DS_MIGRATE><![CDATA[YES]]></DS_MIGRATE><RESTRICTED_DIRS><![CDATA[/]]></RESTRICTED_DIRS><SAFE_DIRS><![CDATA[/var/tmp]]></SAFE_DIRS><SHARED><![CDATA[NO]]></SHARED><TM_MAD><![CDATA[ssh]]></TM_MAD><TYPE><![CDATA[SYSTEM_DS]]></TYPE></TEMPLATE></DATASTORE>|0|0|1|1|0
body
中获取数据
(您可以运行select body from datastore_pool where oid=0;
)并复制到您喜欢的文本编辑器(该块以查找:<TM_MAD><![CDATA[ssh]]></TM_MAD>
替换为:<TM_MAD><![CDATA[shared]]></TM_MAD>
查找:<SHARED><![CDATA[NO]]></SHARED>
替换为:<SHARED><![CDATA[YES]]></SHARED>
update datastore_pool set body='[datastore-config]' where oid=0
,shared
或qcow2
驱动程序。我用了qcow2。因此:select body from datastore_pool where oid=1;
:查找:<TM_MAD><![CDATA[ssh]]></TM_MAD>
替换:<TM_MAD><![CDATA[qcow2]]></TM_MAD>
update datastore_pool set body='[datastore-config]' where oid=1;
,<TM_MAD><![CDATA[ssh]]></TM_MAD>
替换为<TM_MAD><![CDATA[shared]]></TM_MAD>
来更新FILES数据存储区(oid = 3),并使用上述方法进行更新。现在,数据存储已更新为使用共享驱动程序,让我们启动Sunstone并检查数据存储是否显示。
systemctl start opennebula && systemctl start opennebula-sunstone
跳到Sunstone网站并转到数据存储。打开每个数据存储区,以检查是否已启用SHARED,并且正确的驱动程序显示为共享或qcow2。
〜不要做任何事情〜仍然需要配置节点!
因此,由于我们停止并取消部署了VM,因此节点数据存储区中不应有任何数据。因此,我们可以将NFS共享设置到datastores文件夹。首先确认文件夹为空,并确保进行备份!请注意,这是一个实验过程!是的,让我们开始吧:
/var/lib/one/datastores
的内容。如果要将每个基于数据存储ID的文件夹装入其自己的NFS共享,则可以执行此操作,而不是整个数据存储文件夹。清空任何包含0、1和2文件夹的文件夹。否则,请从数据存储文件夹中删除所有文件夹,apt-get install nfs-common
,showmount -e [nfs-server]
,mount [nfs-server]:/share/one_datastore /var/lib/one/datastores
,df
,/etc/fstab
,添加安装,以便将其安装在下次启动时。与所有主机节点重复。
在Sunstone中,转到“主机”选项卡,并检查它们是否已启动并正在运行。接下来,获取虚拟机并进行部署。它应该没有任何问题地部署并开始启动。
一旦启动并运行,我想在测试实时迁移时不断对虚拟机执行ping操作。因此,开始ping(在Windows中{ping [vm-ip] -t
),然后在Sunstone中打开VM并“实时迁移”到另一个节点。观察ping并检查日志以确保成功。我发现我必须刷新显示,然后转到主机TAB来检查VM是否已迁移。之后,它显示正确,但我认为它是浏览器中的缓存问题。实时迁移后,您仍然应该可以看到ping滚动,结果可能是一次ping失败。
这就是我用来从ssh本地存储迁移到共享存储的过程。我已经对其进行了测试,并且可以正常使用。但是,如果您对此过程有任何疑问或意见,请告诉我。如果有任何我忽略的陷阱,也请告诉我。
好吧,玩得开心。我打算尝试将共享存储移至某种共享群集,例如Ceph或GlusterFS!