限制rbd只能在一台机器上面挂载

需求

rbd是ceph的块接口,我们可以把设备map到服务器上面,然后当磁盘进行访问,有的软件能够基于块设备再做上层的高可用的写入的,所以,从软件来说,同一个设备在两台机器同时挂载,没有什么问题,但是如果应用层不加锁,随意的写入就可能破坏了数据,造成磁盘无法访问,那么这里就是利用ceph本身的功能来实现排它的挂载

也就是同一时刻,同一个rbd,只能被一个设备挂载

配置

查看rbd的属性

1
2
3
4
5
6
7
8
9
[root@lab101 ~]# rbd info gamebase
rbd image 'gamebase':
size 30 GiB in 7680 objects
order 22 (4 MiB objects)
snapshot_count: 1
id: 5e6552f9f0e2
block_name_prefix: rbd_data.5e6552f9f0e2
format: 2
features: layering, exclusive-lock, object-map, fast-diff

我们进行挂载测试

1
2
3
4
5
6
7
8
9
10
11
12
[root@lab101 ~]# rbd-nbd map gamebase
/dev/nbd1
[root@lab101 ~]# rbd-nbd map gamebase
/dev/nbd2
[root@lab101 ~]# rbd-nbd map gamebase
/dev/nbd3
[root@lab101 ~]# rbd status gamebase
Watchers:
watcher=192.168.0.101:0/2358144113 client.44873 cookie=139788367701840
watcher=192.168.0.101:0/1355685081 client.44900 cookie=139976943609808
watcher=192.168.0.101:0/136931942 client.44896 cookie=140146057947088
watcher=192.168.0.101:0/643167227 client.44893 cookie=140482743117776

可以看到不加限制的时候,同一个设备在同一台机器也是可以多次挂载,多台机器更不用说了

加选项后挂载测试

1
2
3
4
5
6
7
8
9
10

[root@lab101 ~]# rbd-nbd map gamebase --exclusive
/dev/nbd0
[root@lab101 ~]# rbd-nbd map gamebase --exclusive
rbd-nbd: failed to acquire exclusive lock: 2024-07-01T18:18:26.548+0800 7f32c49ddb80 -1 librbd: failed to request exclusive lock: (30) Read-only file system
(30) Read-only file system

[root@lab101 ~]# rbd status gamebase
Watchers:
watcher=192.168.0.101:0/2977136172 client.44914 cookie=139788166375248

可以看到通过添加exclusive就可以独占的挂载,也就是挂载前,系统会自动的检查有没有被其它地方挂载,挂载了自然会上锁,本身挂载后是有这个watcher的,而加上exclusive这个参数后,会检查系统内部一个特殊的标签,这个内部就是这样实现挂载的排它的

总结

通过增加参数能够实现排它挂载,也就是唯一的挂载