存储相关ceph限制rbd只能在一台机器上面挂载
zphj1987需求
rbd是ceph的块接口,我们可以把设备map到服务器上面,然后当磁盘进行访问,有的软件能够基于块设备再做上层的高可用的写入的,所以,从软件来说,同一个设备在两台机器同时挂载,没有什么问题,但是如果应用层不加锁,随意的写入就可能破坏了数据,造成磁盘无法访问,那么这里就是利用ceph本身的功能来实现排它的挂载
也就是同一时刻,同一个rbd,只能被一个设备挂载
配置
查看rbd的属性
1 2 3 4 5 6 7 8 9
| [root@lab101 ~] 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 ~] /dev/nbd1 [root@lab101 ~] /dev/nbd2 [root@lab101 ~] /dev/nbd3 [root@lab101 ~] 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 ~] /dev/nbd0 [root@lab101 ~] 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 ~] Watchers: watcher=192.168.0.101:0/2977136172 client.44914 cookie=139788166375248
|
可以看到通过添加exclusive就可以独占的挂载,也就是挂载前,系统会自动的检查有没有被其它地方挂载,挂载了自然会上锁,本身挂载后是有这个watcher的,而加上exclusive这个参数后,会检查系统内部一个特殊的标签,这个内部就是这样实现挂载的排它的
总结
通过增加参数能够实现排它挂载,也就是唯一的挂载