CentOS7 安装bcache加速
安装
1 加载系统的bcache模块:
lsmod | grep bcache
modprobe bcache
2 如果出现错误:
modprobe: FATAL: Module bcache not found.
则需要升级内核:https://www.cnweed.com/archives/4311/
因为bcache在kernel 3.10版本才进入主线,所以我们要保证CentOS的内核版本大于3.10
3 编译安装
yum install -y git gcc-c++ pkgconfig libblkid-devel
git clone https://evilpiepirate.org/git/bcache-tools.git
cd bcache-tools/
make
make install
配置磁盘设备
1 命令介绍
与bcache相关的命令有:make-bcache和bcache-super-show
[root@ceph-node-1 ~]# make-bcache
Please supply a device
Usage: make-bcache [options] device
-C, --cache Format a cache device
-B, --bdev Format a backing device
-b, --bucket bucket size
-w, --block block size (hard sector size of SSD, often 2k)
-o, --data-offset data offset in sectors
--cset-uuid UUID for the cache set
--writeback enable writeback
--discard enable discards
--cache_replacement_policy=(lru|fifo)
-h, --help display this help and exit
2 快速创建
-B:指定后端磁盘设备,即要加速的数据盘;-C:指定前端缓存设备,用于加速数据盘,一般用NVME SSD。这里假设/dev/sdc为数据盘,/dev/nvme0n1为缓存盘。
[root@ceph-node-1 ~]# make-bcache -B /dev/sdc -C /dev/nvme0n1
UUID: 303e696e-6b30-4f06-a75d-294e3d197434
Set UUID: e5291f51-32ae-4d4e-95ce-0e646d41dfc4
version: 0
nbuckets: 915725
block_size: 1
bucket_size: 1024
nr_in_set: 1
nr_this_dev: 0
first_bucket: 1
UUID: 0077e0d1-10e2-4f44-aba6-b0fe853f313c
Set UUID: e5291f51-32ae-4d4e-95ce-0e646d41dfc4
version: 1
block_size: 1
data_offset: 16
除了上面的形式,也可以一次性加入多个后端数据盘:
make-bcache -B /dev/sdb /dev/sdc -C /dev/nvme0n1
注:还可以在make-bcache的时候加入-w和-b参数,主要是提高缓存性能
-w block size 默认2K,一般需要block size = 后端设备的扇区大小。
-b bucket size,一般需要bucket size = 前端缓存设备的erase block size大小。*
3 单独创建后端磁盘设备(backing device)
[root@ceph-node-1 ~]# make-bcache -B /dev/sdb
UUID: fe200976-28c9-4ff8-b55c-ac86a416529e
Set UUID: 7cc6c0bb-fbc3-4933-95ec-f98cc49dbc36
version: 1
block_size: 1
data_offset: 16
*创建后运行lsblk会显示如下类似信息,sdb下会有bcache{编号}类似分区:
[root@ceph-node-1 ~]# lsblk
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
nvme0n1 259:0 0 447.1G 0 disk
└─bcache0 252:0 0 447.1G 0 disk
sdb 8:16 0 3.7T 0 disk
└─**bcache1** 252:0 0 3.7T 0 disk
sdc 8:32 0 3.7T 0 disk
sda 8:0 0 232.4G 0 disk
4 单独创建缓存磁盘设备(cache device)
[root@ceph-node-1 ~]# make-bcache -C /dev/nvme0n1
5 查看设备信息
[root@ceph-node-1 ~]# bcache-super-show /dev/nvme0n1
sb.magic ok
sb.first_sector 8 [match]
sb.csum 6E2EB2102565945E [match]
sb.version 3 [cache device]
dev.label (empty)
dev.uuid 303e696e-6b30-4f06-a75d-294e3d197434
dev.sectors_per_block 1
dev.sectors_per_bucket 1024
dev.cache.first_sector 1024
dev.cache.cache_sectors 937701376
dev.cache.total_sectors 937702400
dev.cache.ordered yes
dev.cache.discard no
dev.cache.pos 0
dev.cache.replacement 0 [lru]
cset.uuid e5291f51-32ae-4d4e-95ce-0e646d41dfc4
6 绑定后端数据盘(backing device)到缓存盘(cache device)
命令格式为:echo "{缓存盘cset.uuid,可以通过bcache-super-show查看}" > /sys/block/bcache{后后端数据盘编号,见上文第3步}/bcache/attach
echo "e5291f51-32ae-4d4e-95ce-0e646d41dfc4" > /sys/block/bcache1/bcache/attach
上为示例
修改缓存模式
bcache支持三种缓存模式:
writeback : 写入时先写到Cache中,同时将对应block的元数据dirty bit,但是并不会立即写入后备存储器
writethrough : 写入时将数据同时写入cache和后备存储器,后备存储器写完,才算写操作完成
writearound : 写入的时候,绕过Cache,直接写入后备存储器,即加速盘只当读缓存
下面这张图可以形象说明三者区别:
1 查看当前缓存模式
cat /sys/block/bcache{编号}/bcache/cache_mode
2 修改
echo writearound > /sys/block/bcache{编号}/bcache/cache_mode
注意,实际操作时候请把{编号}替换为实际数字,如 bcache0
可以随时修改并会马上生效,修改后不需要做其他操作
后端磁盘停用或重新启用缓存(解绑或绑定)
举例:后端磁盘为“/dev/sdc”,缓存设备为“/dev/nvme0n1”。
1 查看缓存盘的cset-uuid
bcache-super-show /dev/nvme0n1
显示如:cset.uuid e5291f51-32ae-4d4e-95ce-0e646d41dfc4
2 解除缓存操作
echo e5291f51-32ae-4d4e-95ce-0e646d41dfc4 > /sys/block/bcache0/bcache/detach
如果要重新添加
echo e5291f51-32ae-4d4e-95ce-0e646d41dfc4 > /sys/block/bcache0/bcache/attach
注意:bcache{要操作的后端磁盘编号}
注销缓存盘
格式:echo 1 > /sys/fs/bcache/{缓存盘cset-uuid}/unregister
示例:
echo 1 > /sys/fs/bcache/e5291f51-32ae-4d4e-95ce-0e646d41dfc4/unregister
停用缓存盘
格式:echo 1 > /sys/fs/bcache/{缓存盘cset-uuid}/stop
示例:
echo 1 > /sys/fs/bcache/e5291f51-32ae-4d4e-95ce-0e646d41dfc4/stop
停用后端设备(数据盘)
格式:echo 1 > /sys/block/bcache{要操作的后端磁盘编号} /bcache/stop
示例:
echo 1 > /sys/block/bcache0/bcache/stop
停用后bcache0分区就不见,可以重新操作格式化重新添加等
擦除磁盘残留数据
sudo wipefs -a /dev/sdc
查看bcache相关信息
1 缓存状态
cat /sys/block/bcache0/bcache/state
state的几个状态:
no cache:该backing device没有attach任何caching device
clean:一切正常,缓存是干净的
dirty:一切正常,已启用回写,缓存是脏的
inconsistent:遇到问题,后台设备与缓存设备不同步
2 缓存数据量
cat /sys/block/bcache0/bcache/dirty_data
Bcache的性能调优
bcache有很多配置选项和可调的参数,默认值适合于典型配置
1) 如果写入性能差,可以尝试将其写策略调为回写策略
echo writeback > /sys/block/bcache0/cache_mode
2) 默认情况下,bcache不会缓存顺序IO和大文件,所以顺序写性能应该没什么提升,可以打开顺序IO缓存:
echo 0 > /sys/block/bcache0/bcache/sequential_cutoff
还可以调整backing设备的顺序IO阈值,默认是4M,也就是说如果bcache设备的连续IO达到4MB以上时是直接读写backing盘,不会走SSD缓存盘,如果要设置成8M,则可如下:
echo 8M > /sys/block/bcache0/bcache/sequential_cutoff
3) 防止cache设备成为瓶颈
这种情况最可能发生在一块缓存磁盘作为多个普通盘的缓存磁盘,写入或读取处理不过来时,就会形成堵塞,这时我们可以关闭拥塞控制项,默认情况下,当读请求超过2ms,写请求超过20ms时就会直接读写backing盘。
关闭读写拥塞控制命令:
echo 0 > /sys/fs/bcache/{cache set uuid}/congested_read_threshold_us
echo 0 > /sys/fs/bcache/{cache set uuid}/congested_write_threshold_us
Ceph添加bcache设置后的数据盘:
ceph-deploy osd create ceph-node-1 --data /dev/bcache1
最新的版本Ceph已经可以直接像/dev/bcache1这样添加了
学习参考自
https://support.huaweicloud.com/usermanual-kunpengsdss/kunpengbcache_06_0016.html
https://blog.csdn.net/liangchen0322/article/details/50322635
https://www.cnblogs.com/luohaixian/p/9280141.html
http://www.yangguanjun.com/2018/03/26/lvm-sata-ssd-bcache/
https://ziyablog.com/266/bcache%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/