热门标签 | 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

 


推荐阅读
  • 高可用架构_MySQL高可用架构设计
    文章来自于https:www.jianshu.compd3107bda2963PHP进阶学习交流QQ群:983229225Mysql复制功能介绍Mysql的复制功能提 ... [详细]
  • 本文讨论了在VMWARE5.1的虚拟服务器Windows Server 2008R2上安装oracle 10g客户端时出现的问题,并提供了解决方法。错误日志显示了异常访问违例,通过分析日志中的问题帧,找到了解决问题的线索。文章详细介绍了解决方法,帮助读者顺利安装oracle 10g客户端。 ... [详细]
  • Sleuth+zipkin链路追踪SpringCloud微服务的解决方案
    在庞大的微服务群中,随着业务扩展,微服务个数增多,系统调用链路复杂化。Sleuth+zipkin是解决SpringCloud微服务定位和追踪的方案。通过TraceId将不同服务调用的日志串联起来,实现请求链路跟踪。通过Feign调用和Request传递TraceId,将整个调用链路的服务日志归组合并,提供定位和追踪的功能。 ... [详细]
  • 1、etcnginxconf.ddefault.conf,添加如下信息:location{try_files$uri$urirouter;rootho ... [详细]
  • [BUUCTF] xman_2019_nooocall
    xman_2019_nooocall总结可以输入shellcode,但是又不能使用任何系统调用。因此,可以使用侧信道攻击,通过一些现象、反馈等猜测出flag。侧信道常用的反馈有错误 ... [详细]
  • 主从复制_mysql主从复制简介
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。  ... [详细]
  • MySQL 的 NULL 值是怎么存储的?
    MySQL 的 NULL 值是怎么存储的? ... [详细]
  • 篇首语:本文由编程笔记#小编为大家整理,主要介绍了记录一次MySQL两千万数据的大表优化解决过程,提供三种解决方案相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • Linux如何安装Mongodb的详细步骤和注意事项
    本文介绍了Linux如何安装Mongodb的详细步骤和注意事项,同时介绍了Mongodb的特点和优势。Mongodb是一个开源的数据库,适用于各种规模的企业和各类应用程序。它具有灵活的数据模式和高性能的数据读写操作,能够提高企业的敏捷性和可扩展性。文章还提供了Mongodb的下载安装包地址。 ... [详细]
  • Java在运行已编译完成的类时,是通过java虚拟机来装载和执行的,java虚拟机通过操作系统命令JAVA_HOMEbinjava–option来启 ... [详细]
  • Vagrant虚拟化工具的安装和使用教程
    本文介绍了Vagrant虚拟化工具的安装和使用教程。首先介绍了安装virtualBox和Vagrant的步骤。然后详细说明了Vagrant的安装和使用方法,包括如何检查安装是否成功。最后介绍了下载虚拟机镜像的步骤,以及Vagrant镜像网站的相关信息。 ... [详细]
  • React基础篇一 - JSX语法扩展与使用
    本文介绍了React基础篇一中的JSX语法扩展与使用。JSX是一种JavaScript的语法扩展,用于描述React中的用户界面。文章详细介绍了在JSX中使用表达式的方法,并给出了一个示例代码。最后,提到了JSX在编译后会被转化为普通的JavaScript对象。 ... [详细]
  • 近期,某用户在重启RAC一个节点的数据库实例时,发现启动速度非常慢。同时业务部门反馈连接RAC存活节点的业务也受影响。通过对日志的分析, ... [详细]
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社区 版权所有