Libvirt 共享存储池

Libvirt 共享存储池

我希望这是一个简短的问题。我正在运行:

  • CENTOS 9
  • 虚拟机管理程序
  • 起搏器、DLM、lvmlockd、fence_scsi

我有一个简单的双节点 KVM 集群,其中我在连接的使用 GFS2 格式化的 iSCSI LUN 上设置了一个 LVM 逻辑卷。我一直在遵循 RH 的“配置和管理高可用性集群指南“。

从起搏器、LVM 锁定、隔离、共享文件系统的角度来看,情况看起来不错:

[root@lab-kvm-01 ~]# pcs status --full
Cluster name: kvm_cluster
Cluster Summary:
  * Stack: corosync (Pacemaker is running)
  * Current DC: lab-kvm-01.domain.local (1) (version 2.1.6-10.1.el9-6fdc9deea29) - partition with quorum
  * Last updated: Wed Dec  6 15:11:19 2023 on lab-kvm-01.domain.local
  * Last change:  Wed Dec  6 12:10:47 2023 by root via cibadmin on lab-kvm-02.domain.local
  * 2 nodes configured
  * 7 resource instances configured

Node List:
  * Node lab-kvm-01.domain.local (1): online, feature set 3.17.4
  * Node lab-kvm-02.domain.local (2): online, feature set 3.17.4

Full List of Resources:
  * Clone Set: locking-clone [locking]:
     * Resource Group: locking:0:
      * dlm     (ocf:pacemaker:controld):        Started lab-kvm-01.domain.local
      * lvmlockd        (ocf:heartbeat:lvmlockd):        Started lab-kvm-01.domain.local
    * Resource Group: locking:1:
      * dlm     (ocf:pacemaker:controld):        Started lab-kvm-02.domain.local
      * lvmlockd        (ocf:heartbeat:lvmlockd):        Started lab-kvm-02.domain.local
  * scsi-shooter        (stonith:fence_scsi):    Started lab-kvm-01.domain.local
  * Clone Set: shared_vg-clone [shared_vg]:
    * Resource Group: shared_vg:0:
      * shared_lv       (ocf:heartbeat:LVM-activate):    Started lab-kvm-01.domain.local
    * Resource Group: shared_vg:1:
     * shared_lv       (ocf:heartbeat:LVM-activate):    Started lab-kvm-02.domain.local

Migration Summary:

Fencing History:
  * unfencing of lab-kvm-02.domain.local successful: delegate=lab-kvm-02.domain.local, client=pacemaker-controld.1642, origin=lab-kvm-01.domain.local, completed='2023-12-06 14:42:24.976410 -05:00'
  * unfencing of lab-kvm-01.domain.local successful: delegate=lab-kvm-01.domain.local, client=pacemaker-controld.1642, origin=lab-kvm-01.domain.local, completed='2023-12-06 14:26:16.176473 -05:00'

Tickets:

PCSD Status:
  lab-kvm-01.domain.local: Online
  lab-kvm-02.domain.local: Online

Daemon Status:
  corosync: active/enabled
  pacemaker: active/enabled
  pcsd: active/enabled

此时我希望做的是将此共享存储添加为 libvirt 存储池。但是,在 libvirt 文档中,设置共享存储池似乎有点模糊。目前,在定义存储池后,我遇到的情况是启动池时出现锁定错误:

[root@lab-kvm-01 ~]# virsh pool-define-as shared_pool logical --source-name vg_gfs2 --target /dev/vg_gfs2/
Pool shared_pool defined

[root@lab-kvm-01 ~]# virsh pool-start shared_pool
error: Failed to start pool shared_pool
error: internal error: Child process (/usr/sbin/vgchange -aly vg_gfs2) unexpected exit status 5:   LV locked by other host: vg_gfs2/lv_gfs2
  Failed to lock logical volume vg_gfs2/lv_gfs2.

所以现在回过头来,我有几个问题:

  1. 您究竟如何为 KVM / QEMU 集群设置共享存储池?显然我想要一个像 GFS2 这样的共享文件系统。让 Pacemaker 管理 DLM、lvmlocking 等就好了。

  2. 在阅读手册页和 libvirt 文档时,设置逻辑存储池似乎是在卷组上完成的。我猜 libvirt 应该识别现有的文件系统?然而,看起来 libvirt 想要对激活和管理卷组有一定的控制权。我曾希望我可以简单地将存储提供给 libvirt,它会很高兴。

  3. 还有pool-build选项提到创建文件系统。但它如何知道我想要一个共享文件系统并相应地管理锁定?

希望以上内容有意义。我想要的只是为我的虚拟机提供一个共享存储池。我只是对如何使用 libvirt 进行设置感到困惑。

相关内容