CephCeph

ceph rbd:nbd原理

2018-03-23  本文已影响141人  chnmagnus

前言

rbd是ceph提供的块存储服务。主要有几种使用场景:

map成块设备,主要有两种方式:

经过考察,发现RBD Kernel Module项目更新缓慢,其功能已经远远落后于librbd提供的功能。像striping、object map、exclusive lock等功能均不支持。

RBD-NBD方式,基于Network Block Device(nbd)实现,并且nbd已经经过了很长时间的实践,稳定性有所保证。对块设备的请求,由nbd间接调用librbd完成,可以支持最新的特性,是比较理想的方式。

下文将对rbd通过nbd进行读写和map的实现进行介绍。

nbd

nbd是一种起源于linux的轻量级块访问协议,可以让你将任何存储方式作为操作系统的块设备来使用。它主要分成两部分,server端和client端。client端位于linux内核。server端需要由你实现。

当我们对/dev/nbdx设备发起io操作时,会由内核中的nbd client封装成nbd请求通过tcp网络发送给对应的nbd server,server端解析请求,做出处理后,返回结果到nbd client端。

image.png

有关协议的内容和操作方式,见官方文档
注意,这里文档里称内核中的部分为server,我们实现的部分为client。

rbd-nbd

ceph社区为nbd实现了一个server,这个server会接收来自内核中nbd的请求,然后转调librdb完成请求,返回结果。

rbd对nbd的支持全部位于rbd-nbd.cc文件,大概1000行代码。

命令基本实现

一些要点

写的不是很详细,有问题私戳我吧。。

参考

https://sourceforge.net/p/nbd/code/ci/master/tree/doc/proto.md
https://nbd.sourceforge.io/
https://github.com/ceph/ceph/blob/master/src/tools/rbd_nbd/rbd-nbd.cc

上一篇 下一篇

猜你喜欢

热点阅读