公司業(yè)務(wù)中大量使用了rbd的存儲(chǔ)亭珍,但是集群是純hdd osd構(gòu)成敷钾。iops 不讓人滿意。
一直在琢磨怎么能更好的提高小io 的iops肄梨。
掛載rbd一般大部分人使用的是 kernel rbd 方式阻荒。但是這種方式并沒有使用 rbd cache。對(duì)于業(yè)務(wù)程序是單線程的情況众羡,性能指標(biāo)不讓人滿意侨赡。
借用一張網(wǎng)圖
內(nèi)核掛載使用的是 rbd.ko
而官方文檔介紹了 nbd,io 先通過nbd粱侣,再轉(zhuǎn)到librbd
而librbd 才有rbd cache 羊壹。
一
如何使用nbd呢,參考了幾個(gè)文章齐婴∮兔ǎ可以升級(jí)內(nèi)核,啟用 nbd 模塊柠偶。
centos 7.6 默認(rèn)內(nèi)核下沒有nbd 的模塊情妖,于是升級(jí)內(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
上面步驟時(shí)間比較久诱担。耐心等
配置好 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ī)器打算用多少個(gè)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è)備的掛載
這時(shí)候可以在 /dev/ 下看到多個(gè)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 的測(cè)試塊 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è)備料睛。
也可以用 rbd nbd list 命令查看
rbd nbd list 或者使用 rbd-nbd list-mapped
pid pool image snap device
223316 ecrbd txmnbd-00 - /dev/nbd0
用fio 對(duì)比 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
相同集群下如果采用kernel 掛載,采用單進(jìn)程的 fio 測(cè)試只有10-20iops
只有使用 -numjobs=100 以上匀哄,或者 加大-iodepth 到 10
iops 才能過100.
也就是是有沒有rbd cahe秦效,對(duì)小io 影響非常大。
我這里使用的rbd cache 配置 如下(建議根據(jù)業(yè)務(wù)調(diào)整)
[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