---
title: Ceph使能智能写Cache
description: "在集群部署时，每个Ceph节点配置12块4TB数据盘和2块3.2TB的NVMe盘。每个4TB数据盘作为Bcache设备的数据盘，每块NVMe盘作为6个OSD的DB、WAL分区和Bcache的Cache磁盘。一般WAL分区大于10GB就足够使用，Ceph官方文档建议每个DB分区不小于每个数据盘容量的4%，其Cache盘容量推荐占数据盘容量的5%-10%，具体可根据NVMe盘容量灵活设置。"
url: https://www.hikunpeng.com/document/detail/zh/kunpengboostkithistory/220RC3/sds/kunpengsdss_swc_27_0010.html
sourcePath: /source/zh/kunpengboostkithistory/220RC3/sds/kunpengsdss_swc_27_0010.html
indexId: 3ebdc2d9bf96b4ca9a2d4151d514a8b7405827b8eeacda3e07e9b773204dc2ed73
---
# Ceph使能智能写Cache

#### 磁盘分区

在集群部署时，每个Ceph节点配置12块4TB数据盘和2块3.2TB的NVMe盘。每个4TB数据盘作为Bcache设备的数据盘，每块NVMe盘作为6个OSD的DB、WAL分区和Bcache的Cache磁盘。一般WAL分区大于10GB就足够使用，Ceph官方文档建议每个DB分区不小于每个数据盘容量的4%，其Cache盘容量推荐占数据盘容量的5%-10%，具体可根据NVMe盘容量灵活设置。

在本方案中，以WAL分区设置为15GB、DB分区设置为30GB、Cache盘大小为400GB（占数据盘容量10%）为例进行说明。

以下操作在3个Ceph节点均执行一遍，此处以有两块NVMe（分别为/dev/nvme0n1、/dev/nvme1n1）为例进行分区，若有多块NVMe SSD，只需要在参数j中加入对应的盘符即可。若所需大小变化，更改命令end=`expr $start + 30`的数字大小为自己所需大小即可。


1. 创建一个partition.sh脚本。

```
vi partition.sh
```


  添加如下内容： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 #/bin/bash for j in {0..1} do parted -s /dev/nvme${j}n1 mklabel gpt start=0 # 划分为6个30GB分区 end=`expr $start + 30` parted /dev/nvme${j}n1 mkpart primary 2048s ${end}GiB start=$end for i in {1..5} do end=`expr $start + 30` parted /dev/nvme${j}n1 mkpart primary ${start}GiB ${end}GiB start=$end done # 划分为6个15GB分区 for i in {1..6} do end=`expr $start + 15` parted /dev/nvme${j}n1 mkpart primary ${start}GiB ${end}GiB start=$end done # 划分为6个400GB分区 for i in {1..6} do end=`expr $start + 400` parted /dev/nvme${j}n1 mkpart primary ${start}GiB ${end}GiB start=$end done done 此脚本内容只适用于当前硬件配置，其他硬件配置可参考此脚本。

2. 执行脚本。
  1 bash partition.sh

3. 查看分区是否创建成功。
  1 lsblk

  创建成功的回显如下图所示：


#### 创建Bcache设备

Bcache盘分为数据盘和Cache盘，一般采用HDD作为数据盘，SDD作为Cache盘。以下操作在3个Ceph节点均执行一遍，脚本中的/dev/sda-/dev/sdl 12块硬盘均为Bcache设备的数据盘，将NVMe中分区大小为400G的作为Cache盘。本例中以/dev/nvme0n1p$n为例，n的取值为{13..18}，这里的数值与上述分区之后的数值对应。

实际情况中可能会遇到OS硬盘位于HDD盘中的情况，例如系统盘安装到了/dev/sda，则不能直接使用以下脚本直接运行，否则部署到make-bcache --wipe-bcache -B /dev/sda时会报错。此时需要重新调整脚本，避免脚本中包含数据盘以外的如OS盘、做DB/WAL分区的SSD盘等。

