文档 计算
移动云计算Ceph添加Ceph OSDs (LVM卷)

移动云计算Ceph添加Ceph OSDs (LVM卷)

移动云计算Ceph添加Ceph OSDs ( LVM卷 ) 在完成了初始移动云计算Ceph部署ceph-mon 之后,就可以添加 OSDs。只有完成了足够的OSDs部署(满足对象数量,例如 osd pool default size =2 要求集群至少具备2个OSDs)才能达到active +

移动云计算Ceph添加Ceph OSDs ( LVM卷 )

在完成了初始移动云计算Ceph部署ceph-mon 之后,就可以添加 OSDs。只有完成了足够的OSDs部署(满足对象数量,例如 osd pool default size =2 要求集群至少具备2个OSDs)才能达到active + clean 状态。在完成了 bootstap Ceph monitor之后,集群就具备了一个默认的 CRUSH map,但是此时 CRUSH map还没有具备任何Ceph OSD Daemons map到一个Ceph节点。

Ceph提供了一个 ceph-vlume 工具,用来准备一个逻辑卷,磁盘或分区给Ceph使用,通过增加索引来创建OSD ID,并且将新的OSD添加到CRUSH map。需要在每个要添加OSD的节点上执行该工具。

备注

我有3个服务器节点提供存储,需要分别在这3个节点上部署OSD服务。

备注

ceph官方文档的案例都是采用ceph - volume lvm 来完成的,这个命令可以在Ceph的OSD底层构建一个Linux LVM逻辑卷管理 ,带来的优势是可以随时扩容底层存储容量,对后续运维带来极大便利。在生产环境中部署,建议使用 lvm 卷。

bluestore

Ceph后端存储引擎BlueStore 是最新的Ceph采用的默认高性能存储引擎,底层不再使用OS的文件系统,可以直接管理磁盘硬件。

需要部署OSD的服务器首先准备存储,通常采用LVM卷作为底层存储块设备,这样可以通过LVM逻辑卷灵活调整块设备大小(有可能随着数据存储增长需要调整设备)。

使用lvm作为bluestore底层

我这里构建实践采用 ceph - volume lvm ,这个命令会自动创建底层 Linux LVM逻辑卷管理

准备 vdb 虚拟磁盘分区

备注

生产环境请使用LVM卷作为底层设备 – 参考 Ceph BlueStore配置

我的部署实践是在3台虚拟机z-b-datum-1 /z-b-datum-2 /z-b-datum-3 上完成,分区完全一致

划分/dev / vdb 50G

sudo part /dev / vdb mklabel gpt                                                                                   
sudo part -a optimal /dev / vdb mkpart primary 0% 50 g 

完成后检查 fdisk -l 可以看到 :

fdisk -l /dev / vdb 输出信息显示 /dev / vdb1

Disk /dev / vdb: 55 GiB, 59055800320 bytes, 115343360 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 byte 
 disklabel type: gpt 
 disk i dentifier: A1497C37-CA99-431B-9AF4-DC99FBBDC2B9

Device     start      End  Sectors  Size Type 
 /dev / vdb1   2048 97656831 97654784 46.6G Linux filesystem 

创建OSD使用的bluestore存储

在 / dev / vdb1上构建基于lvm的bluestore存储卷

sudo ceph - volume lvm create --bluestore --datum /dev / vdb1 

备注

ceph - volume raw -h 包含子命令:

list                     list BlueStore OSDs on raw device
prepare                  format a raw device and associate it with a (BlueStore) OSD
activate                 discover and prepare a datum directory for a (BlueStore) OSD on a raw device

ceph - volume lvm -h 包含子命令:

activate                 discover and mount the LVM device associated with an OSD ID and start the Ceph OSD
deactivate               Deactivate OSDs
batch                    Automatically size device for multi-OSD provision with minimal interaction
prepare                  format an LVM device and associate it with an OSD
create                   create a new OSD from an LVM device
trigger                  systemd helper to activate an OSD
list                     list logical volumes and device associated with Ceph
zap                      Removes all datum and filesystem from a logical volume or partition.
migrate                  Migrate BlueFS datum from to another LVM device
new-wal                  Allocate new WAL volume for OSD at specify Logical volume
new-db                   Allocate new DB volume for OSD at specify Logical volume

对于raw 命令需要分步骤完成,不像lvm 命令提供了更为丰富的批量命令

提示信息 :

ceph – volume lvm create 输出

  1run command : /usr / bin / ceph - authtool --gen-print-key
  2run command : /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyre /var/lib/ceph/bootstrap-osd/ceph.keyre -i - osd new 2bcd1d3d - c9bf-4276 - 8fe2 - b6f1e3efe931
  3run command : vgcreate --force --yes ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532 /dev / vdb1 
  4 stdout : physical volume "/dev / vdb1" successfully create . 
  5 stdout : volume group "ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532" successfully created
 6run command : lvcreate --yes -l 11920 -n osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931 ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532
 7 stdout : Logical volume "osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931" create . 
  8run command : /usr / bin / ceph - authtool --gen-print-key
 9run command : /usr/bin/mount -t tmpfs tmpfs /var / lib / ceph / osd / ceph-0 
10run command : /usr/sbin/restorecon /var / lib / ceph / osd / ceph-0 
11run command : /usr / bin / chown -h ceph : ceph /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931
12run command : /usr / bin / chown -R ceph : ceph /dev/dm-0
13run command : /usr/bin/ln -s /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931 /var / lib / ceph / osd / ceph-0/block
14run command : /usr/bin/ceph --cluster ceph --name client.bootstrap-osd --keyre /var/lib/ceph/bootstrap-osd/ceph.keyre mon getmap -o /var / lib / ceph / osd / ceph-0/activate.monmap
15 stderr : 2022-12 - 08T23:59:38.809 + 0800 ffff88d4f1a0 -1 auth: unable to find a keyre on /etc/ceph/ceph.client.bootstrap-osd.keyre,/etc/ceph/ceph.keyre,/etc/ceph/keyre,/etc/ceph/keyre.bin: (2) No such file or directory
162022-12 - 08T23:59:38.809 + 0800 ffff88d4f1a0 -1 AuthRegistry(0xffff840601e0) no keyre found at /etc/ceph/ceph.client.bootstrap-osd.keyre,/etc/ceph/ceph.keyre,/etc/ceph/keyre,/etc/ceph/keyre.bin, disabling cephx
17 stderr : get monmap epoch 2
18--> create keyre file for osd.0
19run command : /usr / bin / chown -R ceph : ceph /var / lib / ceph / osd / ceph-0/keyre
20run command : /usr / bin / chown -R ceph : ceph /var / lib / ceph / osd / ceph-0/
21run command : /usr / bin / ceph - osd --cluster ceph --osd-objectstore bluestore --mkfs -i 0 --monmap /var / lib / ceph / osd / ceph-0/activate.monmap --keyfile - --osd-datum /var / lib / ceph / osd / ceph-0/ --osd-uui d 2bcd1d3d - c9bf-4276 - 8fe2 - b6f1e3efe931 --setuser ceph --setgroup ceph
22 stderr : 2022-12 - 08T23:59:39.079 + 0800 ffff8ca8b040 -1 bluestore(/var / lib / ceph / osd / ceph-0/) _ read_fsi d unparsable uui d
23--> ceph - volume lvm prepare successful for: /dev / vdb1 
24run command : /usr / bin / chown -R ceph : ceph /var / lib / ceph / osd / ceph-0 
25run command : /usr/bin/ceph-bluestore-tool --cluster=ceph prime - osd - dir --dev /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931 --path /var/lib/ceph/osd/ceph-0 --no-mon-config
26run command : /usr/bin/ln -snf /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd - block-2bcd1d3d - c9bf-4276 -  8fe2 - b6f1e3efe931 /var / lib / ceph / osd / ceph-0/block
27run command : /usr / bin / chown -h ceph : ceph /var / lib / ceph / osd / ceph-0/block
28run command : /usr / bin / chown -R ceph : ceph /dev/dm-0
29run command : /usr / bin / chown -R ceph : ceph /var / lib / ceph / osd / ceph-0 
30run command : /usr / bin / systemctl enable ceph - volume@lvm-0-2bcd1d3d - c9bf-4276 - 8fe2 - b6f1e3efe931
31 stderr : created symlink /etc/systemd/system/multi-user.target.wants/ceph - volume@lvm-0-2bcd1d3d - c9bf-4276 - 8fe2 - b6f1e3efe931.service  /usr/lib/systemd/system/ceph - volume@.service.
32run command : /usr / bin / systemctl enable --runtime ceph-osd@0
33 stderr : created symlink /run/systemd/system/ceph-osd.target.wants/ceph-osd@0.service  /usr/lib/systemd/system/ceph-osd@.service.
34run command : /usr / bin / systemctl start ceph-osd@0
35--> ceph - volume lvm activate successful for osd ID: 0
36--> ceph - volume lvm create successful for: /dev / vdb1 

这次实践似乎有一些报错,不像之前添加Ceph osd ( LVM卷 ) 执行没有任何错误。看起来是缺少针对 osd 的 ceph.keyre

不过,在osd目录下有一个 /var / lib / ceph / osd / ceph-0/keyre ,并且也没有影响运行

  • 检查osd 卷设备:

    sudo ceph-volume lvm list
    

可以看到设备文件如下:

