Linux查看lvm元数据,LVM元数据服务lvmetad分析

lvmetad是LVM中用于处理元数据缓存的服务。

缓存状态

Empty : 系统中可用的设备还没有被添加到lvmetad。

Scanning : 部分系统中可用的设备已经被添加进lvmetad。

Initialized : 全部系统中可用的设备已经被添加进lvmetad。

Outdated : 还有系统或者存储时间没有被lvmetad处理。

Updated : 所有事件都已经被处理。

缓存过时(Outdated)的情况

MissingDev : 添加到系统中的设备还没有被添加进lvmetad。

RemovedDev : 从系统中移除的设备还没有被从lvmetad删除。

MissingVG : 写入磁盘的新VG还没有被添加进lvmetad。

RemovedVG : 从磁盘中删除的VG还没有被从lvmetad中删除。

ChangedVG : 磁盘中的VG元数据已经被修改,但是lvmetad还没有更新。

MissingPV : 写入磁盘的新PV还没有被添加进lvmetad。

RemovedPV : 从磁盘中删除的PV还没有被从lvmetad中删除。

ChangedPV : 磁盘中的PV元数据已经被修改,但是lvmetad还没有更新。

缓存状态转换

Empty -> Scanning

Scanning -> Initialized

Initialized -> Scanning

Initialized -> Outdated

Outdated -> Updated

Updated -> Outdated

Updated -> Scanning

Outdated -> Scanning

缓存状态转换的原因

Empty

启动或重启lvmetad服务。

Scanning

运行pvscan --cache命令。

运行任何global_filter不同的命令(token不匹配)。

当lvmetad处于Empty状态时,运行任何命令。

运行一个报告或显示命令时使用--foreign选项。

运行一个报告或显示命令时使用--shared选项。

运行一个命令时使用了lvmetad全局锁,且锁的状态发生改变。

Initialized

扫描完成。

Outdated

从系统中添加或删除设备。

创建、删除或修改一个VG。

创建、删除或修改一个PV。

Updated

接收并处理完所有事件。

不同缓存状态下的请求处理

Empty : 返回token错误。

Scanning : 返回token错误,并附带“updating”字符串。

Initialized : 正常响应所有请求。

Updated : 正常响应所有请求。

Outdated : 正常响应所有请求。

一般的状态转换步骤

正常情况下,状态转换一般是“Updated -> Scanning -> Initialized”,转换步骤是:

接收一个设置token为“updating”的请求, Scanning状态开始;

接收一个pv_clear_all请求来清除当前缓存;

接收一系列pv_found时间来重新构建缓存;

接收一个设置token为一个hash值,Initialized状态开始。

从Outdated向Updated的状态转换依赖与LVM命令发送给lvmetad的事件请求,比如说pv_found, pv_gone, vg_update, vg_remove。

注意:

当通过lvmlockd使用共享VG时,Outdated会持续较长时间,因此,在每次使用缓存前,lvmlockd会强制进行一次“Outdated -> Scanning -> Initialized”状态转换。

缓存的有效性

正常情况下,lvmetad通过处理来自客户端的提醒消息和系统的uevents来保持缓存处于最新状态。当使用lvmlockd时,当其他主机改变磁盘上的元数据时,也应该使本机的lvmetad元数据缓存变为过时状态。

为了解决这个问题,lvmetad元数据缓存增加了“无效”标志,当一个命令向lvmetad发送获取元数据请求时,在lvmetad返回元数据的同时,附带缓存“无效”标志。命令在收到响应后首先检查这个标志,如果无效则扫描磁盘,获取最新的元数据。最后把最新的元数据发送给lvmetad服务,并清除其“无效”标志,后面再有新的命令获取元数据时获取的就是最新的元数据了。

为了跟踪元数据“无效”状态,LVM元数据被分为两类,VG范围和全局范围:

VG范围 - 包括VG修改或者LV所有操作。

全局范围 - 包括VG的名称、孤立的物理卷。

当使用lvmetad时,分布式锁中会包含VG最新的seqno,或者全局锁会有一个全局计数器,当对锁使用Update操作后会增加这个序号。其他节点在获取锁时会把锁记录的序号与自身保存的序号进行比较,如果自身的较小则说明元数据过时,则从本地重新扫描元数据。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值