rbd vs rbd-nbd
两者功能一样,效果也没啥差别,只是实现方式有所不同; 前者使用内核的rbd模块访问ceph存储,当ceph较新(内核较旧)时,可能会有一些image的feature内核不支持,就不能map;后者使用librbd来访问ceph存储,基本不会存在feature不支持的情况,但是需要nbd内核模块(关于nbd内核模块的担心似乎也多余,nbd早就进入内核了,就算没有加载,rbd-nbd也会帮你加载的)。
同一个rbd image可以同时在一台服务器上map多次;但是只能mount一次,因为多次挂载后设备的uuid是同一个,文件系统不允许同时挂载两个相同uuid的设备的
同一个rbd image可以同时挂载到多个服务器上; (rbd的 –shared –image-shared 选项可以控制是否允许重复挂载)
–shared 允许给镜像加锁,避免写坏,实现特定条件下的共享
–image-shared 允许定义是否可以共享
也就是说,ceph的image是可以作为共享存储使用的(但是最好别这么做,没有任何机制保证并发写不会出问题)。
注意:
- 即使在两个不同的mnt名字空间,也不能同时分别mount同一个设备,依然有uuid冲突的问题
- 即使分别在不同的mnt名字空间执行rbd map,设备的uuid也都是一样的
- 即使在不同的服务器上执行rbd map,设备的uuid也都是一样的