热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

oVirt锁定机制SANLock介绍

SANLock介绍sanlock守护程序管理具有共享存储的主机群集上运行的应用程序的租约。所有租赁管理和协调都是通过在共享存储上读写块来完成的。使用两种类型的租约,

SANLock

介绍

sanlock守护程序管理具有共享存储的主机群集上运行的应用程序的租约。所有租赁管理和协调都是通过在共享存储上读写块来完成的。使用两种类型的租约,每种租约基于不同的算法:

  • 增量租约的获取速度很慢,并且需要常规I / O才能共享存储。增量租赁存在于单个存储扇区中。获取增量租约涉及对该扇区的读取和写入,并通过特定的延迟将其分开。一旦获得租约,必须通过定期更新该部门的时间戳来续订租约。sanlock在内部使用增量租约在host_id上保留租约。host_id租约可防止两个主机使用相同的host_id,并根据续订提供基本的主机活动信息。

  • paxos租约通常可以快速获取,并且sanlock使它们可以作为通用资源租约提供给应用程序。paxos租约存在于1MB的共享存储中(对于4k扇区为8MB)。获取Paxos租约涉及以磁盘Paxos算法指定的特定顺序读取和写入max_hosts(2000)扇区。paxos租约在内部使用host_id表示租约的所有者,如果不同的主机使用相同的host_id,则算法将失败。因此,增量租约提供了paxos租约中使用的唯一host_id。paxos租约还指代delta租约,以检查host_id是否有效。

在使用sanlock之前,用户必须为每个主机分配一个host_id,该值是12000之间的一个数字。不应为两个主机赋予相同的host_id(即使增量租约尝试检测到此错误)。sanlock将存储池视为锁空间。每个不同的存储池(例如来自不同来源的存储池)通常会定义为具有唯一锁空间名称的单独锁空间。

必须为Sanlock保留并初始化此存储空间的一部分,以存储增量租约。每个要使用锁空间的主机必须首先在其锁空间内的host_id号上获得增量租约。(请参见add_lockspace操作/ api)。锁空间中2000个增量租约所需的空间(对于2000个可能的host_id)为1MB(4k扇区为8MB)。(这是单个paxos租约所需的大小)。

有关更多信息,请参见

  • sanlock(8)
  • wdmd(8)
  • https://pagure.io/sanlock/blob/master/f/README.mk

VDSMSANLock

存储域版本3起,VDSM正在利用SANLock 执行以下任务:

  • 获取SPM资源
  • 获取卷资源

注意:在以前的所有存储域版本中,都不会激活SANLock

VDSM中的锁空间和资源

VDSM使用UUID作为名称为每个存储域分配一个锁空间。例如:对于块存储域'1dfcd18e-b179-4b95-aef6-f0fba1a3db45',锁空间为

  1dfcd18e-b179-4b95-aef6-f0fba1a3db45:0:/dev/1dfcd18e-b179-4b95-aef6-f0fba1a3db45/ids:0

对于存储域中存在的每个卷,将创建一个资源并分配其租约:

  • 块域:在具有预定偏移量的租约LV中(取决于元数据偏移量)
  • 文件域:在扩展名为“ .lease”的文件中,具有与卷文件相同的名称和位置

SPM资源位于偏移量为0租约文件/ LV上(临时,它将移至其他偏移量以允许无缝域升级)。

包含SANLock资源的Libvirt XML

VDSMlibvirt准备在存储域版本3上运行VMXML 包括获取卷资源所需的所有信息:

