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:8081http://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

参考文档: