原理
rbd通过内核的NBD驱动映射成网络设备,用户可以通过读写nbd0…等网络设备,来实现对rbd设备的读写。
优点:
- nbd设备成功将客户端和rbd隔离开,不再依赖以往的内核rbd驱动;
- nbd与librbd的读写在应用层完成,可使用rbd cache提高性能;
- rbd的数据保护,可通过ceph命令完成,不需要nbd支持。
缺点:
- 要求系统必须支持nbd驱动;
- 内核nbd与librbd通信,需要通过文件socket通信,增加数据拷贝,会影响性能;
架构
- 客户端直接读写nbd设备(同步)
- 内核nbd驱动,将客户端的读写信息转化成nbd_request,并通过socket发送给NBDServer(rbd-nbd实现)
- NBDServer是守护进程,一个快设备对应一个nbd设备,对应一个守护进程
- NBDServer收到内核nbd驱动的nbd_reqeust后,向librbd发起同步读写请求
- librbd 向 Ceph集群读写数据
- NBDServer接收到librbd同步读写结果后,向内核nbd驱动发送reply
- 内核nbd驱动收到reply,向客户端return
关键数据结构
Reqeust & Reply
1 | struct nbd_request { |