DRBD&KVM复制是可能的?

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

服务器(一)KVM与qcow2图像

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

我的问题很简单,在服务器B上创build虚拟磁盘备份的最佳解决scheme是什么(虚拟机运行明显)。 DRBD是一个解决scheme?

如果你只是想在服务器B上复制服务器A的qcow2镜像,但是在A和B上都不需要同时访问它们,那么你可以在任何文件系统上使用DRBD(如ext4) ,在A上运行为Primary,在B上运行为Secondary。当A失败时,您可以将B上的DRBD切换到Primary,并在那里使用镜像。

如果你想要在A和B上同时使用这些图像,那么这将更加棘手。 一个集群文件系统可能会有所帮助,但我认为性能不会是正确的。

如果你只是想要复制镜像的一次,那么就停止A上的​​虚拟机,用scp / rsync / over-NFS /不pipe。 如果虚拟机必须在A上运行,那么为了获得一致的映像,您需要创build某种快照。 我不知道KVM和QCOW2,但也许他们提供了一些快照function。 如果没有,则LVM卷上存储图像时可能会有LVM快照。

为了在虚拟机上实现高可用性,您可以尝试将Ganeti和DRBD作为您的资源,但是在设置ganeti时将会有一些额外的工作,但是这种痛苦是值得的,因为这会让您的虚拟机pipe理真正stream畅。

我能想到的另一个select是使用gluster卷。 这将是超级简单的设置和安装,如果你有良好的硬件,那么性能应该是好的。

截至目前,我使用Jacek解释过的简单DRBD风格,我也在探索其他方法。

我一直在解决这个问题。 我已经得到这个工作2种不同的方式。

build立

我select使用原始格式在LV之上构build我的kvm访客系统。 我不知道这比在LV上的图像文件上做得更好,但这就是我要做的。 使用drbd来同步LVM物理分区将会简单得多,但是我想要运行多个LV,并且在hostA (需要drbd主angular色)上运行一个LV,另一个在hostB (也需要drbd主angular色)上运行。 所以我被卡住了,除非我去嘎嘎,但我不愿意采取另一种技术在这一点上。 我的存储堆栈已经是:

 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-installvmbuilder不适用于我)。 所以这就是我所做的:

hostAhastB正在运行Ubunut 14.04LTS,与OpenSSH服务器和虚拟化主机软件包一起安装,还安装了lvm2drbd8-utils 。 每个都有4个NICS,成对结合。 bond0桥接到br0并由guest bond1使用, bond1不桥接,并使用为drbd保留的子网。

KVM + DRBD方法1

部分A – 创buildKVM来宾

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

B部分 – configuration复制

  1. closuresKVM来宾系统。
  2. 使用lvresize来增加1 lun的LV大小。 lvresize -l +1 vg/guestlv
  3. 初始化drbd元数据。 drbdadm create-md /dev/vg/guestlv
  4. 创builddrbd资源文件。 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名称创build一个相同大小(新的+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设备切换到KVMconfiguration

  1. hostA ,运行virsh edit guestlv
  2. find<source dev='/dev/vg/guestlv'/>并将其更改为<source dev='/dev/drbd1'/>
  3. 保存并退出,启动您的虚拟机,validation它的工作。 关掉它。
  4. 等待drbd同步完成。
  5. 运行drbdadm secondary guest
  6. hostB ,运行drbdadm primary guest
  7. 在您的工作站上,使用virt-manager为存储创build一个具有一些垃圾卷的新guest virt-manager 。 安装开始后立即closures。
  8. hostB ,使用virsh edit guestlv并将存储设置为/dev/drbd1 。 启动虚拟机,validation它的工作,等等

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

  1. 设置/dev/drbd1 ,让它同步。
  2. 使用垃圾卷为存储创buildKVM来宾,请中止安装。
  3. 使用virsh-edit/dev/drbd1存储中进行交换。
  4. 启动它并运行安装。 有时候这个工作,有时我会得到在grub安装到/dev/vda一个停止显示错误。
  5. 如果你确实得到它的工作,closures虚拟机,交换drbd主要和辅助,configuration你的其他主机,testing等。