[Ceph]|[Ceph] 同一个块存储镜像的多物理机挂载问题
一 块存储调用方式
Ceph的块存储有多种使用方式:
1 KRBD方式 : 本文章重点讨论方式
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
2 利用QEMU模拟器挂载到虚拟机中
3 librbd方式:API库调用
二 同一个块存储镜像的多物理机挂载问题
这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:
1.能不能同一个块设备同时挂载到多个物理机?
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;
- 关于块设备映射的文件系统格式化
虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;
- 关于同一个块设备,我的建议是最好不要挂载多个物理机上;
挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;
- 关于块存储的数据复原
这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。
- 期间遇到的一些问题
5.1 文件系统格式化不需要每次内核映射完毕后都调用,因为格式化意味着清空数据.
5.2 如果重复umount和mount操作时,不要在mount的目标路径下进行操作,因为会出现mount后调用ls命令不刷新的场景,切记~
5.3 在快照回滚或者其他场景时偶尔出现下面的问题
//问题
mount: wrong fs type, bad option, bad superblock//解决
fsck -t ext4/dev/rbd/rbd/foo2
三 RBD模块 rbd模块是内核中内置的一种驱动模块,可以驱动Ceph块存储;
注意的是3.10.0版本以上内核才会默认集成该驱动。
//查看RBD模块信息
modinfo rbd
//查看RBD模块所属的软件包
rpm -qf /lib/modules/3.10.0-327.el7.x86_64/kernel/drivers/block/rbd.ko
四 块存储的一些常见命令
- 创建镜像,也可以叫块设备。
rbd create foo2 --size 2048 --image-feature layering --image-shared
- 创建内核映射,将块设备映射到操作系统。
sudo rbd map foo2 --name client.admin
- 查看块设备映射列表
rbd showmapped
- 删除块设备映射
sudo rbd unmap /dev/rbd/rbd/foo2
- 导入导出块设备
rbd import --image-format 2 /root/test1rbd/foo2
rbd exportrbd/foo2/root/test1
- 创建快照
rbd snap create rbd/foo2@snap1
- 查看快照
rbd snap ls rbd/foo2
- 回滚快照
rbd snap rollback rbd/foo2@snap1
- 删除快照
rbd snap rm rbd/foo2@snap1
- 删除镜像
rbd rm rbd/foo2
- 挂载、解挂块设备
sudo mount -t ext4 -o discard/dev/rbd/rbd/foo2 /mnt/cc3
umount /mnt/cc3
- 格式化块设备映射
sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
- 镜像空间大小
rbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'
推荐阅读
- 标签、语法规范、内联框架、超链接、CSS的编写位置、CSS语法、开发工具、块和内联、常用选择器、后代元素选择器、伪类、伪元素。
- SpringBoot调用公共模块的自定义注解失效的解决
- Node.js中readline模块实现终端输入
- python自定义封装带颜色的logging模块
- 解决SpringBoot引用别的模块无法注入的问题
- 「#1-颜龙武」区块链的价值是什么()
- Python(pathlib模块)
- Apache多路复用模块(MPMs)介绍
- 云花
- 默示录【二】