使用ceph-deploy安装和配置RADOS Gateway (RGW)并使用S3访问集群
使用ceph-deploy安装和配置RADOS Gateway (RGW)
RADOS Gateway (RGW) 是Ceph提供的对象存储接口,兼容Amazon S3和OpenStack Swift API。以下是使用ceph-deploy
工具安装和配置RGW的详细步骤。
前提条件
已部署Ceph集群并正常运行,如未安装可查看我的博客【虚拟机环境部署Ceph集群的详细指南】
安装步骤
假设我们要在ceph-mon2和ceph-mon3(与monitor节点复用)
上安装RGW服务:
# 进入ceph集群配置目录(通常包含ceph.conf文件)cd ~/ceph-cluster# 安装RGW服务, 我对mon2 mon3的hosts文件做了两个域名的映射# ceph-mon2和ceph-rgw1是同一个节点,同理ceph-mon3和ceph-rgw2ceph-deploy rgw create ceph-rgw1 ceph-rgw2
1. 验证RGW服务
# 在RGW节点上检查服务状态ssh ceph-rgw1sudo systemctl status ceph-radosgw@rgw.ceph-rgw1.service# 或者使用ceph命令检查ceph -s | grep rgw
2. 默认配置
默认情况下:
- RGW监听7480端口
- 数据存储在默认的.rgw.root池中
- 日志存储在/var/log/ceph/目录下
3. 创建S3用户
# 在管理节点上创建用户radosgw-admin user create --uid=\"s3user\" --display-name=\"S3 User\" --access-key=\"ACCESS_KEY\" --secret-key=\"SECRET_KEY\"
4. 测试S3访问
# 安装s3cmdsudo yum install -y s3cmd# 配置s3cmds3cmd --configure# 输入Access Key和Secret Key# 设置host为rgw-node1:7480# 使用HTTP协议(除非配置了HTTPS)# 测试列出存储桶s3cmd ls
高级配置
1. 更改监听端口
# 在ceph.conf中修改,将ceph-rgw2的端口修改为8480[client.rgw.ceph-rgw2]rgw_frontends = \"civetweb port=8480\"# 推送配置并重启服务,.$(hostname -s) 替换成对应的ceph-rgw2域名# 因为我的hostname设置的是ceph-mon,所以这里不替换找不到服务ceph-deploy config push ceph-rgw2ssh ceph-rgw2sudo systemctl restart ceph-radosgw@rgw.$(hostname -s).service
2. 启用HTTPS
# 生成自签名证书(在RGW节点上)sudo openssl req -x509 -nodes -days 365 -newkey rsa:2048 \\ -keyout /etc/ceph/ceph-rgw.key -out /etc/ceph/ceph-rgw.crt# 修改配置[client.rgw.ceph-rgw2]rgw_frontends = \"civetweb port=443s ssl_certificate=/etc/ceph/ceph-rgw.crt ssl_key=/etc/ceph/ceph-rgw.key\"# 推送配置并重启服务ceph-deploy config push ceph-rgw2ssh ceph-rgw2sudo systemctl restart ceph-radosgw@rgw.$(hostname -s).service
常见问题解决
-
服务无法启动:
- 检查
/var/log/ceph/ceph-client.rgw.*.log
日志 - 确保端口未被占用
- 验证ceph集群健康状态
- 检查
-
S3访问被拒绝:
- 确认Access Key和Secret Key正确
- 检查用户权限
radosgw-admin user info --uid=s3user
-
性能问题:
- 考虑增加RGW实例数量
- 调整
rgw_thread_pool_size
参数 - 确保OSD节点有足够资源
后续步骤
- 配置负载均衡器处理多个RGW实例
- 设置监控和告警
- 实施备份策略
- 配置生命周期管理规则
通过以上步骤,您应该已经成功使用ceph-deploy部署了Ceph RADOS Gateway服务,并可以通过S3协议访问对象存储。
s3cmd常用命令
以下是 s3cmd 常用命令的整理,涵盖文件/存储桶管理、权限设置、实用操作等,适用于 Ceph RGW (S3 兼容接口) 和 AWS S3:
1. 存储桶 (Bucket) 管理
s3cmd mb s3://bucket-name
s3cmd rb s3://bucket-name
s3cmd rb --force s3://bucket-name
s3cmd ls
s3cmd ls s3://bucket-name/
2. 文件操作
s3cmd put local-file.txt s3://bucket-name/
s3cmd put --recursive /local/dir/ s3://bucket-name/
s3cmd get s3://bucket-name/remote-file.txt local-file.txt
s3cmd get --recursive s3://bucket-name/remote-dir/ /local/path/
s3cmd del s3://bucket-name/file.txt
s3cmd del s3://bucket-name/*.log
s3cmd sync /local/dir/ s3://bucket-name/
3. 权限与策略
s3cmd setacl s3://bucket-name --acl-public
(公开读)s3cmd setacl s3://bucket-name/file.txt --acl-private
(私有)s3cmd info s3://bucket-name/file.txt
4. 高级功能
s3cmd signurl s3://bucket-name/file.txt +3600
(有效期1小时)s3cmd put --multipart-chunk-size=50MB large-file.iso s3://bucket-name/
s3cmd put --limit-rate=1M local-file.txt s3://bucket-name/
s3cmd sync --exclude=\"*.tmp\" /local/dir/ s3://bucket-name/
5. 信息查询与配置
s3cmd info s3://bucket-name/file.txt
s3cmd du s3://bucket-name/
s3cmd --dump-config
s3cmd --configure
6. 实用技巧
(1) 批量操作
# 删除所有 .log 文件s3cmd del s3://bucket-name/*.log# 同步时排除隐藏文件s3cmd sync --exclude=\".*\" /local/dir/ s3://bucket-name/
(2) 跨存储桶复制
# 从存储桶A复制到存储桶Bs3cmd cp s3://bucket-a/file.txt s3://bucket-b/
(3) 生成公开访问链接
# 设置文件为公开读s3cmd setacl s3://bucket-name/file.txt --acl-public# 直接访问URL(需存储桶支持)http://rgw-endpoint:7480/bucket-name/file.txt
注意事项
- 删除操作谨慎使用:
--force
参数会递归删除存储桶内所有文件,不可逆!
- 大文件传输:
- 超过 5GB 的文件建议使用
--multipart-chunk-size
分块上传。
- 超过 5GB 的文件建议使用
- 权限控制:
- Ceph RGW 的 ACL 行为可能与 AWS S3 存在细微差异,建议测试验证。
- 配置文件:
- 所有配置保存在
~/.s3cfg
,可直接编辑或通过--configure
修改。
- 所有配置保存在
通过以上命令,您可以高效管理 Ceph RGW 或 AWS S3 中的对象存储资源。