gpt4 book ai didi

ssh - 将OpenNebula数据存储区从本地FS迁移到NFS的提案

转载 作者:行者123 更新时间:2023-12-02 14:30:02 25 4
gpt4 key购买 nike

我有一个带有2个运行KVM和本地文件存储的节点的OpenNebula实例。这意味着没有实时迁移,因为vm镜像被scp'到每个节点,因此也没有故障转移或实时迁移的选项。

我想实现NFS共享存储,并将VM从本地FS数据存储移动到NFS共享存储数据存储。 OpenNebula支持在数据存储区之间迁移VM,但仅将相同类型的数据存储区即从ssh迁移到ssh,而不将ssh迁移到shared。

我正在研究一种实现此目标的方法,并且希望收到一些有关为什么这是一个好主意或坏主意的反馈。

谢谢

最佳答案

OpenNebula当前不支持将VM从一种类型的数据存储迁移到另一种类型的数据存储。我一直在研究一种有效的方法,并希望在此处进行记录,以获取对该方法的一些反馈和意见。

数据存储类型主要由传输管理器驱动程序“TM_MAD”设置标识。不能通过Sunstone或cli更改此设置。因此,我们需要一种方法来做到这一点。这就是我所做的。我首先在一个VM中全新安装了OpenNebula 5.4.13,然后在VMware虚拟机中安装了两个都运行Debian 9的VM节点(不要忘记检查VM CPU选项的虚拟化)。

注意:这是一个实验过程,因此请确保先备份所有内容!

脚步

要迁移到其他商店,我们需要执行几个步骤。它们如下:

  • 设置NFS共享导出
  • 将VM镜像移至NFS共享并安装数据存储
  • 更改数据存储类型
  • 为NFS共享配置节点。

  • 设置NFS服务器

    我们要做的第一件事是设置我们要使用的NFS共享。我为基础数据存储文件夹使用了一个共享,但是您可以为来自不同NFS服务器的每个数据存储ID使用单独的共享。
  • 在NFS服务器上创建数据存储文件夹,即mkdir /share/one_datastore
  • 添加要导出的数据存储路径并导出新共享exportfs -rav
  • 确认共享可用showmount -e localhost

  • 准备迁移

    在我们修改数据存储之前,首先需要做一些事情:
  • 关闭所有正在运行的VM并取消部署它们。这将保存机器状态并将图像复制回图像存储
  • 停止Sunstone和OpenNebula服务systemctl stop opennebula && systemctl stop opennebula-sunstone

  • 迁移资料

    共享存储共享VM磁盘镜像,因此所有节点都可以访问相同的数据。因此,将VM数据复制到NFS共享以准备安装。
  • 从Sunstone前端服务器确认NFS共享showmount -e [nfs-server]
  • 创建一个临时文件夹以将共享安装在mkdir /mnt/datastore
  • 临时挂载NFS文件夹mount [nfs-server]:/share/one_datastore /mnt/datastore
  • 将数据存储文件夹移动到共享mv /var/lib/one/datastores/* /mnt/datastore/
  • OpenNebula数据存储文件夹现在位于NFS服务器上:ls /mnt/datastore应该列出文件夹0、1和2,
  • 挂载NFS共享以替换OpenNebula数据存储文件夹mount [nfs-server]:/share/one_datastore /var/lib/one/datastores
  • 确认文件夹可用ls /var/lib/one/datastores应该列出我们的3个文件夹0、1和2,
  • 将挂载添加到/ etc / fstab中,以在启动时持久保留挂载。

  • 现在已将OpenNebula前端配置为从NFS共享访问数据存储文件夹。接下来,我们要将数据存储类型从ssh更改为shared。

    更改数据存储类型

    数据存储区配置的数据存储在OpenNebula数据库 /var/lib/one/one.db中。我们可以通过编辑数据存储配置数据来更改驱动程序类型,该数据然后告诉OpenNebula使用哪个驱动程序以及如何处理数据存储数据。默认情况下,OpenNebula使用带MySql选项的sqlite数据库。我正在使用sqlite,但对于MySql同样适用。
  • 打开OpenNebula数据库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>
  • 现在更新SYSTEM数据存储记录。在数据库上运行以下命令,将[datastore-config]替换为刚修改的文本块update datastore_pool set body='[datastore-config]' where oid=0
  • 更新IMAGE数据存储区有点不同。没有共享选项,但是我们想使用sharedqcow2驱动程序。我使用了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
  • 检查NFS共享:showmount -e [nfs-server]
  • 将nfs共享安装到数据存储文件夹:mount [nfs-server]:/share/one_datastore /var/lib/one/datastores
  • 确认挂载,即df
  • 编辑/etc/fstab,添加挂载,以便在下次引导时挂载它。
  • 重新启动节点以确认数据存储nfs仍然存在,并重新启动它们!

  • 对所有主机节点重复上述步骤。

    测试一下

    在Sunstone中,转到“主机”选项卡,检查它们是否已启动并正在运行。接下来,获取虚拟机并进行部署。它应该部署没有任何问题,并开始启动。

    一旦启动并运行,我想在测试实时迁移时不断对虚拟机执行ping操作。因此,开始ping(在Windows中为 ping [vm-ip] -t),然后在Sunstone中打开VM并“实时迁移”到另一个节点。观察ping并检查日志以确保成功。我发现我必须刷新显示,然后转到主机TAB以检查VM是否已迁移。之后,它显示正确,但我认为它是浏览器中的缓存问题。实时迁移后,您仍然应该可以看到ping正常运行,结果可能是一次ping失败。

    结论

    这就是我过去从ssh本地存储迁移到共享存储的过程。我已经对其进行了测试,并且可以正常使用。但是,如果您对此过程有任何疑问或意见,请告诉我们。如果有任何我忽略的陷阱,请也让我知道。

    好吧,玩得开心。我打算尝试将共享存储移至某种共享群集,例如Ceph或GlusterFS!

    关于ssh - 将OpenNebula数据存储区从本地FS迁移到NFS的提案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51452408/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com