【vdsm 源代码漫步】vdsm的存储(2)

  1. 本章讨论两个话题,一个是sanlock,一个是resoure manager。
  2. vdsm里面最早使用的并不是sanlock,而是自己开发的“/usr/libexec/safelease/safelease”,目前已经不再使用。随后使用了sanlock。但是sanlock也存在一点问题,就是resource偏移与resource名称没有记录映射,需要应用程序自己去管理。所以vdsm在虚拟机高可用使用到lease时,对sanlock偏移进行了管理(xlease.py)。另一方面,整体来看sanlock的lease还是比较分散而不够集中。 比如 lockspace是 dom_md/ids,在块存储下,每个volume的资源租约(包含spm选择)统一放到了dom_md/leases下面。在文件存储下,每个volume的lease,放到了各自的目录下。dom_md/leases仅仅存放了spm资源。当然虚拟机高可用的lease放到了dom_md/xlease里面。(engine的lockspace和resource都是单独处理的。本章节不涉及这个话题) 在xlease.py代码里面希望改变这种局面,将sanlock所有使用的lease统一放到xlease里面(xlease.py预留了架构,但是目前还没有进行实现)。

sanlock涉及的代码包含 clusterlock.py xlease.py。先看clusterlock.py。clusterlock.py里面有三个类SafeLease, SANLock, LocalLock(localFsSD.py使用)。这三个类有相同的对外接口,保证了互相兼容。参考sd.py, blockSD.py等代码,会发现在使用时候,会将三种不同的类放到一个table里面,根据不同的版本使用不同的类。

xlease.py目前主要是供虚拟机高可用使用。xlease.py单独设计了一个xlease租约, 长得如下这个样子:

【vdsm 源代码漫步】vdsm的存储(2)

其中lockspace 用来将来替换dom_md/ids(当前还没有用), sanlock internal resource被保留没有使用。lockspace, index….每一项被称为一个slot。

其中类IndexMetadata描述了512字节的index元数据,Record类描述了index里面的一个映射。在映射里面最重要的两个变量是resource name 和offset。在原生的sanlock中,二者的对应关系是委托给应用程序的,或者创建rindex。在xlease中,通过index进行管理。LeasesVolume用来增删一个Lease,这不仅包含通过sanlock删除lease本身,也包含增删index。VolumeIndex是管理index这个slot,包含512字节的元数据以及64字节的映射们。

DirectFile等类主要是落盘使用的类。

3.. 我们讨论一下resourceManager.py和resourceFactory.py这两个模块。这两个模块用来管理同一台主机上的各类lock资源。这一块的代码写的比较结构化,主要代码是resourceManager.py。关键是要理解里面的callback函数,是在emit时候才被调用的。这里需要深刻理解python的包的概念。另外,注意变量realObj,它实际上是factory创建出来的,事实上SimpleResourceFactory创建出来的就是None。而NameSpace有4类

# ResourceManager Lock Namespaces

STORAGE = “00_storage”

IMAGE_NAMESPACE = ’01_img’

VOLUME_NAMESPACE = ’02_vol’

LVM_ACTIVATION_NAMESPACE = ’03_lvm’

VOLUME_LEASE_NAMESPACE = “04_lease”

每个namespce有一个工厂生产某一类型resource。其中Owner很多时候是一个任务。事实上任务在进入running状态之前有时需要获取资源。由代码可知在资源忙时候,会一直等待,直到超时。

参考文献:

  1. https://blog.csdn.net/maokexu123/article/details/40790939
  2. https://cloud.tencent.com/developer/article/1651000
  3. man sanlock
0 条回复 A 作者 M 管理员 E
    所有的伟大,都源于一个勇敢的开始!
欢迎您,新朋友,感谢参与互动!欢迎您 {{author}},您在本站有{{commentsCount}}条评论