EN
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助
鲲鹏小智

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盘等。

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

1
lsblk

如图所示,sda盘为系统盘。

  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)》中的安装Ceph软件部署MON节点部署MGR节点

  2. 部署OSD节点。

    操作前请确认哪些硬盘作为数据盘使用,并确保数据盘中没有未清理的分区。若存在未清理分区,需先进行清除。

    1. 查看各硬盘下是否有分区。
      1
      lsblk
      
    2. 若存在分区信息,则清除分区信息(以盘符/dev/sdb为例)。
      1
      ceph-volume lvm zap /dev/sdb --destroy
      
    1. 在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指定数据盘即可。
    2. 在ceph1上运行脚本。
      1
      bash create_osd.sh
      
    3. 创建成功后,查看OSD是否创建成功。
      ceph -s

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

验证Ceph

Ceph的使用和验证指导请参见《Ceph块存储 部署指南(CentOS 7.6)》中验证Ceph的相关内容。