Ubuntu18.04部署P版ceph
ceph作为目前最火的开源分布式存储,支持对象,块,文件存储。把每个需要管理的数据流(比如文件)切分成多个固定大小的对象数据,并以其原子单元作为存取。
一ceph的存储核心服务是rados(可靠,自动化分布式对象存储)。
二ceph集群角色有如下几个
三正式安装
3.1下载地址
Ubuntu:https://mirrors.tuna.tsinghua.edu.cn/ubuntu-releases/bionic/
3.2部署环境:
主机名 | publi network | cluster network | 功能组件 |
admin | 192.168.89.140 | 192.168.64.140 | ceph-deploy,mon |
node1 | 192.168.89.141 | 192.168.64.141 | mon,osd,mgr |
node2 | 192.168.89.142 | 192.168.64.142 | mon,osd,mgr,mds |
node3 | 192.168.89.143 | 192.168.64.143 | rgw,osd |
时间同步
关闭selinux和防火墙
配置域名解析
配置所有节点之间免ssh登录 注意: 配置的是普通用户
每个节点2块磁盘
3.3ceph安装配置
3.3.1 添加Pacific版本源
3.3.6 初始化mon并生产秘钥,能看到生成的key
xxx@admin~/cluster$:ceph-deploy mon create-initial


3.3.7 分发admin秘钥,理论上可以让任何节点都管理配置,此外同步集群配置文件和认证文件。一般仅仅是mon节点,当有客户端使用也要分发。

3.3.8部署manager节点(在L版本及以上才有)
xxx@admin~/cluster$:ceph-deploy mgr create node1 node2(无法连续执行,分开执行单个节点)
3.3.9ceph-deploy配置系统环境,方便执行ceph命令
xxx@admin~/cluster$:ceph-deploy admin admin 给自己授权

3.3.10列出node节点磁盘
xxx@admin~/cluster$:ceph-deploy disk list node1
3.3.11 添加osd
xxx@admin~/cluster$:ceph-deploy osd create node1 --data /dev/sdb
其他主机类似操作
全部添加完查看集群状态ceph osd tree
3.3.12 移除osd
1.停用设备 ceph osd out osd.1
2在osd所在节点停止进程 systemctl stop ceph-osd@1
3.移除设备 ceph osd purge 1 --yes-i-really-mean-it
4.清除osd lvm信息 vgremove ceph-xxx ceph-xxx信息可以用ceph-volume lvm list查看。此操作不是必须,是用于重新将磁盘添加回集群前操作。
注:也可以删除/dev/dm-xx,同时清除dm-xx的文件系统(dd实现),但不推荐。
3.3.13 测试上传下载
xxx@admin~/cluster$:ceph osd pool create myrbd1 32 32 myrbd1:池名 32:PG 32: PGP

注:由于此时走的是http协议并不安全,可以使用证书加密方式来保障安全。配置如下
→1在rgw节点创建证书目录,并自签证书
mkdir /etc/ceph/certs
cd certs;openssl genrsa -out civetweb.key 2048
openssl req -new -x509 -key civetweb.key -out civetweb.crt -subj "/CN=rgw.ty.net"
cat civetweb.key civetweb.crt >civetweb.pem
→2 rgw节点的ceph.conf配置新增如下
→3重启rgw服务
systemctl restart ceph-radosgw@rgw.node3.service 或者systemctl restart ceph-radosgw.taget
→4修改本地主机的host文件,为了做域名解析 /system32/dirvers/host
验证
以下 rbd和cephfs的挂载硬盘均为试验多次重复使用,会有图片不一致之处。

