SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Downloaden Sie, um offline zu lesen
rbd-nbd的设计实现及应用
汪 黎• 6
laurence.liwang@gmail.com
Ceph Block Solution
•rbd
• 在host上导出一个block device
• 内核实现
Ceph Block Solution
•qemu-rbd
• qemu的一个block driver, 在vm中导出一个磁盘
• guest os对该磁盘的访问请求会传递给qemu-rbd,
qemu-rbd调用librbd转化为Ceph的访问
• Bypass host kernel disk IO stack
Need Another Solution
•rbd
• 需要在kernel实现librbd所有功能, 由于应用比qemu-rbd
少,开发比librbd要滞后
• 内核模块出错影响域大
• 内核模块的灵活性和可移植性均不是很好
• 在非x86体系结构的平台上测试不够充分
•Container Scenario
• No qemu, thus no qemu-rbd
•VM live backup
• described later
传统NBD工作流程
• nbd kernel module
• 导出块设备文件/dev/nbdx
• nbd client
• 创建一个socket与nbd server建立连接
• 对/dev/nbdx调用NBD_SET_SOCK ioctl接口将该socket信息传入
kernel
• 调用NBD_DO_IT ioctl接口,进入nbd kernel module的代码, 创
建一个kernel thread,然后在内核监听socket, 收取处理nbd server
响应
• nbd kernel thread
• 接收块设备访问请求,然后通过socket将请求发送给server
• nbd server
• 将数据访问请求转化为对服务器本地磁盘或文件的访问
• 将响应通过socket发送给nbd client
NBD
•nbd在host导出一个block device
•对该device的所有访问请求都转发给用户空间程
序处理
•nbd提供一个块设备驱动框架,可支持在用户空间
实现块设备,类似FUSE支持在用户空间实现文件
系统
•Can we implement a Ceph block solution based on
nbd
rbd-nbd
•在用户空间实现一个rbd-nbd程序,即nbd client, 启
动时创建一个socketpair, 两个socket分别为csock,
dsock. 将csock利用NBD_SET_SOCK ioctl接口传
递给nbd kernel module
•nbd kernel module创建nbd kernel thread在队列一上
睡眠
•nbd client创建nbd server, nbd server创建两个线程,
reader, writer. reader监听dsock, writer在队列二上
睡眠
•nbd client调用NBD_DO_IT ioctl接口进入kernel监
听csock
rbd-nbd
•应用对/dev/nbdx的访问请求由nbd kernel module放到
队列一, 唤醒nbd kernel thread
•nbd kernel thread将请求通过csock发送给reader
•reader将请求放到队列二,调用librbd将请求发给ceph
•librbd将响应放到队列三, 唤醒writer
•writer将响应通过dsock发送给nbd client
•nbd client处理响应
rbd-nbd
read
write
flush
trim
read
write
flush
discard
reader
① ②
writer
librbd
④ ③
NBD
性能测试
•环境
• CPU: 2 Intel Xeon E5-2630 v4 @ 2.2G
• Memory: 128GB
• 12*8T SATA HDD
• fio
• ioengine: 测试librbd为rbd, 测试qemu-nbd, rbd-nbd为libaio
• iodepth: 256
• Ceph
• Luminous v12.2.2
Random Write
Sequential Read Write
Container Scenario
VM Live Backup
•Qemu Drive Mirror
• 将vm的本地镜像实时同步到Ceph
• 可作为vm本地盘的备份,以及快速热迁移的支持
•qemu-rbd的问题
• 稀疏问题
• qemu-rbd对qemu看到的是一个raw格式的image,且没有实
现支持稀疏查询的回调,所以通过qemu-rbd备份到Ceph的
image,再拷贝回本地不是稀疏的
• 紧耦合问题
• 跟qemu进程紧耦合,如果网络或ceph服务出问题,drive
mirror会hang住,影响用户vm的关闭,重启,快照等功能。
要解决只能kill qemu, 这会使用户vm重启
rbd-nbd的优势
•支持稀疏
• 对qemu看到的是本地/dev/nbdx文件, 不感知Ceph的存
在, 可以把/dev/nbdx文件指定为qcow2格式, 这样写到
Ceph上的是qcow2格式内容, 拷贝回本地时也是qcow2
格式的, 是稀疏的
• 由于qcow2有元数据, 创建rbd的时候size需要比磁盘
容量稍大, 一般元数据在1GB以内
• rbd是thin provisioning的,所以指定更大的size不会浪费
空间
rbd-nbd的优势
• 松耦合
• 跟qemu进程松散耦合,两者通过socket通信,如果网络或
Ceph服务出问题,只需kill rbd-nbd进程,qemu会返回eio
/dev/nbdx
NBD
qemu
kernel
userspace
rbd-nbd librbd
socket
Ceph
Conclusion
•rbd-nbd
• 与rbd的性能接近
• 用户空间实现, 出错影响域小
• 利用librbd, 功能强大稳定
• nbd代码简单, 在kernel已有很长时间, 良好的稳定性
• 良好的可移植性
• 简单易于维护
谢谢!

