S3 集成
创建 S3 服务
在管理节点上运行以下命令创建一个名为 cephs3 的 RGW 服务(RadosGateWay,用于对外提供兼容 S3 的对象存储服务):
sudo ceph orch apply rgw cephs3
然后创建一个能够访问该 RGW 服务的用户,名为 demo-s3-user:
$ sudo radosgw-admin user create --uid=demo-s3-user --display-name=demo-s3-user --system
{
"user_id": "demo-s3-user",
"display_name": "demo-s3-user",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "t9k",
"access_key": "ZVXDTZLORTYJHM8KMY4A",
"secret_key": "T94j1EqxXZ3pc0jPbm3kNREcLfZADMMYDiim4UOq"
}
],
"swift_keys": [],
"caps": [],
"op_mask": "read, write, delete",
"system": "true",
"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": []
}
注意,上面生成的 access_key 和 secret_key 即可用于通过 S3 协议访问对象存储服务。
配置 Web UI 能够展示对象存储服务的详细信息:
sudo ceph dashboard set-rgw-api-access-key -i <file-containing-access-key>
sudo ceph dashboard set-rgw-api-secret-key -i <file-containing-secret-key>
参考文档:
配置 erasure code
如果需要节省存储空间,可以配置 rgw 使用 erasure code pool 来存储数据。
注意,需要在 rgw 尚未被使用时完成此操作。
首先,列举 rgw 所使用的 pool,rgw 通常会创建名称以 default.rgw 开头的多个 pool:
$ sudo ceph osd lspools
...
8 default.rgw.log
9 default.rgw.control
10 default.rgw.meta
11 default.rgw.buckets.index
12 default.rgw.buckets.data
...
其中,default.rgw.buckets.data
是主要用来存储数据的 pool,它默认是 replicate 类型。由于 replicate pool 不能直接转换为 erasure code pool,我们需要停止 rgw daemon,删除 data pool,重新创建 data pool 为 erasure code 类型,最后重新创建 rgw daemon。
sudo ceph orch rm rgw.cephs3.us-east-1
sudo ceph config set mon mon_allow_pool_delete true
sudo ceph osd pool rm default.rgw.buckets.data default.rgw.buckets.data --yes-i-really-really-mean-it
sudo ceph osd pool create default.rgw.buckets.data erasure ecprofile-k2-m1-hdd
sudo ceph osd pool application enable default.rgw.buckets.data rgw
sudo ceph orch apply rgw cephs3
参考文档:
配置 S3 服务
如果需要指定 rgw 服务的详细配置,可以通过应用 yaml 配置文件来实时修改 rgw 服务。
通过以下命令导出 rgw 服务的详细配置:
sudo ceph orch ls --service_type rgw --export > rgw.yaml
rgw.yaml 示例如下:
service_type: rgw
service_id: cephs3
service_name: rgw.cephs3
placement:
hosts:
- host1
修改 rgw.yaml 为以下内容:
service_type: rgw
service_id: cephs3
service_name: rgw.cephs3
placement:
count: 2
hosts:
- host1
- host2
networks:
- 172.0.0.0/24
spec:
rgw_frontend_port: 8081
其中:
- 配置 rgw daemon 为 2 个,host1 节点、host2 节点各一个
- 配置 rgw daemon 使用 172.0.0.0/24 网络
- 配置 rgw daemon 使用 8081 端口
通过以下命令应用该配置文件:
sudo ceph orch apply -i ./rgw.yaml
使用 S3 服务
首先您需要获取 rgw 服务的地址。
参考查看 daemon 状态,查看 rgw 服务的配置,示例如下:
$ ceph orch ls
NAME PORTS RUNNING REFRESHED AGE PLACEMENT
rgw.cephs3 ?:8081 2/2 6m ago 2w host1;host2;count:2
可以看到 rgw 服务运行在 host1 和 host2 节点的 8081 端口。
参考查看节点,查看节点的 ip 地址,示例如下:
$ ceph orch host ls
HOST ADDR LABELS STATUS
host1 172.0.0.1
host2 172.0.0.2
因此,rgw 服务的地址为 http://172.0.0.1:8081
和 http://172.0.0.1:8081
,任选其中一个访问即可。
运行以下命令通过 S3 协议访问 rgw 服务:
$ cat > ~/.s3cfg << EOF
host_base = http://172.0.0.1:8081
host_bucket = http://172.0.0.1:8081
bucket_location = us-east-1
use_https = False
access_key = ZVXDTZLOFRTJHM8KMY4A
secret_key = T94j1EqxXZ3pl9jkjm3kNREcLfZADMMYDiim4UOq
signature_v2 = False
EOF
$ s3cmd ls
$ s3cmd mb s3://mybucket
$ s3cmd ls
配额管理
对于对象存储服务,Ceph 支持针对 bucket 或者 user 进行配额管理。
在任意管理节点运行以下命令,对名为 demo-s3-user 的 user 设置配额:
sudo radosgw-admin quota set --quota-scope=user --uid=demo-s3-user --max-size=1024B
sudo radosgw-admin quota enable --quota-scope=user --uid=demo-s3-user
对名为 demo-s3-user 的 user 所创建的所有 bucket 设置配额:
sudo radosgw-admin quota set --quota-scope=bucket --uid=demo-s3-user --max-size=1024B
sudo radosgw-admin quota enable --quota-scope=bucket --uid=demo-s3-user
查看 demo-s3-user 的配额设置:
sudo radosgw-admin user info --uid=demo-s3-user
参考文档: