DRBD 和 KVM 复制可以吗?

DRBD 和 KVM 复制可以吗?

我有两台 KVM 服务器和一些虚拟机。

服务器(A)带有 qcow2 镜像的 KVM

服务器(B)KVM 为分区挂载 NFS(服务器 A 上存在 qcow2 映像)。

我的问题很简单,在服务器 B 上创建虚拟磁盘副本的最佳解决方案是什么(显然虚拟机正在运行)。DRBD 是一种解决方案吗?

答案1

如果您只想在服务器 B 上复制服务器 A 的 qcow2 映像,但不必在 A 和 B 上同时访问它们,那么您可以在其上使用带有任何文件系统(如 ext4)的 DRBD,在 A 上作为主服务器运行,在 B 上作为辅助服务器运行。当 A 出现故障时,您将能够将 B 上的 DRBD 切换为主服务器并在那里使用映像。

如果您希望这些图像同时在 A 和 B 上可用和使用,那么这将更加棘手。集群文件系统可能会有所帮助,但我认为性能不会好。

如果您只想一次性复制映像,则只需停止 A 上的虚拟机,然后使用 scp/rsync/over-NFS/whatever 复制映像。如果虚拟机必须在 A 上运行,那么为了获得一致的映像,您将需要制作某种快照。我不知道 KVM 和 QCOW2,但也许它们提供了一些快照功能。如果没有,那么如果您将映像存储在 LVM 卷上,LVM 快照可能会有。

答案2

看一眼https://alteeve.ca/w/2-Node_Red_Hat_KVM_Cluster_Tutorial它将引导您完成所有步骤。

答案3

为了实现虚拟机的高可用性,您可以尝试 Ganeti 和 DRBD 作为您的资源,虽然设置 Ganeti 几乎不需要做任何额外工作,但这种痛苦是值得的,因为它将使您的 VM 管理真正顺畅。

我能想到的另一个选择是使用 gluster 卷。它的设置和安装非常简单,如果你有好的硬件,那么性能应该会很好。

到目前为止,我按照 Jacek 解释的方式使用简单的 DRBD 风格,我也在探索其他方式。

答案4

我一直在研究这个问题。我用两种不同的方法解决了这个问题。

设置

我选择使用原始格式在 LV 之上构建我的 kvm 客户系统。我不知道这是否比将它们放在 LV 上的映像文件上更好,但这就是我要做的。使用 drbd 同步 LVM 物理分区会简单得多,但我想运行多个 LV,并让一个运行(hostA需要drbd主要角色),另一个运行hostB(也需要drbd主要角色)。所以除非我去 gluster,否则我会陷入困境,但目前我不愿意采用另一种技术。我的存储堆栈已经是:

KVM guest
drbd (drbd1)
lvm2 logical volume (guestlv)
lvm2 volume group (vg)
lvm2 physical volume (crypt)
dm-crypt (crypt)
gpt partitions (md_d0p1=root, md_d0p2=swap, md_d0p3=crypt)
mirror-RAID (md_d0)
gpt partition (single)
hard drive (2)

我必须解决的最大问题是virt-manager无法识别或让您使用drbd卷(对我来说virt-install不起作用vmbuilder)。 因此,这就是我所做的:

hostAhastB正在运行 Ubunut 14.04LTS,安装了 OpenSSH 服务器和虚拟化主机包,lvm2drbd8-utils安装了 和 。每个都有 4 个 NICS,成对绑定。bond0桥接到br0客户机并由其使用,bond1未桥接并使用为 保留的子网drbd

KVM + DRBD 方法 1

A 部分 - 创建 KVM 客户机

  1. 在 上创建 LV hostA
  2. 复制ubuntu-14.04.1-server-amd64.iso/var/lib/libvirt/images
  3. 在运行 Ubuntu Desktop 的客户端上,运行virt-manager
  4. 连接到hostA
  5. 打开Details窗口并使用存储选项卡添加 LVM 卷组。
  6. 配置一台新机器,使用安装ISO,LV用于存储,br0用于网络。
  7. 重新启动等,确保您的 LV 运行良好。

B 部分 - 配置复制

  1. 关闭 KVM 客户系统。
  2. 用于lvresize将 LV 大小增加 1 个 lun。lvresize -l +1 vg/guestlv
  3. 初始化drbd元数据。drbdadm create-md /dev/vg/guestlv
  4. 创建drbd资源文件。 file:/etc/drbd.d/guest.res resource guest { device /dev/drbd1; meta-disk internal; startup { become-primary-on hostA; wfc-timeout 30; outdated-wfc-timeout 20; degr-wfc-timeout 30; } net { cram-hmac-alg sha1; shared-secret sync_disk; } syncer { rate 100M; verify-alg sha1; } on hostA { address 192.168.2.1:7789; disk /dev/vg/guestlv; } on hostB { address 192.168.2.2:7789; disk /dev/vg/guestlv; } }
  5. hostB
    1. 使用资源文件中的卷组和 LV 名称,创建一个大小相同(新的 +1 大小!)的 LV。
    2. 跑步drbdadm create-md /dev/vg/guestlv
    3. 跑步drbdadm connect --discard-my-data guest
    4. 跑步drbdadm up guest
  6. hostA
    1. 跑步drbdadm up guest
    2. 跑步drbdadm primary guest

C 部分 - 将 drbd 设备切换到 KVM 配置

  1. 开启hostA,运行virsh edit guestlv
  2. 找到该行<source dev='/dev/vg/guestlv'/>并将其更改为<source dev='/dev/drbd1'/>
  3. 保存并退出,启动虚拟机,验证其是否正常工作。关闭它。
  4. 等待drbd同步完成。
  5. 跑步drbdadm secondary guest
  6. 继续hostB,跑drbdadm primary guest
  7. 在您的工作站上,使用virt-manager一些垃圾卷创建一个新的客户机用于存储。安装开始后立即关闭它。
  8. 在 上hostB,使用virsh edit guestlv并将存储设置为/dev/drbd1。启动虚拟机,验证其是否正常工作等。

KVM + DRBD 方法 2 与上面的非常相似,但是

  1. 设置/dev/drbd1并同步。
  2. 使用垃圾卷作为存储创建 KVM 客户机,中止安装。
  3. 用于virsh-edit交换存储/dev/drbd1
  4. 启动它并运行安装程序。有时这个方法有效,但有时我在安装 grub 时会遇到一个显示停止的错误/dev/vda
  5. 如果确实使其工作,请关闭虚拟机,交换drbd主主机和辅助主机,配置其他主机,进行测试等。

相关内容