ceph存储之OSS对象存储
目录
一、ceph对象存储简介
Ceph对象网关是一个对象存储接口,建立在此基础之上, librados以为应用程序提供通往Ceph存储集群的RESTful网关。
Ceph对象存储支持两个接口:
- 与S3兼容:为对象存储功能提供与Amazon S3 RESTful API的大部分子集兼容的接口。
- 兼容Swift:为对象存储功能提供与OpenStack Swift API的大部分子集兼容的接口。
Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是用于与Ceph存储群集进行交互的HTTP服务器。由于它提供与OpenStack Swift和Amazon S3兼容的接口,因此Ceph对象网关具有自己的用户管理。Ceph对象网关可以将数据存储在用于存储来自Ceph文件系统客户端或Ceph块设备客户端的数据的同一Ceph存储群集中。S3和Swift API共享一个公共的名称空间,因此可以使用一个API编写数据,而使用另一个API检索数据。
没有特殊声明,在 ceph-node-11 节点上执行
二、部署RGW存储网关
在上面的介绍中有提到,Ceph对象存储使用Ceph对象网关守护进程(radosgw),它是用于与Ceph存储群集进行交互的HTTP服务器。所以我们需要先安装ceph-radosgw。
此博文基于部署ceph集群 (Nautilus版)进行操作。
$ yum -y install ceph-radosgw $ cd ~/ceph-deploy # 必须进入此目录下 $ ceph-deploy rgw create ceph-node-11 # 将 ceph-node-11 设置为 radosgw
输出如下:
$ ceph -s # 查看集群状态,多了一个rgw服务 cluster: id: 5c52998e-a8a2-4602-b3ea-cff2af43b128 health: HEALTH_OK services: mon: 3 daemons, quorum ceph-node-11,ceph-node-12,ceph-node-13 (age 2m) mgr: ceph-node-11(active, since 4m), standbys: ceph-node-12, ceph-node-13 osd: 3 osds: 3 up (since 3m), 3 in (since 3m) rgw: 1 daemon active (ceph-node-11) task status: data: pools: 4 pools, 128 pgs objects: 187 objects, 1.2 KiB usage: 3.0 GiB used, 297 GiB / 300 GiB avail pgs: 128 active+clean $ ss -lnpt | grep 7480 # 确认端口在监听 LISTEN 0 128 *:7480 *:* users:(("radosgw",pid=20059,fd=45)) LISTEN 0 128 :::7480 :::* users:(("radosgw",pid=20059,fd=46)) $ ceph osd lspools # radosgw部署成功后,会自动增加几个资源池 1 .rgw.root 2 default.rgw.control 3 default.rgw.meta 4 default.rgw.log
2.1 修改rgw的默认监听端口
2.1.1 修改配置文件
$ cd ~/ceph-deploy $ vim ceph.conf # 增加如下配置 # 将 ceph-node-11 替换为你rgw所在节点的主机名 [client.rgw.ceph-node-11] rgw_frontends = "civetweb port=80"
2.1.2 替换配置文件
# 将后面三个替换为你ceph集群中的所有节点 $ ceph-deploy --overwrite-conf config push ceph-node-11 ceph-node-12 ceph-node-13
2.1.3 重启生效
$ systemctl restart ceph-radosgw.target $ ss -lnpt | grep radosgw # 确认端口已修改 LISTEN 0 128 *:80 *:* users:(("radosgw",pid=21549,fd=44))
三、创建ceph对象网关用户
若想使用对象网关,必须先在radosgw里创建一个用户。
创建的用户分两种类型:
- S3风格的;
- SWIFT风格的;
3.1 创建用于S3访问的RADOSGW用户
$ radosgw-admin user create --uid ceph-s3-user --display-name "Ceph S3 User Demo"
上述命令执行成功后,输出如下:
如果没有保存也没关系,后续可以使用如下命令去查询:
$ radosgw-admin user list # 查看用户列表 [ "ceph-s3-user" ] $ radosgw-admin user info --uid ceph-s3-user { "user_id": "ceph-s3-user", "display_name": "Ceph S3 User Demo", "email": "", "suspended": 0, "max_buckets": 1000, "subusers": [], "keys": [ { "user": "ceph-s3-user", "access_key": "CMED3NGU5LG41XITKNJO", "secret_key": "yukR3jibKtIHQmLwanK6wsSUCiXWuwjPJLUhAORq" } ], "swift_keys": [], "caps": [], "op_mask": "read, write, delete", "default_placement": "", "default_storage_class": "", "placement_tags": [], "bucket_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "user_quota": { "enabled": false, "check_on_raw": false, "max_size": -1, "max_size_kb": 0, "max_objects": -1 }, "temp_url_keys": [], "type": "rgw", "mfa_ids": [] }
3.2 创建用于SWIFT访问的RADOSGW用户
swift用户需要基于上面s3创建的用户来创建,所以在创建swift类型的用户前,需要保证有如下用户:
$ radosgw-admin user list # 确保有一个可用账户 [ "ceph-s3-user" ] $ radosgw-admin subuser create --uid ceph-s3-user --subuser=ceph-s3-user:swift --access=full # 基于ceph-s3-user用户创建swift拥有所有权限的用户
返回的结果如下:
$ radosgw-admin key create --subuser=ceph-s3-user:swift --key-type=swift --gen-secret # 生成 ceph-s3-user:swift 对应的secret_key
返回的结果如下:
四、访问radosgw验证账户
4.1 测试S3结构访问
4.1.1 使用python脚本验证
需要编写并运行Python测试脚本来验证S3访问。S3访问测试脚本将连接到radosgw,创建一个新存储桶并列出所有存储桶。
$ yum -y install python-boto # 安装脚本依赖 # 测试脚本如下 # 请自行替换 access_key、secret_key、host、port 为你实际的值 $ cat > s3test.py << EOF import boto.s3.connection access_key = 'CMED3NGU5LG41XITKNJO' secret_key = 'yukR3jibKtIHQmLwanK6wsSUCiXWuwjPJLUhAORq' conn = boto.connect_s3( aws_access_key_id=access_key, aws_secret_access_key=secret_key, host='192.168.99.11', port=80, is_secure=False, calling_format=boto.s3.connection.OrdinaryCallingFormat(), ) bucket = conn.create_bucket('ceph-s3-bucket') for bucket in conn.get_all_buckets(): print "{name} {created}".format( name=bucket.name, created=bucket.creation_date, ) EOF $ python s3test.py # 执行脚本,输出如下表示访问成功 ceph-s3-bucket 2021-06-16T03:11:09.599Z
4.1.2 使用命令行验证
$ yum -y install s3cmd # 安装依赖工具 $ s3cmd --configure # 进入配置
按照图中进行相应的配置(根据实际情况进行修改)!
$ sed -i 's#signature_v2 = .*#signature_v2 = True#g' /root/.s3cfg # 修改配置文件 如果不修改,那么使用命令行时,会报错 403
# 查看s3cmd支持的操作 $ s3cmd -h
返回的部分结果如图:
4.2 s3cmd常用命令
$ s3cmd mb s3://s3cmd-demo # 创建一个名为 s3cmd-demo 的bucket $ s3cmd ls # 查看bucket 列表 2021-06-16 03:11 s3://ceph-s3-bucket 2021-06-16 10:54 s3://s3cmd-demo $ s3cmd put /etc/fstab s3://s3cmd-demo/fstab # 上传文件至bucket $ s3cmd get s3://s3cmd-demo/fstab # 下载文件(默认下载到当前目录) $ s3cmd get s3://s3cmd-demo/fstab /tmp/fstab-t # 下载至指定目录,并重命名 $ s3cmd rm s3://s3cmd-demo/fstab # 删除指定文件 $ s3cmd put /etc/ s3://s3cmd-demo/etc/ --recursive # 上传目录至bucket $ s3cmd rm s3://s3cmd-demo/etc/ --recursive # 删除指定目录
4.3 测试swift用户访问
$ yum -y install python-setuptools python-pip $ pip install --upgrade python-swiftclient -i https://mirrors.aliyun.com/pypi/simple/ # 安装基础工具 $ swift -A http://192.168.99.11:80/auth -U ceph-s3-user:swift \ -K ItD7PF3fB09I45JQIIxJDR1l4gKXc1bR8WHutwRF list # 访问验证 # -A:指定认证URL # -U:指定用户名称 # -K:指定用户对应的 secret_key ceph-s3-bucket s3cmd-demo $ cat > ~/.swift << EOF export ST_AUTH=http://192.168.99.11:80/auth export ST_USER=ceph-s3-user:swift export ST_KEY=ItD7PF3fB09I45JQIIxJDR1l4gKXc1bR8WHutwRF EOF # 配置环境变量访问 $ source ~/.swift # 刷新环境变量 $ swift list # 访问验证(查看bucket列表) ceph-s3-bucket s3cmd-demo
4.4 swift常用指令
$ swift post swift-demo # 创建一个bucket $ swift list # 查看bucket列表 $ swift upload swift-demo /etc/passwd # 上传/etc/passwd 文件到swift-demo这个bucket $ swift delete swift-demo etc/passwd # 删除文件 $ swift upload swift-demo /etc # 上传 /etc/ 目录至swift-demo这个bucket $ swift list swift-demo # 查看目录内容 $ swift download swift-demo etc/passwd # 下载 /etc/passwd 文件至本地
*************** 当你发现自己的才华撑不起野心时,就请安静下来学习吧!***************
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律