libvirt锁定机制virtlockd介绍

本页描述了将virtlockd 服务用作 虚拟机磁盘互斥的锁定驱动程序插件。

virtlockd背景 

virtlockd守护程序是一个单用途二进制文件,专门用于代表正在运行的虚拟机获取和持有锁的任务。它旨在提供低开销,便携式锁定方案可在虚拟化主机上以最小的配置开销立即使用。它利用POSIX fcntl咨询锁定功能来保持锁定,大多数常用的文件系统都支持该锁定。

virtlockd守护程序设置 

在大多数操作系统中,virtlockd守护程序本身不需要任何前期配置工作。当存在libvirtd时,默认情况下会安装它,并注册一个systemd套接字单元,以便在首次需要时自动启动守护程序。但是,对于早于systemdOS,有必要在启动libvirtd之前在引导时启动它。在RHEL / Fedora发行版上,可以通过以下方式实现

# chkconfig virtlockd on

# service virtlockd start

以上说明适用于以特权方式运行的virtlockd实例,并由以特权方式运行的libvirtd守护程序使用。如果以非特权用户身份运行libvirtd,它将始终自动也产生非特权virtlockd守护程序实例。这根本不需要任何设置。

libvirt锁定插件配置 

一旦virtlockd守护程序运行或设置为自动启动,下一步就是配置libvirt lockd插件。每个使用virtlockdlibvirt驱动程序都有一个单独的配置文件。对于QEMU,我们将进行编辑 /etc/libvirt/qemu-lockd.conf

lockd插件的默认行为是直接在与guest虚拟机<disk>元素关联的虚拟磁盘映像上获取锁。这样可以确保它无需配置即可立即使用,从而为共享文件系统(例如NFS)上的磁盘映像提供锁定。它不为块设备支持的存储提供任何跨主机保护,因为在/ dev中的设备节点上获取的锁仅适用于主机。也可能是保存磁盘映像的文件系统不支持fcntl锁的情况。

为了解决这些问题,可以告诉lockd获取间接文件上的锁。本质上,锁定将计算完全限定路径的SHA256校验和,并在给定目录中创建一个长度为零的文件,其文件名为校验和。然后它将获得对该文件的锁定。假设分配给来宾的块设备正在使用稳定路径(例如/ dev / disk / by-path / XXXXXXX),则这将允许锁在主机之间应用。可以通过设置配置设置来启用此功能,该设置指定在其中创建锁定文件的目录。所引用的目录当然应该放置在共享文件系统(例如NFS)上,所有可以看到共享块设备的主机都可以访问该文件系统。

$ su - root

# augtool -s set \

  /files/etc/libvirt/qemu-lockd.conf/file_lockspace_dir \

  "/var/lib/libvirt/lockd/files"

   

如果客户机将LVMSCSI块设备用于其虚拟磁盘,则每个设备都有一个唯一的标识符。可以告诉lockd使用此UUID作为获取锁的基础,而不是文件名的SHA256和。这样的好处是,即使每个主机上给定块设备的文件路径不同,锁定保护也将起作用。

$ su - root

# augtool -s set \

  /files/etc/libvirt/qemu-lockd.conf/scsi_lockspace_dir \

  "/var/lib/libvirt/lockd/scsi"

# augtool -s set \

  /files/etc/libvirt/qemu-lockd.conf/lvm_lockspace_dir \

  "/var/lib/libvirt/lockd/lvm"

   

重要的是要记住,在/etc/libvirt/qemu-lockd.conf虚拟机上启动任何虚拟机之前,必须将对文件所做的更改 传播到所有主机。这样可以确保所有主机都使用相同的锁定机制

QEMU / KVM驱动程序配置 

从版本1.0.2开始,QEMU驱动程序可以使用virtlockd插件。但是,现成的配置当前使用nop锁管理器插件。为了获得磁盘保护,因此必须重新配置QEMU以激活锁定的 驱动程序。这可以通过编辑QEMU驱动程序配置文件(/etc/libvirt/qemu.conf)并更改lock_manager配置可调参数来实现。

$ su - root

# augtool -s  set /files/etc/libvirt/qemu.conf/lock_manager lockd

# service libvirtd restart

   

每次启动guest虚拟机时,virtlockd守护程序都将直接获取磁盘文件上的锁,或者基于SHA256 sum在已配置的后备目录之一中获取锁。要检查是否已按预期获取锁,可以运行lslocks工具。

