How to deploy ceph with ceph-deploy


本文介绍如何通过ceph-deploy部署ceph集群。

环境描述

准备三台主机,ceph01,ceph01,ceph02。并且这三台主机都需要准备一个额外的磁盘,如本例中的/dev/sdb。同时,我们还需要为/dev/sdb格式化,并设置免密登录。

1
2
3
4
5
6
7
$ ssh-keygen
$ ssh-copy-id root@ceph01
$ ssh-copy-id root@ceph02
$ ssh-copy-id root@ceph03
$ mkfs.xfs /dev/sdb  # on three nodes
 
$ apt install ceph-deploy

安装ceph集群

准备好环境即可通过ceph-deploy部署ceph集群。

1
2
3
4
5
6
$ mkdir my-cluster && cd my-cluster
$ ceph-deploy new ceph01                   # create cluster
$ ceph-deploy install ceph01 ceph02 ceph03 # install ceph package
$ ceph-deploy mon create-initial           # deploy the initial monitor and gather the keys
$ ceph-deploy admin ceph01 ceph02 ceph03   # copy configuration files to nodes
$ ceph-deploy osd create ceph01:sdb ceph02:sdb ceph03:sdb # create OSDs

按照上面的部署过程,我们会得到一个monitor+三个osd的ceph集群,并且所有部署操作都是在ceph01上进行的,之后对ceph集群的改动也要在此机器上做。

而因为monitor也部署在ceph01这台机器上,所以外部的请求也要发送到该机器上(比如下面挂载cephfs的例子)。

之后验证集群状态:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
$ ceph health
HEALTH_OK
$ ceph -s
    cluster 2e19ebb4-d5a1-4916-a2b8-340a9ccf220a
     health HEALTH_OK
     monmap e1: 1 mons at {ceph01=192.168.73.128:6789/0}
            election epoch 3, quorum 0 ceph01
     osdmap e14: 3 osds: 3 up, 3 in
            flags sortbitwise,require_jewel_osds
      pgmap v33: 64 pgs, 1 pools, 0 bytes data, 0 objects
            100 MB used, 45946 MB / 46046 MB avail
                  64 active+clean
$ ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED
    46046M     45946M         100M          0.22
POOLS:
    NAME     ID     USED     %USED     MAX AVAIL     OBJECTS
    rbd      0         0         0        15315M           0

通过ceph-rbd挂载磁盘

1
2
3
4
5
6
7
8
# 创建pool,也可以使用默认的pool rdb
$ ceph osd pool create first-pool 8
# 创建rbd
$ rbd create foo --size 128 --image-feature layering --pool first-pool
$ rbd map foo --pool first-pool
/dev/rbd0
$ mkfs -t ext4 /dev/rbd0
$ mount -t ext4 /dev/rbd0 /root/test

部署cephfs

为了使用cephfs,我们需要先部署mds,即metadata server。

1
$ ceph-deploy mds create ceph01

之后可以创建相关的pool与filesystem

1
2
3
4
$ ceph osd pool create cephfs_data 8
$ ceph osd pool create cephfs_metadata 8
 
$ ceph fs new cephfs cephfs_metadata cephfs_data

通过mds的状态验证创建是否成功

1
2
3
4
5
$ ceph mds stat
e7: 1/1/1 up {0=ceph01=up:active}    # 即为正常

$ ceph mds stat
e2: 0/0/1 up     # 即为不正常,需要定位问题

通过cephfs挂载磁盘到本地

 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
31
32
33
34
35
36
37
38
# 在部署主机上拿到admin用户的key文件,否则直接mount会遇到 libceph: error -22 on auth protocol 2 init 类似的错误
# 比如我们拿到key: AQBpMXBat2emEhAAXm6p3Xq0uGtw1qWq9EbEcA==
$ mount -t ceph 192.168.73.128:6789:/ /root/test_cephfs/ -o name=admin,secret=AQBpMXBat2emEhAAXm6p3Xq0uGtw1qWq9EbEcA==
$ df -h
Filesystem                        Size  Used Avail Use% Mounted on
udev                              468M     0  468M   0% /dev
tmpfs                              98M  5.8M   92M   6% /run
/dev/mapper/wille--vg-root         27G  2.1G   24G   8% /
tmpfs                             488M     0  488M   0% /dev/shm
tmpfs                             5.0M     0  5.0M   0% /run/lock
tmpfs                             488M     0  488M   0% /sys/fs/cgroup
/dev/sda1                         472M  106M  342M  24% /boot
/dev/mapper/wille--vg-root--home   20G   45M   19G   1% /home
tmpfs                              98M     0   98M   0% /run/user/0
/dev/rbd0                         120M  1.6M  110M   2% /root/test
192.168.73.128:6789:/              45G  120M   45G   1% /root/test_cephfs
# 然后可以看到cephfs_metadata这个pool中多出了一部分数据
$ ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED
    46046M     45926M         120M          0.26
POOLS:
    NAME                ID     USED      %USED     MAX AVAIL     OBJECTS
    rbd                 0      8820k      0.06        15307M          15
    first-pool          1          0         0        15307M           0
    cephfs_data         2          0         0        15307M           0
    cephfs_metadata     3       2545         0        15307M          20
# 当我们把一个39M的文件copy到挂载后的目录(/root/test_cephfs)中之后,可以看到cephfs_data中也多出了对应的数据
$ ceph df
GLOBAL:
    SIZE       AVAIL      RAW USED     %RAW USED
    46046M     45814M         232M          0.51
POOLS:
    NAME                ID     USED       %USED     MAX AVAIL     OBJECTS
    rbd                 0       8820k      0.06        15270M          15
    first-pool          1           0         0        15270M           0
    cephfs_data         2      38977k      0.25        15270M          10
    cephfs_metadata     3       37033         0        15270M          20

部署过程中可能遇到的问题

遇到ceph health提示HEALTH_WARN

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
# 当我们执行ceph -s时可能遇到下面的错误
$ ceph -s
cluster b3609cba-0b6d-4311-8aa3-6968c0e66f5e
 health HEALTH_WARN
        64 pgs degraded
        64 pgs stuck degraded
        64 pgs stuck unclean
        64 pgs stuck undersized
        64 pgs undersized
 monmap e1: 1 mons at {0=10.11.108.188:6789/0}
        election epoch 3, quorum 0 0
 osdmap e15: 2 osds: 2 up, 2 in
        flags sortbitwise,require_jewel_osds
  pgmap v36: 64 pgs, 1 pools, 0 bytes data, 0 objects
        69172 kB used, 3338 GB / 3338 GB avail
              _64 active+undersized+degraded

# 这一般是我们所使用的/dev/sdb被格式化为了ext4的文件系统
# 在我的实验环境里,通过ceph.conf设置一些全局参数没能解决该问题
# 将/dev/sdb格式化为xfs并重新部署ceph之后即解决了