使用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-rgw2
ceph-deploy rgw create ceph-rgw1 ceph-rgw2
1. 验证RGW服务
# 在RGW节点上检查服务状态
ssh ceph-rgw1
sudo 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访问
# 安装s3cmd
sudo yum install -y s3cmd
# 配置s3cmd
s3cmd --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-rgw2
ssh ceph-rgw2
sudo 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-rgw2
ssh ceph-rgw2
sudo 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. 权限与策略
命令 | 功能 | 示例 |
---|---|---|
设置存储桶 ACL | 修改存储桶权限 | s3cmd setacl s3://bucket-name --acl-public (公开读) |
设置文件 ACL | 修改文件权限 | s3cmd setacl s3://bucket-name/file.txt --acl-private (私有) |
查看 ACL | 查看权限配置 | s3cmd info s3://bucket-name/file.txt |
4. 高级功能
命令 | 功能 | 示例 |
---|---|---|
生成签名 URL | 生成临时下载链接 | 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复制到存储桶B
s3cmd 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 中的对象存储资源。