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

公司業(yè)務(wù)中大量使用了rbd的存儲,但是集群是純hdd osd構(gòu)成。iops 不讓人滿意。
一直在琢磨怎么能更好的提高小io 的iops。
掛載rbd一般大部分人使用的是 kernel rbd 方式。但是這種方式并沒有使用 rbd cache。對于業(yè)務(wù)程序是單線程的情況,性能指標(biāo)不讓人滿意。
借用一張網(wǎng)圖


librbd.jpeg

內(nèi)核掛載使用的是 rbd.ko
而官方文檔介紹了 nbd,io 先通過nbd,再轉(zhuǎn)到librbd
而librbd 才有rbd cache 。

如何使用nbd呢,參考了幾個文章??梢陨墐?nèi)核,啟用 nbd 模塊。
centos 7.6 默認(rèn)內(nèi)核下沒有nbd 的模塊,于是升級內(nèi)核。

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
執(zhí)行下面步驟
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)
檢查下內(nèi)核變更成功了沒有。
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 是你本機(jī)器打算用多少個nbd 設(shè)備。

啟用
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 設(shè)備的掛載

這時候可以在 /dev/ 下看到多個nbd文件 (還沒掛載的)
ls /dev/nbd*
/dev/nbd0 /dev/nbd10 /dev/nbd12 /dev/nbd14 /dev/nbd2 /dev/nbd4 /dev/nbd6 /dev/nbd8
等等

掛載ceph rbd 設(shè)備的辦法
rbd-nbd -h
Usage: rbd-nbd [options] map <image-or-snap-spec> Map an image to nbd device
unmap <device path> Unmap nbd device
list-mapped List mapped nbd devices
Options:
--device <device path> Specify nbd device path
--read-only Map read-only
--nbds_max <limit> Override for module param nbds_max
--max_part <limit> 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

如果不是默認(rèn) key 和 conf 文件 需要指定一下。

掛載成功 可以用 fdisk 和 lsblk 看到設(shè)備。


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 掛載,采用單進(jìn)程的 fio 測試只有10-20iops

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

也就是是有沒有rbd cahe,對小io 影響非常大。
我這里使用的rbd cache 配置 如下(建議根據(jù)業(yè)務(wù)調(diào)整)
[client]
rbd_cache = true
admin socket = /var/run/ceph/cluster-type.id.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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容