Weitere ähnliche Inhalte

Was ist angesagt?

應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 
Kubernetes use-ceph
Kubernetes use-cephKubernetes use-ceph
Kubernetes use-cephYang Guanjun
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangCeph Community
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Community
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战rfyiamcool
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理rfyiamcool
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overviewqianshi
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术团队
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforcemeecheng
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updatedPaul Chao
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰Paul Chao
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验Jinrong Ye
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0jinqing zhu
 
Openstack nova
Openstack novaOpenstack nova
Openstack novaYong Luo
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制Liu Yuan
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Jinrong Ye
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018Will Huang
 
Sheepdog介绍
Sheepdog介绍Sheepdog介绍
Sheepdog介绍Liu Yuan
 

Was ist angesagt? (20)

應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
Kubernetes use-ceph
Kubernetes use-cephKubernetes use-ceph
Kubernetes use-ceph
 
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao ZhangBuilding the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
Building the Production Ready EB level Storage Product from Ceph - Dongmao Zhang
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom LabsCeph Day Shanghai - Ceph in Chinau Unicom Labs
Ceph Day Shanghai - Ceph in Chinau Unicom Labs
 
Golang 高性能实战
Golang 高性能实战Golang 高性能实战
Golang 高性能实战
 
聊聊我接触的集群管理
聊聊我接触的集群管理聊聊我接触的集群管理
聊聊我接触的集群管理
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overview
 
美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践美团点评技术沙龙010-Redis Cluster运维实践
美团点评技术沙龙010-Redis Cluster运维实践
 
Kvmopt osforce
Kvmopt osforceKvmopt osforce
Kvmopt osforce
 
企業導入微服務實戰 - updated
企業導入微服務實戰 - updated企業導入微服務實戰 - updated
企業導入微服務實戰 - updated
 
廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰廣宣學堂: 企業導入微服務實戰
廣宣學堂: 企業導入微服務實戰
 
MySQL压力测试经验
MySQL压力测试经验MySQL压力测试经验
MySQL压力测试经验
 
主库自动切换 V2.0
主库自动切换 V2.0主库自动切换 V2.0
主库自动切换 V2.0
 
Openstack nova
Openstack novaOpenstack nova
Openstack nova
 
Sheepdog内部实现机制
Sheepdog内部实现机制Sheepdog内部实现机制
Sheepdog内部实现机制
 
Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用Cgroup lxc在17173 iaas应用池中应用
Cgroup lxc在17173 iaas应用池中应用
 
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
開發人員必須知道的 Kubernetes 核心技術 - Kubernetes Summit 2018
 
Sheepdog介绍
Sheepdog介绍Sheepdog介绍
Sheepdog介绍
 
高可用
高可用高可用
高可用
 

Design realization and application of RBD NBD - Wang Li