jewel版本新增加了一个驱动NBD,允许librbd实现一个内核级别的rbd
NBD相比较于kernel rbd:
- rbd-ko是根据内核主线走的,升级kernel
- rbd需要升级到相应的内核,改动太大
- rbd-ko的开发要慢于librbd,需要很多的时间才能追赶上librbd
rbd-nbd是通过librbd这个用户空间通过nbd的内核模块实现了内核级别的驱动,稳定性和性能都有保障
怎么理解用户态和内核态?
- librbd就是用户态,一般的kvm对接的就是librbd的
- kernel rbd就是内核态,这个是一个内核模块,是内核直接与osd交互的,一般来说内核态的性能会优于用户态
下面来做下基本的操作:
创建一个image
[root@lab8106 ~]# rbd create testnbdrbd -s 10G
映射这个image
[root@lab8106 ~]# rbd-nbd map rbd/testnbdrbd
/dev/nbd0
查询已经映射的nbd
[root@lab8106 ~]# rbd-nbd list-mapped
/dev/nbd0
上面说了这么多,那么来点直观的认识,nbd带来的好处
查询下image的信息
[root@lab8106 ~]# rbd info testnbdrbd
rbd image 'testnbdrbd':
size 10240 MB in 2560 objects
order 22 (4096 kB objects)
block_name_prefix: rbd_data.10ad2ae8944a
format: 2
features: layering, exclusive-lock, object-map, fast-diff, deep-flatten
flags:
jewel版本默认开启了features: layering, exclusive-lock, object-map, fast-diff, deep-flatten这么多的属性,而这些属性是kernel-rbd还不支持的
所以做rbd map的时候就会出现下面的问题:
[root@lab8106 ~]# rbd map testnbdrbd
rbd: sysfs write failed
RBD image feature set mismatch. You can disable features unsupported by the kernel with "rbd feature disable".
In some cases useful info is found in syslog - try "dmesg | tail" or so.
rbd: map failed: (6) No such device or address
如果非要用,就默认禁用掉这些属性,在配置文件增加
rbd_default_features = 3
那么现在开启属性还行想用块设备方式怎么用,就可以用nbd了
[root@lab8106 ~]# rbd-nbd map rbd/testnbdrbd
/dev/nbd0
这样就可以用了。不用担心接口的问题了,因为只要librbd支持的属性,nbd就默认支持了
查询rbd和nbd对应关系
[root@lab101 mnt]# rbd-nbd list-mapped
/dev/nbd0
[root@lab101 mnt]# cat /sys/block/nbd0/pid
93059
[root@lab101 mnt]# ps -ef|grep 93059
root 93059 1 0 14:30 pts/1 00:00:00 rbd-nbd map testnbd
root 97346 8580 0 14:36 pts/1 00:00:00 grep --color=auto 93059
rbd几种常用的模式和新模式图:
本篇ceph版本
ceph version 10.2.1 (3a66dd4f30852819c1bdaa8ec23c795d4ad77269)
变更记录
Why | Who | When |
---|---|---|
创建 | 武汉-运维-磨渣 | 2016-05-19 |
增加映射关系查询方法 | 武汉-运维-磨渣 | 2018-03-27 |