Ceph 组件介绍
| 组件名称 | 描述 |
|---|
| monitors | 监视器,对应的守护进程为 ceph-mon,维护集群状态的映射,包括监视器映射,管理器映射,OSD映射,MDS映射和 CRUSH映射,还负责守护进程和客户端之间身份验证,至少需要三个监视器才能实现冗余和高可用性。 |
| managers | 管理器,对应守护进程 ceph-mgr,负责跟踪运行时和 ceph 集群的当前状态,包括存储利用率,当前性能指标和系统负载,通常至少需要二个管理器才能实现高可用。 |
| osds | 对象存储这幅图对应守护进程 ceph-osd,负责存储数据,处理数据复制,恢复,重新平衡,至少需要3个 ceph osd 来实现冗余和高可用,本质上 osd 就是一个 host 主机上的磁盘。 |
| mds | 元数据服务器对应守护进程 ceps-mds ,负责 cephFS 存储元数据。 |
| cephfs | 分布式文件系统,类似于高可用的 NFS。 |
| RGW | 对象存储网关,提供 http |
环境
| IP | 主机名 |
|---|
| 192.168.200.125 | ceph01 |
| 192.168.200.126 | ceph02 |
| 192.168.200.127 | ceph03 |
基础环境配置
修改三个节点主机名
1
2
3
| [root@ceph01 ~]# hostnamectl set-hostname ceph01
[root@ceph02 ~]# hostnamectl set-hostname ceph02
[root@ceph03 ~]# hostnamectl set-hostname ceph03
|
修改三个节点的 hosts 文件
vim /etc/hosts
1
2
3
| 192.168.200.125 ceph01
192.168.200.126 ceph02
192.168.200.127 ceph03
|
配置三个节点免密登录
1
2
3
4
5
6
7
| [root@ceph01 ~]# ssh-keygen -t rsa
[root@ceph02 ~]# ssh-keygen -t rsa
[root@ceph03 ~]# ssh-keygen -t rsa
ssh-copy-id ceph01
ssh-copy-id ceph02
ssh-copy-id ceph03
|
在三个节点上部署 docker
1
2
3
| [root@ceph01 ~]# dnf install docker-ce
[root@ceph02 ~]# dnf install docker-ce
[root@ceph03 ~]# dnf install docker-ce
|
配置三个节点时间同步
服务端(192.168.200.125)
1
| [root@ceph01 ~]# dnf install chrony -y
|
配置
1
2
3
4
5
6
7
8
9
10
11
12
| [root@ceph01 ~]# vim /etc/chrony.conf
pool ntp.aliyun.com iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
allow 192.168.200.0/24
local stratum 10
keyfile /etc/chrony.keys
leapsectz right/UTC
[root@ceph01 ~]# systemctl enable --now chronyd
|
客户端
1
2
3
4
5
6
7
8
9
10
11
12
| dnf install chrony -y
vim /etc/chrony.conf
pool 192.168.200.125 iburst
driftfile /var/lib/chrony/drift
makestep 1.0 3
rtcsync
keyfile /etc/chrony.keys
leapsectz right/UTC
logdir /var/log/chrony
systemctl enable --now chronyd
|
客户端验证
为所有节点安装 ceph-common 包
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 将主节点的ceph源同步至其他节点
[root@ceph01 ~]# scp /etc/yum.repos.d/ceph.repo ceph02:/etc/yum.repos.d/
[root@ceph01 ~]# scp /etc/yum.repos.d/ceph.repo ceph03:/etc/yum.repos.d/
# 在节点安装ceph-common,ceph-common包会提供ceph命令并在etc下创建ceph目录
yum -y install ceph-common
#将ceph.conf文件传输至对应节点
scp /etc/ceph/ceph.conf ceph02:/etc/ceph/
scp /etc/ceph/ceph.conf ceph03:/etc/ceph/
#将密钥文件传输至对应节点
scp /etc/ceph/ceph.client.admin.keyring ceph02:/etc/ceph/
scp /etc/ceph/ceph.client.admin.keyring ceph03:/etc/ceph/
|
部署 Ceph
安装 cephadm 工具
1
2
3
4
5
| CEPH_RELEASE=18.2.0
curl --silent --remote-name --location https://download.ceph.com/rpm-${CEPH_RELEASE}/el9/noarch/cephadm
chmod +x cephadm
|
创建源信息
1
2
3
| [root@ceph01 ~]# ./cephadm add-repo --release 18.2.0
[root@ceph01 ~]# sed -i 's#download.ceph.com#mirrors.ustc.edu.cn/ceph#' /etc/yum.repos.d/ceph.repo
[root@ceph01 ~]# ./cephadm install
|
引导集群
1
| [root@ceph01 ~]# cephadm bootstrap --mon-ip 192.168.200.125
|
启用 ceph 组件
1
2
| [root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph02
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub ceph03
|
添加主机
1
2
| [root@ceph01 ~]# ceph orch host add ceph02
[root@ceph01 ~]# ceph orch host add ceph03
|
查看集群管理的主机
1
| [root@ceph01 ~]# ceph orch host ls
|
安装 ceph-common 包
1
2
3
4
5
6
7
8
9
10
| # 安装
[root@ceph01 ~]# cephadm install ceph-common
Installing packages ['ceph-common']...
# 查看版本
[root@ceph01 ~]# ceph -v
# 启用 ceph 组件
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph02
[root@ceph01 ~]# ssh-copy-id -f -i /etc/ceph/ceph.pub root@ceph03
|
创建 MON 和 MGR
1
2
3
4
5
| # ceph 集群一般默认会允许存在5个 mon 和 2个 mgr;可以使用如下命令进行手动修改
[root@ceph01 ~]# ceph orch apply mon --placement="3 ceph01 ceph02 ceph03"
[root@ceph01 ~]# ceph orch apply mgr --placement="3 ceph01 ceph02 ceph03"
[root@ceph01 ~]# ceph orch ls
|
创建 OSD
1
2
3
| [root@ceph01 ~]# ceph orch daemon add osd ceph01:/dev/sdb
[root@ceph01 ~]# ceph orch daemon add osd ceph02:/dev/sdb
[root@ceph01 ~]# ceph orch daemon add osd ceph03:/dev/sdb
|
创建 MDS
1
2
3
4
5
6
7
8
9
10
11
12
| # 首先创建 cephfs,不指定 pg 的话,默认会自动调整
# 集群中单个池的 PG 数计算公式如下:PG总数=(OSD数*100)/最大副本数/池数
[root@ceph01 ~]# ceph osd pool create cephfs_data 16
[root@ceph01 ~]# ceph osd pool create cephfs_metadata 16
[root@ceph01 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
# 开启 mds 组件
# cephfs:文件系统名称;--placement:指定集群内需要几个mds,后面跟主机名
[root@ceph01 ~]# ceph orch apply mds cephfs --placement="3 ceph01 ceph02 ceph03"
# 查看各节点是否已启动 mds 容器,还可以使用 ceph orch ps 查看某一节点运行的容器
[root@ceph01 ~]# ceph orch ps --daemon-type mds
|
创建 RGW
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 创建一个领域
[root@ceph01 ~]# radosgw-admin realm create --rgw-realm=myorg --default
# 创建区域组
[root@ceph01 ~]# radosgw-admin zonegroup create --rgw-zonegroup=default --master --default
# 创建区域
[root@ceph01 ~]# radosgw-admin zone create --rgw-zonegroup=default --rgw-zone=cn-east-1 --master --default
# 为特定领域和区域部署 radosgw 守护进程
[root@ceph01 ~]# ceph orch apply rgw myorg cn-east-1 --placement="3 ceph01 ceph02 ceph03"
# 验证各节点是否启动 rgw 容器
[root@ceph01 ~]# ceph orch ps --daemon-type rgw
|
启用 CephFS
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
| # 请确认至少有一个节点启用了 mds 服务,集群中单个池的 PG 数计算公式如下:PG总数=(OSD数*100)/最大副本数/池数
# 在 ceph 集群,其中一个节点执行即可。
# 首先创建 cephfs,不指定 pg 的话,默认会自动调整
[root@ceph01 ~]# ceph osd pool create cephfs_data 16
pool 'cephfs_data' created
[root@ceph01 ~]# ceph osd pool create cephfs_metadata 16
pool 'cephfs_metadata' created
[root@ceph01 ~]# ceph fs new cephfs cephfs_metadata cephfs_data
new fs with metadata pool 3 and data pool 2
[root@ceph01 ~]# ceph df
# 挂载 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
39
| # 在 ceph 集群,其中一台执行命令即可
# 初始化 rbd 池
[root@ceph01 ~]# ceph osd pool create rbd_storage 16 16 replicated
pool 'rbd_storage' created
# 创建一个块设备
[root@ceph01 ~]# rbd create --size 1024 rbd_image -p rbd_storage
[root@ceph01 ~]# rbd ls rbd_storage
rbd_image
# 删除命令
[root@ceph01 ~]# rbd rm rbd_storage/rbd_image
# 挂载 rbd 块设备
# 将块设备映射到系统内核
[root@ceph01 ~]# rbd map rbd_storage/rbd_image
/dev/rbd0
[root@ceph01 ~]# lsblk | grep rbd
rbd0 251:0 0 1G 0 disk
# 格式化 rbd 设备
[root@ceph01 ~]# mkfs.ext4 -m0 /dev/rbd/rbd_storage/rbd_image
mke2fs 1.45.6 (20-Mar-2020)
Discarding device blocks: done
Creating filesystem with 262144 4k blocks and 65536 inodes
Filesystem UUID: edd56aad-cbd4-4f69-b950-de46d9098f1c
Superblock backups stored on blocks:
32768, 98304, 163840, 229376
Allocating group tables: done
Writing inode tables: done
Creating journal (8192 blocks): done
Writing superblocks and filesystem accounting information: done
# 挂载 rbd 设备
# 取消内核挂载
rbd unmap /dev/rbd0
|
重置密码
1
2
3
4
5
6
| # 查看都有哪些用户
[root@ceph01 ~]# ceph dashboard ac-user-show
# 重置用户密码
[root@ceph01 ~]# echo abcd1234 > password.yml
[root@ceph01 ~]# ceph dashboard ac-user-set-password admin -i password.yml
|
测试
查看集群状态
1
| [root@ceph01 ~]# ceph -s
|
访问页面
1
2
3
4
5
6
7
8
| # 访问 Ceph 集群页面
https://192.168.200.125:8443
# grafana
https://192.168.200.125:3000
# prometheus
http://192.168.200.125:9095
|
其他命令
OSD 相关的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
| # 查看 OSD 列表
ceph osd tree
# 查看 OSD 详细状态
ceph osd status
# 查看集群 OSD 使用情况
ceph osd df
# 查看某个主机上的 OSD
ceph orch ps --host ceph02
# 查看所有 OSD 守护进程
ceph orch ps | grep osd
|
其他命令
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
| # 列出集群内运行的组件
ceph orch ls
# 列出集群内的主机
ceph orch host ls
# 列出集群内容器的详细信息
ceph orch ps
# 列出集群内的存储设备
ceph orch device ls
# 调整组件的数量
ceph orch apply mon --placement="3 ceph01 ceph02 ceph03"
# 查看指定的组件
ceph orch ps --daemon-type rgw
# 给某个主机添加标签
ceph orch host label add ceph01 mon
# 告诉 cephadm 根据标签部署 mon,修改后只有包含 mon 的主机才会成为 mon,原来启动的 mon 不会关闭
ceph orch apply mon label:mon
# 禁用 mon 自动部署
ceph orch apply mon --unmanaged
|