# lslocks
COMMAND           PID  TYPE SIZE MODE  M      START        END PATH
dmeventd          444 POSIX   4B WRITE 0          0          0 /run/dmeventd.pid
(unknown)         675 FLOCK      WRITE 0          0          0 /run/lock...
rpcbind           693 FLOCK      WRITE 0          0          0 /run/rpcbind.lock
lxcfs             728 POSIX   4B WRITE 0          0          0 /run/lxcfs.pid
iscsid            908 POSIX   4B WRITE 0          0          0 /run/iscsid.pid
(unknown)        1269 FLOCK      WRITE 0          0          0 /run...
(unknown)        1260 FLOCK      WRITE 0          0          0 /run...
(unknown)        1261 FLOCK      WRITE 0          0          0 /run...
(unknown)        1428 FLOCK      WRITE 0          0          0 /run...
(unknown)        1433 FLOCK      WRITE 0          0          0 /run...
gnome-shell      2673 FLOCK      WRITE 0          0          0 /run/user/0/wayland-0.lock
virtlockd        3229 POSIX   4B WRITE 0          0          0 /run/virtlockd.pid
3                 891 POSIX      WRITE 0          0          0 /run/lxc/var/lib/lxc/monitor-fifo
libvirtd          917 POSIX   3B WRITE 0          0          0 /run/libvirtd.pid
(unknown)         953 FLOCK      WRITE 0          0          0 /...
master           1253 FLOCK  33B WRITE 0          0          0 /var/spool/postfix/pid/master.pid
master           1253 FLOCK  33B WRITE 0          0          0 /var/lib/postfix/master.lock
cron             1263 FLOCK   5B WRITE 0          0          0 /run/crond.pid
(unknown)        1429 FLOCK      WRITE 0          0          0 /run...
(unknown)        1438 FLOCK      WRITE 0          0          0 /run...
tracker-store    2908 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-store    2908 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
tracker-miner-f  2899 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-miner-f  2899 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
tracker-miner-a  2902 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-miner-a  2902 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
virtlogd         3207 POSIX   4B WRITE 0          0          0 /run/virtlogd.pid

virtlockd        3229 POSIX  40G WRITE 0          0          0 /var/lib/libvirt/images/win2k16.qcow2

# lslocks
COMMAND           PID  TYPE SIZE MODE  M      START        END PATH
dmeventd          444 POSIX   4B WRITE 0          0          0 /run/dmeventd.pid
(unknown)         675 FLOCK      WRITE 0          0          0 /run/lock...
rpcbind           693 FLOCK      WRITE 0          0          0 /run/rpcbind.lock
lxcfs             728 POSIX   4B WRITE 0          0          0 /run/lxcfs.pid
iscsid            908 POSIX   4B WRITE 0          0          0 /run/iscsid.pid
(unknown)        1269 FLOCK      WRITE 0          0          0 /run...
(unknown)        1260 FLOCK      WRITE 0          0          0 /run...
(unknown)        1261 FLOCK      WRITE 0          0          0 /run...
(unknown)        1428 FLOCK      WRITE 0          0          0 /run...
(unknown)        1433 FLOCK      WRITE 0          0          0 /run...
gnome-shell      2673 FLOCK      WRITE 0          0          0 /run/user/0/wayland-0.lock
virtlockd        7588 POSIX      WRITE 0          0          0 /var/lib/libvirt/lockd/files/826549533d536d3457793a12babdc6f792066d2edb7e7e6292e0d450b9ef1cbd
3                 891 POSIX      WRITE 0          0          0 /run/lxc/var/lib/lxc/monitor-fifo
(unknown)         953 FLOCK      WRITE 0          0          0 /...
master           1253 FLOCK  33B WRITE 0          0          0 /var/spool/postfix/pid/master.pid
master           1253 FLOCK  33B WRITE 0          0          0 /var/lib/postfix/master.lock
cron             1263 FLOCK   5B WRITE 0          0          0 /run/crond.pid
(unknown)        1429 FLOCK      WRITE 0          0          0 /run...
(unknown)        1438 FLOCK      WRITE 0          0          0 /run...
tracker-store    2908 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-store    2908 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
tracker-miner-f  2899 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-miner-f  2899 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
tracker-miner-a  2902 POSIX 3.6M READ  0 1073741826 1073742335 /root/.cache/tracker/meta.db
tracker-miner-a  2902 POSIX  32K READ  0        128        128 /root/.cache/tracker/meta.db-shm
virtlogd         3207 POSIX   4B WRITE 0          0          0 /run/virtlogd.pid
virtlockd        7588 POSIX   4B WRITE 0          0          0 /run/virtlockd.pid
libvirtd         7645 POSIX   4B WRITE 0          0          0 /run/libvirtd.pid

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值