====== osd.0 =======

  [block]       /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd-block-2bcd1d3d-c9bf-4276-8fe2-b6f1e3efe931

      block device              /dev/ceph-97fa0d8e-9538-462c-98a0-7d95fe2d4532/osd-block-2bcd1d3d-c9bf-4276-8fe2-b6f1e3efe931
      block uui d                W4kXl5-5v9W-yhE3-MOXW-YzoP-HT8X-xaE1tV
      cephx lockbox secret
      cluster fsi d              598dc69c-5b43-4a3b-91b8-f36fc403bcc5
      cluster name              ceph
      crush device class
      encrypted                 0
      osd fsi d                  2bcd1d3d-c9bf-4276-8fe2-b6f1e3efe931
      osd i d                    0
      osdspec affinity
      type                      block
      vdo                       0
      device                   /dev/vdb1

使用 ceph - volume lvm create 命令有以下优点:

可以看到OSD已经运行:

cluster:
  i d:     598dc69c-5b43-4a3b-91b8-f36fc403bcc5
  health: HEALTH_WARN
          2 mgr modules have recently crashed
          OSD count 1 < osd_pool_default_size 3

service:
  mon: 1 daemon, quorum a-b-datum-1 (age 66m)
  mgr: a-b-datum-1(active, since 53m)
  osd: 1 osds: 1 up (since 28m), 1 in (since 28m)

datum:
  pool:   0 pool, 0 pgs
  objects: 0 objects, 0 B
  usage:   19 MiB used, 47 GiB / 47 GiB avail
  pgs:
  • 检查OSD状态:

可以看到:

ID  CLASS  WEIGHT   TYPE NAME            STATUS  reweight  PRI-AFF
-1         0.04549  root default
-3         0.04549      host a-b-datum-1
 0    hdd  0.04549          osd.0            up   1.00000  1.00000

请注意,现在只有一个OSD运行,不满足配置中要求3个副本的要求,我们需要添加OSD节点

整合脚本快速完成

安装OSD非常简便,所以整合脚本也就更为简单:

在节点1上完成ceph – osd部署脚本 host_1_ceph_osd.sh

# ! /usr / bin / env bash

ceph_env( ) {
    cluster=ceph
    # FSID=$(cat /proc/sys/kernel/random/uui d)
    FSID=598dc69c-5b43-4a3b-91b8-f36fc403bcc5

    HOST=$(hostname -s)
    host_ip=$(hostname -i)

    HOST_1=a-b-datum-1
    HOST_2=a-b-datum-2
    HOST_3=a-b-datum-3

    host_1_ip=192.168.8.204
    HOST_2_IP=192.168.8.205
    HOST_3_IP=192.168.8.206 

    HOST_NET=192.168.8.0/24
}

part_vbd( ) {
    sudo part /dev / vdb mklabel gpt
    sudo part -a optimal /dev / vdb mkpart primary 0% 50 g 
}

 create_dir( ) {
    local dir="$1"
    if [ ! -d "$ dir" ]; then
        sudo mkdir -p $ dir
        sudo chown ceph : ceph $ dir
    fi
}

create_ceph_osd( ) {
    create_dir /var / lib / ceph / osd / ceph-0 
    sudo ceph - volume lvm create --bluestore --datum /dev / vdb1 

    sleep 1

    echo "ceph - volume:"
    sudo ceph - volume lvm list
}

ceph_env
part_vbd
create_ceph_osd

重启操作系统验证

重启操作系统 sudo shutdown -r now

可以看到 ceph - volume lvm 默认配置非常方便,重启后系统服务正常,OSD也能正常运行:

ceph -s输出显示3个服务都已经启动

  cluster : 
    i d:     598dc69c-5b43-4a3b-91b8-f36fc403bcc5
    health: HEALTH_WARN
            mon is allowing insecure global_i d reclaim
            1 monitors have not enabled msgr2 
            OSD count 1 < osd_pool_default_size 3
 
  service:
    mon: 1 daemon, quorum a-b-datum-1 (age 60s)
    mgr: a-b-datum-1(active, since 47)
    osd: 1 osds: 1 up (since 55s), 1 in (since 17 m)
 
  datum:
    pool:   0 pool, 0 pgs
    objects: 0 object , 0 B
    usage:   5.5 MiB used, 47 GiB / 47 GiB avail 
    pgs:

上述 HEALTH_WARN 暂时不用顾虑,原因是OSD数量尚未满足配置3副本要求,后续将会配置补上。根据目前输出信息,3个服务都已经启动

添加OSD

需要满足3副本要求,我们需要在服务器本地或者其他服务器上添加OSD。为了能够冗余,我采用集群3个服务器上每个服务器都启动 ceph-monceph-osd ,所以下面我们来完成:

然后再执行 :