3.3.18查看ceph集群使用状态 ceph df
3.3.19客户端使用ceph块设备,安装ceph-mon,将管理节点的配置和认证文件同步给客户端
客户端 apt install ceph-common // yum install ceph-common 生产为openstack提供块设备较多
客户端:rbd -p myrdb1 map img1 注意:ceph为P版,客户端内核版本或ceph版本过低,会导致无法映射。此模式使用的账号是admin,最高权限
客户端:进行格式化挂载
使用普通账号挂载:
→1创建普通账号,可以选择任何组件的权限,mon,mds,rgw,osd等。
→2创建账号对应的key
→3将key传到客户端
→4客户端使用普通账号登入ceph集群
ceph --user tyy -s
→5客户端映射镜像,格式化挂载使用
3.3.20 调整pg,此操作可以在任何mon节点进行
Ceph集群中的PG总数:
PG总数 = (OSD总数 * 100 / 最大副本数)
** 结果必须舍入到最接近的2的N次方幂的值。
Ceph集群中每个pool中的PG总数:
存储池PG总数 = (OSD总数 * 100 / 最大副本数) / 池数
→1 检查rbd这个pool里已存在的PG和PGP数量:
root:ceph osd pool get myrbd1 pg_num
pg_num: 128
root:ceph osd pool get myrbd1 pgp_num
pg_num: 128
→2 检查pool的复制size
root:ceph osd dump |grep size|grep myrbd1(池名)
pool 2 'myrbd1' replicated size 3 min_size 2 crush_ruleset 0 object_hash rjenkins pg_num 128 pgp_num 128 last_change 45 flags hashpspool stripe_width 0
2:池 ID
myrbd1:池名
replicate size:副本数
→3 根据公式计算出pg值并修改,本试验中pg=500/3,按照pg值必须接近2^n,所以修改成256。当然试验可以自定义值,不得超过默认值340即可。
ceph osd pool set myrbd1 pg_num 256
ceph osd pool set myrbd1 pgp_num 256
注意:因为仅仅创建了一个池,如果有多个池,pg需要除以池数,每个池都要进行pg和pgp值得修改。
3.3.21使用cephfs
→1 在deploy节点选择node2创建mds服务器
xxx@admin~/cluster:ceph-deploy mds create node2
→2 在node2上创建cephfs所需要的数据池和元数据池
ceph osd pool create cephfs_data 16
ceph osd pool create cephfs_metadata 16
注意:两个池的pg值可以不同
→3 创建cephfs文件系统
ceph fs new cephfs_storage cephfs_metadata cephfs_data
查看是否成功创建
可以看到对应的池,文件系统都已成功
→4 客户端安装ceph-mon,并挂载cephfs。
apt install ceph-mon -y // yum install ceph-mon -y
创建目录点
mkdir /mnt/cephfs
挂载并验证
mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secret=AQCnHhhhbsRFDRAAOU4KgYm73B2ZAWnZtjDG7w==
注意:命令中的secret是从mon节点拷贝过去的,/etc/ceph/ceph.client.admin.keyring中的key。由于明文相对危险,所以一般把key单独拿出来做个文件。
把key值放出admin.secret 。然后命令修改为mount -t ceph 192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/admin.secret。
可以像块设备一样使用普通账号,需要修改池账号权限池为文件存储池,依旧以上图池为例。pool=cephfs_data,普通账号为ty。
将生成的keyring传到客户端上,登录ceph集成--ceph --user ty -s。
客户端进行挂载,方式依旧如上所写可以用key或者admin.secret文件,但是name需要修改成ty。
当然有多个mds服务,可以同时挂载mount -t ceph xxxx:6789,xxxxxx:6789,192.168.89.142:6789:/ /mnt/cephfs/ -o name=admin,secretfile=/etc/ceph/ty.secret
→5删除文件系统以及池
客户端取消挂载 umount /mnt/cephfs
cephfs节点 systemctl stop ceph-mds.target
ceph fs rm cephfs_storage --yes-i-really-mean-it
ceph osd pool rm cephfs_data cephfs_data --yes-i-really-really-mean-it
ceph osd pool rm cephfs_data cephfs_metadata --yes-i-really-really-mean-it
注意:如果报错无法删除,请在mon节点/etc/ceph/ceph.conf添加mon allow pool delete = true,将此文件同步给其他mon节点
ceph-deploy --overwrite-conf config push node{1..2},所有mon节点重启服务:systemctl restart ceph-mon.target

→2删除快照
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· C#/.NET/.NET Core技术前沿周刊 | 第 29 期(2025年3.1-3.9)
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异