centos 7 下使用 ceph rbd-nbd (librbd)

公司业务中大量使用了rbd的存储,但是集群是纯hdd osd构成。iops 不让人满意。
一直在琢磨怎么能更好的提高小io 的iops。
挂载rbd一般大部分人使用的是 kernel rbd 方式。但是这种方式并没有使用 rbd cache。对于业务程序是单线程的情况,性能指标不让人满意。
借用一张网图


librbd.jpeg

内核挂载使用的是 rbd.ko
而官方文档介绍了 nbd,io 先通过nbd,再转到librbd
而librbd 才有rbd cache 。

如何使用nbd呢,参考了几个文章。可以升级内核,启用 nbd 模块。
centos 7.6 默认内核下没有nbd 的模块,于是升级内核。

1)
打开 https://elrepo.org/linux/kernel/el7/x86_64/RPMS/
下载
kernel-lt-4.4.234-1.el7.elrepo.x86_64.rpm
kernel-lt-devel-4.4.234-1.el7.elrepo.x86_64.rpm
2)
安装
rpm -ivh kernel*.rpm
执行下面步骤
perl -pi -e 's/saved/0/g' /etc/default/grub
grub2-mkconfig -o /boot/grub2/grub.cfg
上面步骤时间比较久。耐心等
配置好 ceph 的yum 的情况下顺便吧 rbd-nbd 也安装了
yum install -y rbd-nbd.x86_64
reboot
3)
检查下内核变更成功了没有。
uname -r
4.4.234-1.el7.elrepo.x86_64
4)
先配置一下 nbd 的配置文件
echo "options nbd max_part=3 nbds_max=20" >/etc/modprobe.d/nbd.conf
其中 nbds_max 是你本机器打算用多少个nbd 设备。

启用
modprobe nbd
顺便 查看下mod 的信息
modinfo nbd
filename: /lib/modules/4.4.234-1.el7.elrepo.x86_64/kernel/drivers/block/nbd.ko
license: GPL
description: Network Block Device
srcversion: DD8C5FF6C2BE9A22548F48D
depends:
retpoline: Y
intree: Y
vermagic: 4.4.234-1.el7.elrepo.x86_64 SMP mod_unload modversions
parm: nbds_max:number of network block devices to initialize (default: 16) (int)
parm: max_part:number of partitions per device (default: 0) (int)


nbd 设备的挂载

这时候可以在 /dev/ 下看到多个nbd文件 (还没挂载的)
ls /dev/nbd*
/dev/nbd0 /dev/nbd10 /dev/nbd12 /dev/nbd14 /dev/nbd2 /dev/nbd4 /dev/nbd6 /dev/nbd8
等等

挂载ceph rbd 设备的办法
rbd-nbd -h
Usage: rbd-nbd [options] map Map an image to nbd device
unmap Unmap nbd device
list-mapped List mapped nbd devices
Options:
--device Specify nbd device path
--read-only Map read-only
--nbds_max Override for module param nbds_max
--max_part Override for module param max_part
--exclusive Forbid writes by other clients

--conf/-c FILE read configuration from the given configuration file
--id/-i ID set ID portion of my name
--name/-n TYPE.ID set name
--cluster NAME set cluster name (default: ceph)
--setuser USER set uid to user or uid (and gid to user's gid)
--setgroup GROUP set gid to group or gid
--version show version and quit

-d run in foreground, log to stderr
-f run in foreground, log to usual location

比如我要挂载 纠删的 ecrbd 的测试块 txmnbd-00

rbd-nbd map ecrbd/txmnbd-00 --name client.ms -k /etc/ceph/ceph.client.test.keyring -c /etc/ceph/ceph.conf

如果不是默认 key 和 conf 文件 需要指定一下。

挂载成功 可以用 fdisk 和 lsblk 看到设备。


image.png

也可以用 rbd nbd list 命令查看

rbd nbd list 或者使用 rbd-nbd list-mapped

pid pool image snap device
223316 ecrbd txmnbd-00 - /dev/nbd0

用fio 对比 kernel rbd 挂载和nbd 挂载的性能

fio 单 numjobs
-direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=8k -size=20G -fio -filename=/backupdata/00/txmtestfio8k -direct=1 -iodepth 1 -thread -rw=write -ioengine=libaio -bs=8k -size=20G -numjobs=1 -runtime=60 -group_reporting -name=test8k-runtime=60 -group_reporting -name=test8k


image.png

相同集群下如果采用kernel 挂载,采用单进程的 fio 测试只有10-20iops

只有使用 -numjobs=100 以上,或者 加大-iodepth 到 10
iops 才能过100.

也就是是有没有rbd cahe,对小io 影响非常大。
我这里使用的rbd cache 配置 如下(建议根据业务调整)
[client]
rbd_cache = true
admin socket = /var/run/ceph/type.pid.$cctid.asok
rbd_cache_size = 1671088640
rbd_cache_max_dirty = 360994944
rbd_cache_target_dirty = 190663296
rbd_cache_max_dirty_age = 10
rbd_op_threads = 1
rbd_cache_writethrough_until_flush = false

你可能感兴趣的:(centos 7 下使用 ceph rbd-nbd (librbd))