[Ceph] 同一个块存储镜像的多物理机挂载问题


一 块存储调用方式

Ceph的块存储有多种使用方式:
1 KRBD方式 : 本文章重点讨论方式
基于内核映射的调用方式,通过Kernel中的RBD模块实现访问后端存储
2 利用QEMU模拟器挂载到虚拟机中
3 librbd方式:API库调用

二 同一个块存储镜像的多物理机挂载问题

这里我们采用KRBD的方式时,关于这个问题其实可以拆分来分析:
1.能不能同一个块设备同时挂载到多个物理机?
能,但是互相不识,每个物理机的读写不会影响另一个物理机,也不会在另一个物理机上展示其文件;如果再挂一个新的物理机时,会集中把所有物理机的文件都拷过来;

  1. 关于块设备映射的文件系统格式化
    虽然会多个物理机,但只需要第一次用这个块设备时,将其格式化就好了,后续物理机不要格式化,不然的话,块设备信息全部丢失,其他物理机也很无奈;
    这个过程中,会出现不一致性,比如如果两个物理机都建了一个名字相同但大小不同的文件时,会以最后一个建的为准;

  2. 关于同一个块设备,我的建议是最好不要挂载多个物理机上;
    挂载多个物理机虽然可以,但如果重新映射挂载物理机时会把其他物理机上文件一起拷贝过来,便会互相影响了;

  3. 关于块存储的数据复原
    这里是指如果客户机挂掉了,必须用另个客户机时要把挂掉的客户机数据拷贝过来,便出现了同一个块设备挂载多个客户机了,另个客户机此时会复原原来的那个客户机数据的,这里经过小数据的测试验证。

  4. 期间遇到的一些问题
    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

四 块存储的一些常见命令

  1. 创建镜像,也可以叫块设备。
rbd create foo2 --size 2048 --image-feature layering --image-shared
  1. 创建内核映射,将块设备映射到操作系统。
sudo rbd map foo2 --name client.admin
  1. 查看块设备映射列表
rbd showmapped
  1. 删除块设备映射
sudo rbd unmap /dev/rbd/rbd/foo2
  1. 导入导出块设备
rbd import --image-format 2 /root/test1  rbd/foo2 
rbd export  rbd/foo2  /root/test1
  1. 创建快照
    rbd snap create rbd/foo2@snap1
  2. 查看快照
    rbd snap ls rbd/foo2
  3. 回滚快照
    rbd snap rollback rbd/foo2@snap1
  4. 删除快照
    rbd snap rm rbd/foo2@snap1
  5. 删除镜像
    rbd rm rbd/foo2
  6. 挂载、解挂块设备
sudo mount -t ext4 -o discard  /dev/rbd/rbd/foo2 /mnt/cc3
umount /mnt/cc3
  1. 格式化块设备映射
    sudo mkfs.ext4 -m0 /dev/rbd/rbd/foo2
  2. 镜像空间大小
    rbd diff rbd/foo2 | awk '{ SUM += $2 } END { print SUM/1024/1024 " MB" }'

PS: 这个有时在多物理机挂载场景下会不准

你可能感兴趣的:([Ceph] 同一个块存储镜像的多物理机挂载问题)