在现有 Ceph 集群搭建 S3 对象存储
ceph集群搭建:ceph集群搭建-CSDN博客
一、在 Dashboard 创建 RGW 服务(核心,开启 S3 能力)
创建完成回到 Services 列表,看到 rgw 行「正在运行」列显示 3/3 即部署完成
补充命令行备用(界面异常时用)
# 一键部署3实例RGW
cephadm shell ceph orch apply rgw s3 default --replicas=3
# 查看rgw状态cephadm shell ceph orch ps | grep rgw
二、验证 RGW 服务端口连通
所有客户端 / 应用访问 S3 地址格式:
http://任意集群节点IP:7480
- 本地浏览器 / Postman 访问
http://节点IP:7480,返回 XML 说明 RGW 正常工作
三、创建 S3 访问用户(获取 AccessKey/SecretKey)
RGW 部署完成后,左侧菜单栏出现对象网关菜单,所有 S3 账号、桶都在这里管理:
1、创建用户
左侧点击【对象网关】→【用户】→【创建用户】
2、查看密钥
用户创建完成点击用户展开显示里面获取密钥
命令行创建用户备用
cephadm shell radosgw-admin user create --uid=lzx-s3 --display-name="lzx-s3"
查看密钥
cephadm shell radosgw-admin user info --uid=lzx-s3
四、创建 S3 存储桶 Bucket
- 进入「对象网关」→「存储桶」→「创建存储桶」
- 参数配置:桶名称:全小写字母 / 数字 / 横线,
- 全局唯一所有者:选择上一步创建的
- S3 用户可选配置:对象锁定、访问策略(测试环境直接跳过)
五、MinIO 客户端 mc
1、下载二进制
# AMD64 x86服务器通用
wget https://dl.min.io/client/mc/release/linux-amd64/mc
# 赋予执行权限
chmod +x mc
# 移动到系统全局命令目录
mv mc /usr/local/bin/
2、添加你的 Ceph S3 集群别名(关键步骤)
替换下面参数:
ceph-s3:自定义集群别名http://192.168.234.129:7480:你的 RGW 地址AccessKey:dashboard 密钥页拿到的公钥SecretKey:密钥私钥
mc alias set ceph-s3 http://192.168.234.129:7480 AccessKey SecretKey
3、常用测试命令
#安装mc
wget https://dl.min.io/client/mc/release/linux-amd64/mc -O /usr/bin/mc
chmod +x /usr/bin/mc
# 创建S3用户
radosgw-admin user create --uid=lzx-user --display-name="业务用户"
# 查询用户AK/SK
radosgw-admin user info --uid=lzx-user
# 重置密钥
radosgw-admin key create --uid=lzx-user --key-type=s3
# 禁用/启用用户
radosgw-admin user suspend --uid=lzx-user
radosgw-admin user enable --uid=lzx-user#配置你的 Ceph S3 网关,s3用户的AK/SK
mc alias set cephs3 http://192.168.234.135:8082 你的AccessKey 你的SecretKey
# 查看所有桶
mc ls ceph-s3# 创建桶
mc mb ceph-s3/test-bucket# 上传本地文件到桶
mc cp /tmp/test.txt ceph-s3/test-bucket/#查看文件
mc ls ceph-s3/test-s3
# 下载文件到本地
mc download ceph-s3/test-bucket/test.txt ./# 删除文件
mc rm ceph-s3/test-bucket/test.txt# 本地目录同步到S3(新增文件上传,本地删的不删S3)
mc mirror /tmp/db-backup ceph-s3/test-s3/db-backup
# 双向同步,两边文件保持一致
mc mirror --watch /tmp/db-backup ceph-s3/test-s3/db-backup
# 删除S3上本地已不存在的旧文件
mc mirror --remove /tmp/db-backup ceph-s3/test-s3/db-backup# 删除单个文件
mc rm ceph-s3/test-s3/test.txt
# 递归删除虚拟文件夹内全部文件
mc rm --recursive ceph-s3/test-s3/tmp/
# 删除30天前的文件(定时清理备份)
mc rm --older-than 30d ceph-s3/test-s3/backup/# 桶内重命名文件
mc mv ceph-s3/test-s3/a.txt ceph-s3/test-s3/b.txt
# 文件移动到另一个桶
mc mv ceph-s3/test-s3/a.txt ceph-s3/other-bucket/
# 移动整个虚拟目录
mc mv --recursive ceph-s3/test-s3/tmp ceph-s3/test-s3/old-tmp
#stat 查看文件元数据(大小、修改时间、存储类型)
mc stat ceph-s3/test-s3/test.txt
#cat 直接读取文件内容(不用下载)
mc cat ceph-s3/test-s3/test.txt# 查找桶内所有txt文件
mc find ceph-s3/test-s3 --name "*.txt"
# 查找100MB以上大文件
mc find ceph-s3/test-s3 --larger 100M
# 查找7天前旧备份并删除
mc find ceph-s3/test-s3/backup --older 7d --delete#设置生命周期(自动删除过期文件)示例:30 天自动删除桶内所有文件
mc ilm rule add --expire-days 30 ceph-s3/test-s3
# 查看生命周期规则
mc ilm rule list ceph-s3/test-s3
#清理 30 天前备份
mc find ceph-s3/test-s3/db-backup --older 30d --delete#数据库备份上传 打包数据库
tar zcf /tmp/mysql-$(date +%Y%m%d).tar.gz /var/lib/mysql
# 上传到S3,带日期命名
mc cp /tmp/mysql-$(date +%Y%m%d).tar.gz ceph-s3/test-s3/db-backup/
# 删除本地临时包
rm -f /tmp/mysql-*.tar.gz
六、可视化网页
1、安装Stowage
单二进制 S3 网页控制台(Stowage,适配 Ceph RGW)
# 下载linux amd64版本
wget https://github.com/Stowage-Dev/stowage/releases/latest/download/stowage-linux-amd64
chmod +x stowage-linux-amd64#生成合规 32 字节 64 位十六进制密钥
openssl rand -hex 32
#环境变量
STOWAGE_SECRET_KEYexport STOWAGE_SECRET_KEY="deac0b906cf7fa75ca5b08dbae31496953e12d188a9302471457d01a8e434578"
#后台启动
nohup ./stowage-linux-amd64 serve > stowage.log 2>&1 &
#创建后台管理员账号(服务器执行)
./stowage-linux-amd64 create-admin --username admin --password admin1234567
2、Stowage关联S3
添加 Backend 页面参数:
Region:default
勾选 Path-style addressing
Endpoint:http://192.168.234.129:7480
七、Ceph S3 (RGW) 负载均衡
RGW 无状态:所有 7480 端口 RGW 实例共享同一套桶、用户、对象数据,任意节点处理 S3 读写结果完全一致,天然支持负载分发。
底层数据统一存在 Ceph OSD,负载均衡只做HTTP 请求转发,不复制文件。
3台节点全部部署RGW,端口都是7480,需要统一入口对外提供S3服务。
cephadm 内置 Ingress 服务(一键部署 HAProxy+Keepalived),自动在 3 节点部署 HAProxy、虚拟 VIP 故障转移
1. 先部署多节点 RGW(3 台都开启 7480)
# 创建rgw服务,3节点各跑1个网关
ceph orch apply rgw rgw.rgw-1 --placement="3 ceph-node1 ceph-node2 ceph-node3"
# 验证rgw进程
ceph orch ps --daemon-type rgw
2. 编写 ingress 配置文件 ingress-rgw.yaml
service_type: ingress
service_id: rgw.rgw-1
placement:
hosts:
- ceph-node1
- ceph-node2
- ceph-node3
spec:
backend_service: rgw.rgw-1
virtual_ip: 192.168.234.135/24
frontend_port: 8082
monitor_port: 1967
3. 一键部署负载均衡
ceph orch apply -i ingress-rgw.yaml
4. 访问方式
所有业务 S3 SDK 统一连接 VIP:http://192.168.234.135
- HAProxy 自动轮询分发到
node1:7480 / node2:7480 / node3:7480 - Keepalived 监控,VIP 自动飘移,单节点宕机无感知切换
5、测试
#配置你的 Ceph S3 网关,s3用户的AK/SK
mc alias set cephs3 http://192.168.234.135:8082 你的AccessKey 你的SecretKey
#上传文件
mc cp 6dc3f8138b78006d96817858e6fe0f26~tplv-be4g95zd3a-image.jpeg cephs3/test-s3/
#查看文件
mc ls cephs3/test-s3
#查看stowage可视化页面