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
    评论
完整版:https://download.csdn.net/download/qq_27595745/89522468 【课程大纲】 1-1 什么是java 1-2 认识java语言 1-3 java平台的体系结构 1-4 java SE环境安装和配置 2-1 java程序简介 2-2 计算机中的程序 2-3 java程序 2-4 java类库组织结构和文档 2-5 java虚拟机简介 2-6 java的垃圾回收器 2-7 java上机练习 3-1 java语言基础入门 3-2 数据的分类 3-3 标识符、关键字和常量 3-4 运算符 3-5 表达式 3-6 顺序结构和选择结构 3-7 循环语句 3-8 跳转语句 3-9 MyEclipse工具介绍 3-10 java基础知识章节练习 4-1 一维数组 4-2 数组应用 4-3 多维数组 4-4 排序算法 4-5 增强for循环 4-6 数组和排序算法章节练习 5-0 抽象和封装 5-1 面向过程的设计思想 5-2 面向对象的设计思想 5-3 抽象 5-4 封装 5-5 属性 5-6 方法的定义 5-7 this关键字 5-8 javaBean 5-9 包 package 5-10 抽象和封装章节练习 6-0 继承和多态 6-1 继承 6-2 object类 6-3 多态 6-4 访问修饰符 6-5 static修饰符 6-6 final修饰符 6-7 abstract修饰符 6-8 接口 6-9 继承和多态 章节练习 7-1 面向对象的分析与设计简介 7-2 对象模型建立 7-3 类之间的关系 7-4 软件的可维护与复用设计原则 7-5 面向对象的设计与分析 章节练习 8-1 内部类与包装器 8-2 对象包装器 8-3 装箱和拆箱 8-4 练习题 9-1 常用类介绍 9-2 StringBuffer和String Builder类 9-3 Rintime类的使用 9-4 日期类简介 9-5 java程序国际化的实现 9-6 Random类和Math类 9-7 枚举 9-8 练习题 10-1 java异常处理 10-2 认识异常 10-3 使用try和catch捕获异常 10-4 使用throw和throws引发异常 10-5 finally关键字 10-6 getMessage和printStackTrace方法 10-7 异常分类 10-8 自定义异常类 10-9 练习题 11-1 Java集合框架和泛型机制 11-2 Collection接口 11-3 Set接口实现类 11-4 List接口实现类 11-5 Map接口 11-6 Collections类 11-7 泛型概述 11-8 练习题 12-1 多线程 12-2 线程的生命周期 12-3 线程的调度和优先级 12-4 线程的同步 12-5 集合类的同步问题 12-6 用Timer类调度任务 12-7 练习题 13-1 Java IO 13-2 Java IO原理 13-3 流类的结构 13-4 文件流 13-5 缓冲流 13-6 转换流 13-7 数据流 13-8 打印流 13-9 对象流 13-10 随机存取文件流 13-11 zip文件流 13-12 练习题 14-1 图形用户界面设计 14-2 事件处理机制 14-3 AWT常用组件 14-4 swing简介 14-5 可视化开发swing组件 14-6 声音的播放和处理 14-7 2D图形的绘制 14-8 练习题 15-1 反射 15-2 使用Java反射机制 15-3 反射与动态代理 15-4 练习题 16-1 Java标注 16-2 JDK内置的基本标注类型 16-3 自定义标注类型 16-4 对标注进行标注 16-5 利用反射获取标注信息 16-6 练习题 17-1 顶目实战1-单机版五子棋游戏 17-2 总体设计 17-3 代码实现 17-4 程序的运行与发布 17-5 手动生成可执行JAR文件 17-6 练习题 18-1 Java数据库编程 18-2 JDBC类和接口 18-3 JDBC操作SQL 18-4 JDBC基本示例 18-5 JDBC应用示例 18-6 练习题 19-1 。。。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值