``vm1   ...``     ...``              ...`` `` ```c29ca345-4aab-42f1-97c5-bdf967073d22` ``7b1cff35-9482-4946-9654-adf1db5ecd10` `` ``     ...``

有关libvirt如何处理租赁的更多信息,请参考其特定文档[1] [2]

VDSM SANLock

connectStoragePool,VDSM正在获取池中所有存储域上的锁空间。libvirt稍后将使用获取的锁空间来获取虚拟机的卷。

sanlock日志文件调试

/var/log/messages

包括来自sanlockwdmd/ dev / watchdog驱动程序的重要警告或错误。在此找到的任何sanlockwdmd消息都应进行调查。

/var/log/sanlock.log

包括/ var / log / messages中的所有sanlock警告和错误,以及sanlock管理的每个锁空间和资源的记录。

/var/log/sanlock.log中的锁空间条目:

TIME sNUM lockspace LNAME:HOSTID:/dev/VG/LV:OFFSET

  • TIME –当地单调时间

  • sNUM – NUM是此锁空间uuid的短整数缩写。其他日志消息中使用sNUM来引用此锁定空间。每次启动sanlock守护程序时,NUM都会重置为1。

  • LNAME –锁空间名称,vdsm将此名称设置为该锁空间的uuid

  • HOSTID –本地主机ID

  • / dev / VG / LV:OFFSET –此锁空间所在的磁盘区域

/var/log/sanlock.log中的资源条目:

TIME sNUM:rNUM resource LNAME:RNAME:/dev/VG/LV:OFFSET for X,Y,PID

  • TIME –当地单调时间

  • sNUM –短锁空间标识符(请参见上文)

  • rNUM – NUM是此资源uuid的短整数缩写。在其他日志消息中使用rNUM引用此锁空间。每次启动sanlock守护程序时,NUM都会重置为1。

  • LNAME-锁空间名称(来自vdsm的uuid)

  • RNAME –资源名称,vdsm将此资源名称设置为uuid

  • / dev / VG / LV:OFFSET –此资源所在的磁盘区域

  • X,Y,PID – PID是请求此租约的进程,X是pid使用的内部连接ID,Y是用于连接的fd编号

更改日志记录级别

可以使用两个sanlock守护程序命令行选项控制写入/ var / log / messages/var/log/sanlock.log的信息量:

-L pri 在优先级和日志文件中最多写入日志(-1无)

-S pri 优先级和最高syslog写入日志记录(-1无)

pri是与在中定义的日志优先级相对应的整数/usr/include/sys/syslog.h:

#define LOG_EMERG       0       /* system is unusable */

#define LOG_ALERT       1       /* action must be taken immediately */

#define LOG_CRIT        2       /* critical conditions */

#define LOG_ERR         3       /* error conditions */

#define LOG_WARNING     4       /* warning conditions */

#define LOG_NOTICE      5       /* normal but significant condition */

#define LOG_INFO        6       /* informational */

#define LOG_DEBUG       7       /* debug-level messages */

默认值为

  • -L 4 因此,从警告到EMERG的日志消息将写入/var/log/sanlock.log
  • -S 3 因此,从ERR到EMERG的日志消息将写入/ var / log / messages

因此,例如,要将所有调试消息都写入/var/log/sanlock.log,则应使用-L 7

sanlock对存储问题的响应

sanlock恢复的原因是存储连接丢失或来自存储的I / O响应时间变慢。存储是指写入Sanlock租约的设备或文件。

sanlock守护程序会以固定的间隔连续写入存储以更新其租约。如果Sanlock I / O到存储的时间未在固定时间内完成,则Sanlock守护程序将进入恢复状态。恢复从sanlock守护程序开始,尝试使用受影响存储上的租约杀死(pid)任何pid。如果10SIGTERM超过10秒后没有任何pid退出,则sanlock将尝试kill(SIGKILL)。如果pid仍在固定时间内没有退出,则看门狗将触发,从而重置主机。如果所有pid都在必要的时间内退出,则看门狗将被更新并且不会触发。

在达到恢复超时之前,sanlock将记录与续订失败和租约过旧有关的错误。如果发现这些情况,明智的做法是减少存储或主机上的I / O负载,以避免超过阈值以进行实际恢复。

   14:27:54 / 13256 (sanlock successfully renews lease)

   14:27:58 / 13260 (storage connection blocked to begin test)

   14:28:14 / 13276 (sanlock starts next scheduled lease renewal 20 sec after last)

  • 以下消息(不是日志消息)的背景

 14:28:15 sanlock [123]:13277 LNAME aio收集0x7f7f7c0008c0:0x7f7f7c0008d0:0x7f7f9dd72000结果-5:0匹配res 14:28:15 sanlock [123]:13277 s1 delta_renew读取rv -5偏移量0 / dev / VG / LV 14:28:15 sanlock [123]:13277 s1更新错误-5 delta_length 0 last_success 13256

  • sanlock报告第一个I / O错误
  • 如果I / O超时而不是快速失败,则第一个错误可能会迟到14:28:24 / 13286。
  • 这些消息针对每个I / O错误重复一次,频率介于每秒两次和每10秒一次。
  • 根据I / O问题的类型,可能会出现部分或全部这些行。

 14:28:54 sanlock [123]:13316 s1 check_our_lease警告60 last_success 13256 14:28:55 sanlock [123]:13317 s1 check_our_lease警告61 last_success 13256…14:29:13 sanlock [123]:13335 s1 check_our_lease警告79 last_success 13256

  • 在上次成功续订后的io_renewal_warn秒(60)内,每秒出现一次租赁期限警告。
  • 尚无不良影响;这些警告在实际租赁到期之前。

 14:29:14 sanlock [123]:13336 s1 check_our_lease失败80

  • 上次成功续订后的id_renewal_fail秒(80),租约到期。
  • 此时恢复开始;sanlock开始杀死pid。

 14:29:14 wdmd [111]:测试pid 12437更新失败13256到期13336

  • 来自wdmd的第一个警告出现,表明看门狗将触发并重置主机,除非所有pid在10秒内退出(或续约)。

wdmdsanlock问题的响应

如果sanlock守护程序在使用时被杀死或以其他方式退出,则控制/ dev / watchdogwdmd守护程序将记录错误,警告看门狗未处于活动状态,并将很快过期。此时,做任何事情都为时已晚,看门狗将重置主机。

sanlock超时

sanlock守护程序具有大量不同的但错综复杂的超时。所有这些都是从io_timeout派生的,它是10秒:一个i / osanlock认为失败之前可以花费的时间。

可以调整I / O超时,但是所有主机使用相同的I / O超时值至关重要。sanlock不会检测主机是否使用不同的I / O超时,并且这种错误配置可能导致数据损坏。当sanlock守护程序启动时,它将添加一个条目到/ var / log / messages中,其中包括基本超时值:

   sanlock daemon started 2.0 aio 1 10 renew 20 80 ...

  • aio 1 –启用异步I / O
  • 10 – io_timeout
  • renew 20 80 – id_renewal_seconds id_renewal_fail_seconds(续约和租约到期前的续约时间)

sanlock实时过程调试

调试sanlock守护进程。

  # sanlock client status [-D]

这将显示当前正在管理的所有锁空间,租约和pid-D包括其他内部调试信息。

  # sanlock client host_status -s LOCKSPACE [-D]

这将显示所有正在监视的host_id租约的状态。LOCKSPACE可以只是锁空间名称/ uuid-D包括其他内部调试信息。

  # sanlock client log_dump

这将转储sanlock守护程序的内部近期调试消息的循环缓冲区。

参考文献

[1] http://libvirt.org/formatdomain.html#elementsLease

[2] http://libvirt.org/locking.html

 


推荐阅读
  • XAMPP 遇到 404 错误:无法找到请求的对象
    在使用 XAMPP 时遇到 404 错误,表示请求的对象未找到。通过详细分析发现,该问题可能由以下原因引起:1. `httpd-vhosts.conf` 文件中的配置路径错误;2. `public` 目录下缺少 `.htaccess` 文件。建议检查并修正这些配置,以确保服务器能够正确识别和访问所需的文件路径。 ... [详细]
  • [转]doc,ppt,xls文件格式转PDF格式http:blog.csdn.netlee353086articledetails7920355确实好用。需要注意的是#import ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 本文详细解析了使用C++实现的键盘输入记录程序的源代码,该程序在Windows应用程序开发中具有很高的实用价值。键盘记录功能不仅在远程控制软件中广泛应用,还为开发者提供了强大的调试和监控工具。通过具体实例,本文深入探讨了C++键盘记录程序的设计与实现,适合需要相关技术的开发者参考。 ... [详细]
  • PHP预处理常量详解:如何定义与使用常量 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • Framework7:构建跨平台移动应用的高效框架
    Framework7 是一个开源免费的框架,适用于开发混合移动应用(原生与HTML混合)或iOS&Android风格的Web应用。此外,它还可以作为原型开发工具,帮助开发者快速创建应用原型。 ... [详细]
  • 本文讨论了在进行 MySQL 数据迁移过程中遇到的所有 .frm 文件报错的问题,并提供了详细的解决方案和建议。 ... [详细]
  • 详解 Qt 串口通信程序全程图文 (4)
    Qt串口通信程序全程图文是本文介绍的内容,本文一开始先讲解对程序的改进,在文章最后将要讲解一些重要问题。1、在窗口中加入一些组合框ComboBox&# ... [详细]
  • 在软件开发过程中,经常需要将多个项目或模块进行集成和调试,尤其是当项目依赖于第三方开源库(如Cordova、CocoaPods)时。本文介绍了如何在Xcode中高效地进行多项目联合调试,分享了一些实用的技巧和最佳实践,帮助开发者解决常见的调试难题,提高开发效率。 ... [详细]
  • 在HTML布局中,即使将 `top: 0%` 和 `left: 0%` 设置为元素的定位属性,浏览器中仍然会出现空白填充。这个问题通常与默认的浏览器样式、盒模型或父元素的定位方式有关。为了消除这些空白,可以考虑重置浏览器的默认样式,确保父元素的定位方式正确,并检查是否有其他CSS规则影响了元素的位置。 ... [详细]
  • 本文探讨了 Kafka 集群的高效部署与优化策略。首先介绍了 Kafka 的下载与安装步骤,包括从官方网站获取最新版本的压缩包并进行解压。随后详细讨论了集群配置的最佳实践,涵盖节点选择、网络优化和性能调优等方面,旨在提升系统的稳定性和处理能力。此外,还提供了常见的故障排查方法和监控方案,帮助运维人员更好地管理和维护 Kafka 集群。 ... [详细]
  • iOS 设备唯一标识获取的高效解决方案与实践
    在iOS 7中,苹果公司再次禁止了对MAC地址的访问,使得开发者无法直接获取设备的物理地址。为了在开发过程中实现设备的唯一标识,苹果推荐使用Keychain服务来存储和管理唯一的标识符。此外,还可以结合其他技术手段,如UUID和广告标识符(IDFA),以确保设备的唯一性和安全性。这些方法不仅能够满足应用的需求,还能保护用户的隐私。 ... [详细]
  • JavaScript XML操作实用工具类:XmlUtilsJS技巧与应用 ... [详细]
  • 本文介绍了UUID(通用唯一标识符)的概念及其在JavaScript中生成Java兼容UUID的代码实现与优化技巧。UUID是一个128位的唯一标识符,广泛应用于分布式系统中以确保唯一性。文章详细探讨了如何利用JavaScript生成符合Java标准的UUID,并提供了多种优化方法,以提高生成效率和兼容性。 ... [详细]
author-avatar
putongren1980
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有