ceph锁测试

实验一:

两个客户端都正常映射块设备,同时写入,判断是否会冲突,写入不同偏移的数据是否会冲突

复制代码
# 新建一个 10GiB 的镜像(大小随你改)
rbd create rbdpool/disk1 --size 10G --image-feature layering,exclusive-lock,object-map,fast-diff
rbd info rbdpool/disk1

sudo rbd  map rbdpool/disk1
rbd device list | grep rbdpool/disk1
# 假设出来是 /dev/rbd0

两个客户端

ClientA:生成已知数据并写入 offset=0

复制代码
dd if=/dev/urandom of=/tmp/payloadA.bin bs=4M count=256 status=progress
sha256sum /tmp/payloadA.bin

# 写入 offset=0:seek=0
dd if=/tmp/payloadA.bin of=/dev/rbd0 bs=4M seek=0 conv=fsync oflag=direct status=progress
sync

ClientB:生成已知数据并写入 offset=2GiB

复制代码
dd if=/dev/urandom of=/tmp/payloadB.bin bs=4M count=256 status=progress
sha256sum /tmp/payloadB.bin

# 2GiB / 4MiB = 512
sudo dd if=/tmp/payloadB.bin of=/dev/rbd0 bs=4M seek=512 conv=fsync oflag=direct status=progress

在 ClientA 读取 B 的区域(offset=2GiB):

复制代码
sudo dd if=/dev/rbd0 of=/tmp/readB_from_A.bin bs=4M skip=512 count=256 iflag=direct status=progress
sha256sum /tmp/readB_from_A.bin

在 ClientB 读取 A 的区域(offset=0):

复制代码
sudo dd if=/dev/rbd0 of=/tmp/readA_from_B.bin bs=4M skip=0 count=256 iflag=direct status=progress
sha256sum /tmp/readA_from_B.bin

发现

sha256(readB_from_A.bin) == sha256(payloadB.bin)

sha256(readA_from_B.bin) == sha256(payloadA.bin)

偏移不同两边写入都会永久保存,互不影响

删除

rm -f /tmp/payloadA.bin /tmp/payloadB.bin /tmp/readB_from_A.bin /tmp/readA_from_B.bin

实验二:

一个客户端用exclusive的方式映射,另外一个客户端是否能映射

复制代码
root@node3:~# rbd map rbdpool/disk1
rbd: sysfs write failed
In some cases useful info is found in syslog - try "dmesg | tail".
rbd: map failed: (30) Read-only file system

实验三:

一个客户端用exclusive的方式映射,另外一个客户端以read only的方式可以映射吗

发现用read only 映射的客户端,rbd status的时候,不会显示,并且也不可以写入

复制代码
root@node3:~# sudo dd if=/tmp/payloadB.bin of=/dev/rbd0 bs=4M seek=512 conv=fsync oflag=direct status=progress
dd: error writing '/dev/rbd0': Operation not permitted
1+0 records in
0+0 records out
0 bytes copied, 0.0157501 s, 0.0 kB/s

也不可以格式化

复制代码
root@node3:~# mkfs.ext4 /dev/rbd0
mke2fs 1.45.5 (07-Jan-2020)
/dev/rbd0: Operation not permitted while setting up superblock

root@node3:~# lsblk
NAME                                                                                            MAJ:MIN RM   SIZE RO TYPE MOUNTPOINT
loop0                                                                                             7:0    0  63.3M  1 loop /snap/core20/1828
loop1                                                                                             7:1    0     4K  1 loop /snap/bare/5
loop2                                                                                             7:2    0  63.8M  1 loop /snap/core20/2686
loop3                                                                                             7:3    0    74M  1 loop /snap/core22/2216
loop4                                                                                             7:4    0    74M  1 loop /snap/core22/2193
loop5                                                                                             7:5    0 346.3M  1 loop /snap/gnome-3-38-2004/119
loop6                                                                                             7:6    0  91.7M  1 loop /snap/gtk-common-themes/1535
loop7                                                                                             7:7    0  48.1M  1 loop /snap/snapd/25935
loop8                                                                                             7:8    0 516.2M  1 loop /snap/gnome-42-2204/226
loop9                                                                                             7:9    0    46M  1 loop /snap/snap-store/638
loop10                                                                                            7:10   0  49.9M  1 loop /snap/snapd/18357
loop11                                                                                            7:11   0 349.7M  1 loop /snap/gnome-3-38-2004/143
loop12                                                                                            7:12   0  12.2M  1 loop /snap/snap-store/1216
sda                                                                                               8:0    0    40G  0 disk
├─sda1                                                                                            8:1    0   512M  0 part /boot/efi
├─sda2                                                                                            8:2    0     1K  0 part
└─sda5                                                                                            8:5    0  39.5G  0 part /
sdb                                                                                               8:16   0    20G  0 disk
└─ceph--67e5115d--61fb--4ad3--8c52--7a11393e2cc8-osd--block--a5dc8956--4f50--44b4--aa4e--2e1d2f37d7f0
                                                                                                253:0    0    20G  0 lvm
sdc                                                                                               8:32   0    20G  0 disk
└─ceph--bbcf8d83--260b--447c--9324--14f78508f732-osd--db--b99fe826--c37a--47a8--be5b--f719142b823f
                                                                                                253:1    0     5G  0 lvm
sr0                                                                                              11:0    1  1024M  0 rom
rbd0                                                                                            252:0    0    10G  1 disk

但是可以读其他客户端写入的内容,并且校验是对的

复制代码
root@node3:~# dd if=/dev/rbd0 of=/tmp/readA_from_B.bin bs=4M skip=0 count=256 iflag=direct status=progress
1035993088 bytes (1.0 GB, 988 MiB) copied, 6 s, 172 MB/s
256+0 records in
256+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 6.32134 s, 170 MB/s
root@node3:~# sha256sum /tmp/readA_from_B.bin
e4d2c9611ad1a047790b9b8b64eafca8f6f1c54361f24ee47db8a66b41ca4fe2  /tmp/readA_from_B.bin
相关推荐
wniuniu_3 天前
rbd镜像的锁
ceph
JNU freshman6 天前
从 Ceph 16(Pacific)到 Ceph 18(Reef):cephadm 的伸缩性演进与 cephadm agent 到底“成熟”了吗?
java·大数据·ceph
wniuniu_6 天前
概括。。。。
ceph
JNU freshman6 天前
使用 cephadm + Docker 镜像在三台服务器上部署 Ceph 集群(含网络规划与 OSD DB/WAL 分离)
服务器·ceph·docker
JNU freshman6 天前
Ceph RBD:一个镜像能否被多客户端同时映射?如何避免“多端同时写入”风险
ceph
wniuniu_7 天前
ceph16-18差异
ceph
腾讯数据架构师8 天前
cube studio 存储资源对接ceph
ceph·kubernetes·cube-studio·ai平台
哼了个哈8 天前
[Ceph 14.2.22] 使用Ceph原生命令部署单机集群
ceph
lisanmengmeng19 天前
cephfs rbd应用
linux·运维·服务器·ceph