Ceph 提供了 ceph-deploy
工具可以很方便地部署一个 Ceph 集群,为了更好理解和管理 Ceph 集群, 我们也可以手动部署一个 Ceph 集群。
Table of Contents
- 手动部署 Ceph 集群
- Monitor 自举
- 设置 Ceph Manager
- 添加 OSD
- 自动模式
- BLUSTORE
- FILESTORE
- 手动模式
- 添加 MDS
- 总结
- 重命名 Ceph 集群
所有的 Ceph 集群都心须有一个 monitor,然后有尽可能多的 OSDs 来存储对象。 Monitors 自举是部署 Ceph 集群的第一步, Monitors 的部署也为整个集群设定了非常重要的条件,比如 Pools 副本数量, 每个 OSD 上的 PG 数, 心跳间隔、是否要求认证等等。 大多数的选项都被设置成默认值。
接下来我们会建立一个有2个 Monitor nodes 同时作为 OSDs nodes 的 Ceph 集群。
手动部署 Ceph 集群
Monitor 自举
一个 Monitor 自举需要以下几个方面:
- 唯一标志符:
fsid
是集群的的一个唯一标志符, 当 Ceph 用做 Ceph FileSystem时,也代表着 文件系统 ID。现在 Ceph 支持原生接口,块设备,以及对象存储网关接口等等。所以 fsid
现有点用词不当。
- 集群名字: Ceph 集群有一个集群名字,是一个没有空格的字符串。 默认的名字是
ceph
, 可以指定一个不同的名字。当在管理多个集群时,给集群起一个名字是非常有用的,你需要明确指定你要操作的是哪个集群。 这里我们使用 amito
作为集群名字。
- Monitor 名字: 每一个 monitor 实例都有一个唯一的名字,一般地, Ceph Monitor 名字就是 host 名字。官方推荐 Ceph 的 OSD 实例不要和 Monitor 在同一个 node 上。
- Monitor Map: 初始的 Monitors 自举要求我们生成一个 monitor map。 Monitor map 需要
fsid
, 集群名字,还有至少一个节点名字与 IP 地址。
- Monitor Keyring: Ceph 中 Monitors 是使用 keyring 来进行认证的来互相通信的,所以需要一个 keyring, 我们需要生成提供一个 monitor secret。
- Administrator Keyring: 管理节点也需要一个 keyring 来与集群交互, 使用的用户为
client.admin
。
前面的要求并不是指 Ceph 配置文件的生成。但为了方便,官方建议创建一个 包含 fsid
,mon initial members
和 mon host
的Ceph 配置文件。步骤如下:
- 登陆到 初始 monitor 节点上
- 确保
/etc/ceph
文件夹存在, 安装 ceph 时会创建这一个文件夹。
- 创建一个 Ceph 配置文件, 默认为
/etc/ceph/ceph.conf
, 这里为 /etc/ceph/amito.conf
1
| $ sudo vim /etc/ceph/amito.conf
|
- 为集群生成一个唯一 ID (fsid)
1 2 3
| $ uuidgen > uuid.txt $ cat uuid.txt 17e4176b-29c6-4479-bb8c-72e0918d908c
|
- 将这唯一 ID 加到
amito.conf
中。
1
| fsid = 17e4176b-29c6-4479-bb8c-72e0918d908c
|
- 添加初始 monitors 到 Ceph 配置文件中
1
| mon initial members = node1, node2
|
- 添加初始 monitors 的 IPs 到 Ceph 配置文件中
1
| mon host = 192.168.10.1, 10=92.168.10.2
|
- 为集群生成一个 keyring, 并生成一个 monitor secret key
1
| $ ceph-authtool --create-keyring /tmp/amito.mon.keyring --gen-key -n mon. -cap mon 'allow *'
|
- 生成一个
administrator
keyring, 一个 client.admin
用户, 并加到 keyring 中
1
| $ sudo ceph-authtool --create-keyring /etc/ceph/amito.client.admin.keyring --gen-key -n client.admin --cap mon 'allow *' --cap osd 'allow *' --cap mds 'allow *' --cap mgr 'allow *'
|
- 创建一个
bootstrap-osd
keyring, 生成一个 bootstrap-osd
用户,并加到 keyring 中
1
| sudo ceph-authtool --create-keyring /var/lib/ceph/bootstrap-osd/amito.keyring --gen-key -n client.bootstrap-osd --cap mon 'profile bootstrap-osd'
|
- 将生成的 keyrings 加到
amito.mon.keyring
中
1 2
| $ sudo ceph-authtool /tmp/amito.mon.keyring --import-keyring /etc/ceph/amito.client.admin.keyring $ sudo ceph-authtool /tmp/amito.mon.keyring --import-keyring /var/lib/ceph/bootstrap-osd/amito.keyring
|
- 使用
节点名
,IP地址
, 和 fsid
生成一个 monitor map
, 保存到 /tmp/monmap
1 2 3 4
| $ monmaptool --create --add {hostname} {ip-address} --fsid {uuid} /tmp/monmap
$ monmaptool --create --add node1 192.168.10.1 --fsid {uuid} /tmp/monmap $ monmaptool --add node2 192.168.10.2 --fsid {uuid} /tmp/monmap
|
- 在 monitor 节点上创建默认的数据文件夹
1 2 3
| $ sudo mkdir -p /var/lib/ceph/mon/{cluster-name}-{hostname}
$ sudo mkdir -p /var/lib/ceph/mon/amito-node1
|
- 利用 monitor map 和 keyring 配置 Mon 节点.
1 2 3 4
| $ sudo ceph-mon [--cluster cluster-name] --mkfs -i {hostname} --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
$ sudo ceph-mon --cluster amito --mkfs -i 192.168.10.1 --monmap /tmp/monmap --keyring /tmp/ceph.mon.keyring
|
- 设置 Ceph 配置文件. 如下是一个例子.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| [global] fsid = 17e4176b-29c6-4479-bb8c-72e0918d908c mon initial members = node1 mon host = 192.168.10.1 public network = 192.168.0.0/24 auth cluster required = cephx auth service required = cephx auth client required = cephx osd journal size = 1024 osd pool default size = 2 osd pool default min size = 1 osd pool default pg num = 256 osd pool default pgp num = 256 osd crush chooseleaf type = 1
|
- 创建完成文件. 标记 monitor 已经创建完并可以启动.
1 2 3 4
| $ sudo touch /var/lib/ceph/mon/{cluster-name}-{hostname}/done
$ sudo touch /var/lib/ceph/mon/amito-node1/done
|
- 启动 Ceph Monitor.
1 2 3 4 5 6 7
| $ sudo su -c 'echo "CLUSTER={cluster-name}" > /etc/sysconfig/ceph' $ sudo systemctl enable --now ceph-mon@{hostname}
$ sudo /etc/init.d/ceph start mon.{hostname}
$ sudo systemctl enable --now ceph-mon@node1
|
- 查看 Ceph 集群状态.
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| $ ceph -s cluster: id: 17e4176b-29c6-4479-bb8c-72e0918d908c health: HEALTH_OK
services: mon: 2 daemons, quorum node1, node2 osd: 0 osds: 0 up, 0 in
data: pools: 0 pools, 0 pgs objects: 0 objects, 0 bytes usage: 0 kB used, 0 kB / 0 kB avail pgs:
|
设置 Ceph Manager
- 生成一个认证 Key
1 2
| $ name={hostname} $ ceph --cluster amito auth get-or-create mgr.$name mon 'allow profile mgr' osd 'allow *' mds 'allow *'
|
将 生成的 Key 放在 mgr data 文件夹, 一般是在 /var/lib/ceph/mgr/{cluster-name}-{name}
2. 启动 ceph-mgr:
1
| $ sudo ceph-mgr -i $name
|
- 查看 mgr 状态:
1 2 3
| $ ceph -s ... mgr status: ${name}
|
一般为了高可用, 每个 mon 节点都应该运行一个 mgr 进程.
添加 OSD
在初始 monitors 开始运行后, 我们就该添加 OSDs 到 集群中了. 集群只有在有足够的 OSDs 来处理对象副本数量时才会达到 active+clean
状态.
自动模式
BLUSTORE
- 创建 OSD: 联合模式
1 2 3 4
| $ ssh node1 $ sudo ceph-volume lvm create --data {data-path}
$ sudo ceph-volume lvm create --data /dev/sdb1
|
- 创建 OSD: 分裂模式
1 2 3 4 5 6 7 8 9
| #### 1. prepare osd $ sudo ceph-volume lvm prepare --data {data-path} $ sudo ceph-volume lvm list ### e.g. $ sudo ceph-volume lvm prepare --data /dev/sdb2 #### 2. activate osd $ sudo ceph-volume lvm activate {ID} {FSID} ### e.g $ sudo ceph-volume lvm activate 1 17e4176b-29c6-4479-bb8c-72e0918d908c
|
FILESTORE
- 创建 OSD: 联合模式
1 2 3 4
| $ ssh node1 $ sudo ceph-volume lvm create --filestore --data {data-path}
$ sudo ceph-volume lvm create --filestore --data /dev/sdb3
|
- 创建 OSD: 分裂模式
1 2 3 4 5 6 7 8 9
| $ sudo ceph-volume lvm prepare --filestore --data {data-path} $ sudo ceph-volume lvm list
$ sudo ceph-volume lvm prepare --filestore --data /dev/sdb4
$ sudo ceph-volume lvm activate {ID} {FSID}
$ sudo ceph-volume lvm activate 4 17e4176b-29c6-4479-bb8c-72e0918d908c
|
手动模式
- 登陆到 OSD 节点:
- 生成一个 UUID
1 2
| $ uuidgen > osd.uuid.txt $ cat osd.uuid.txt
|
- 创建一个 CephX key:
1
| $ OSD_SECRET=$(ceph-authtool --get-print-key)
|
- 创建 OSD.
1 2 3
| ID=$(echo "{\"cephx_secret\": \"$OSD_SECRET\"}" | \ ceph osd new $UUID -i - \ -n client.bootstrap-osd -k /var/lib/ceph/bootstrap-osd/ceph.keyring)
|
- 创建 OSD 目录文件.
1
| $ mkdir /var/lib/ceph/osd/ceph-$ID
|
添加 MDS
- 创建 MDS 数据文件夹. id 为任意名字, 一般取为 hostname.
1
| $ mkdir -p /var/lib/ceph/mds/{cluster-name}-{id}
|
- 生成 Keyring.
1
| $ ceph-authtool --create-keyring /var/lib/ceph/mds/{cluster-name}-{id}/keyring --gen-key -n mds.{id}
|
- 导入 Key 并设置 caps.
1
| ceph auth add mds.{id} osd "allow rwx" mds "allow" mon "allow profile mds" -i /var/lib/ceph/mds/{cluster}-{id}/keyring
|
- 将设置写入 Ceph 配置文件
- 手动启动 mds
1 2 3 4
| $ ceph-mds --cluster {cluster-name} -i {id} -m {mon-hostname}:{mon-port} [-f]
$ ceph-mds --cluster ceph -i node1 -m {mon-hostname}:{mon-port} -f
|
- 或者使用
systemd
或者 sysinitv
启动:
1 2 3
| sudo systemctl enable --now ceph-mds@id 7. 安装 Ceph FileSystem
|
总结
在设置了 monitor, manager 和 OSDs 后, 可以查看 Ceph 集群的状态:
1 2 3
| $ ceph -s $ ceph -w $ ceph osd tree
|
重命名 Ceph 集群
通过上面的手动创建过程可以看到, Ceph 集群名字更多是一个标志名, 没有进行硬编码. 所以可以对 Ceph 集群进行重命名. 具体过程就是将所有的文件夹和文件重命名, 例如从 ceph
到 remote
. 改完后重启整个集群.