RockyLinux10基于 cephadm 部署Ceph

温馨提醒

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.125ceph01
192.168.200.126ceph02
192.168.200.127ceph03

基础环境配置

修改三个节点主机名

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
  • 客户端验证

    1
    
    chronyc sources -v

为所有节点安装 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