因此在操作前先查看磁盘分区情况。

```
lsblk
```

如图1所示，sda盘为系统盘。


图1 lsblk

1. 创建一个create_bcache.sh脚本。

```
vi create_bcache.sh
```


  添加如下内容：

```
#!/bin/bash
n=13
for disk in {a..f}
do
make-bcache -B /dev/sd${disk} -C /dev/nvme0n1p${n}
((n = $(( $n + 1 ))))
done
n=13
for disk in {g..l}
do
make-bcache -B /dev/sd${disk} -C /dev/nvme1n1p$n
((n = $(($n + 1))))
done
```

make-bcache -B /dev/sd${disk} -C /dev/nvme0n1p${n}中的参数含义为：

- -B：指定后端磁盘设备，即数据盘。
- -C：指定缓存设备，用于加速数据盘。

举例：后端磁盘为“sdb”，缓存设备为“nvme0n1p13”

make-bcache -B /dev/sdb -C /dev/nvme0n1p13


2. 执行脚本。
  1 bash create_bcache.sh

3. 查看Bcache设备是否创建成功。

```
lsblk
```


  Bcache设备可找到对应的数据盘和相对应的cache盘，则创建成功。


#### 部署Ceph

1. 安装Ceph软件并部署MON、MGR节点。
  详细操作请参见《Ceph块存储 部署指南（CentOS 7.6&openEuler 20.03）(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0001.html)》中的安装Ceph软件(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0005.html)、部署MON节点(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0006.html)和部署MGR节点(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0007.html)相关内容。

2. 部署OSD节点。
操作前请确认哪些硬盘作为数据盘使用，并确保数据盘中没有未清理的分区。若存在未清理分区，需先进行清除。

a. 查看各硬盘下是否有分区。
  1 lsblk

b. 若存在分区信息，则清除分区信息（以盘符/dev/sdb为例）。
  1 ceph-volume lvm zap /dev/sdb --destroy


  a. 在Ceph-Node 1上创建脚本create_osd.sh，将每台服务器上的12块Bcache盘作为OSD的数据盘。
    1 2 cd /etc/ceph vi /etc/ceph/create_osd.sh

    添加以下内容： 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 #!/bin/bash for node in ceph1 ceph2 ceph3 do j=7 k=1 for i in `ssh ${node} "ls /sys/block | grep bcache | head -n 6"` do ceph-deploy osd create ${node} --data /dev/${i} --block-wal /dev/nvme0n1p${j} --block-db /dev/nvme0n1p${k} ((j=${j}+1)) ((k=${k}+1)) sleep 3 done j=7 k=1 for i in `ssh ${node} "ls /sys/block | grep bcache | tail -n 6"` do ceph-deploy osd create ${node} --data /dev/${i} --block-wal /dev/nvme1n1p${j} --block-db /dev/nvme1n1p${k} ((j=${j}+1)) ((k=${k}+1)) sleep 3 done done

    此脚本内容只适用于当前硬件配置，其他硬件配置可参考此脚本。 ceph-deploy osd create命令中: ${node}是节点的hostname。 --data选项后面是作为数据盘的设备，以Bcache的后端盘作为数据盘。 --block-db选项后面是DB分区。 --block-wal选项后面是WAL分区。 DB和WAL通常部署在NVMe SSD上以提高写入性能，如果没有配置NVMe SSD或者直接使用NVMe SSD作为数据盘，则不需要和--block-wal，只需要加--data指定数据盘即可。

  b. 在ceph1上运行脚本。
    1 bash create_osd.sh

  c. 创建成功后，查看OSD是否创建成功。

```
ceph -s
```


    36个OSD都为up即为创建成功。


#### 验证Ceph

Ceph的使用和验证指导请参见《Ceph块存储 部署指南（CentOS 7.6&openEuler 20.03）(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0001.html)》中验证Ceph(https://www.hikunpeng.com/document/detail/zh/kunpengsdss/ecosystemEnable/Ceph/kunpengcephblock_04_0009.html)的相关内容。
