一、场景说明:

    Ceph的运维过程中,管理员有时候会遇到Ceph的RBD设备,通过映射的方式给客户端进行使用,但是过段时间后,在服务端,你想知道到底某个pool的img被哪个客户端占用着。另外一种情况,比如想删除某个image,但那个image可能被客户端占用,如果该客户端出现了异常那么就会出现无法删除该image的情况。


二、分析过程:

Ceph中有一个watch/notify的机制(粒度是object),它的主要作用是在不同客户端之间进行消息通知,使得各客户端之间的状态能够保持一致,而每一个进行watch的客户端,对于ceph集群来说都是一个watcher。

# rbd info openshift01/openshift01-img01
rbd image 'openshift01-img01':
    size 102400 MB in 25600 objects
    order 22 (4096 kB objects)
    block_name_prefix: rbd_data.957f238e1f29
    format: 2
    features: layering
    flags:

说明:openshift01为pool的名称,openshift01-img01为img的名称。

# rados -p openshift01 listwatchers rbd_header.957f238e1f29
watcher=172.16.0.48:0/54296760 client.51052 cookie=1

说明:由上面输出结果可以知道,172.16.0.48为被映射的客户端。