1、启动对象存储接口RGW

RGW并非必须的接口,仅在需要用到与S3和Swift兼容的RESTful接口时才需要部署RGW实例,

  • 把mon2和mon3部署为rgw主机:
    1. ]$ ceph-deploy rgw create ceph-mon1 ceph-mon2 ceph-mon3
    部署完成后会在rgw节点上启动radosgw进程,同时可以使用以下命令进行重启
    1. ]$ sudo systemctl start ceph-radosgw@rgw.ceph-mon2
    默认情况下,RGW实例监听于TCP协议的7480端口,如需修改,可以通过在运行RGW的节点上编辑其主配置文件ceph.conf进行修改:
    1. [client]
    2. rgw_frontends = "civetweb port=8080"
    RGW会在RADOS集群上创建以下存储池
    1. ]$ ceph osd pool ls
    2. .rgw.root
    3. default.rgw.control
    4. default.rgw.meta
    5. default.rgw.log
    RGW提供的是REST接口,客户端通过http与其进行交互,完成数据的增删改查等管理操作。

    2、修改对象存储使用纠删码存储池

    Ceph使用纠删码将object划分为K个数据块,并按照一定的方法计算出M个编码块,通过PG映射到OSD上。
    我们集群有9个OSD部署在3个节点,纠删码配置K+M为4+2,可以容忍最多M个OSD出现故障。设置故障域为host,调整crush rule,每个对象存储时选择3个host,再在每个host上选择两个OSD。

    2.1、创建纠删码配置erasure-code-profile

    在生产环境使用了Intel CPU的服务器上推荐纠删码使用 ISA-L库,使用方式为plugin=isa。 ```bash ]$ ceph osd erasure-code-profile set rgw_ec_profile k=4 m=2 crush-root=default plugin=isa crush-failure-domain=host ]$ ceph osd erasure-code-profile get rgw_ec_profile crush-device-class= crush-failure-domain=host crush-root=default k=4 m=2 plugin=isa technique=reed_sol_van

]$ ceph osd erasure-code-profile ls # 列出纠删码erasure-code-profile配置 default rgw_ec_profile

  1. <a name="GXzS1"></a>
  2. #### 2.2、创建crush rule
  3. ```bash
  4. ]$ ceph osd crush rule create-erasure rgw_ec_rule rgw_ec_profile
  5. ]$ ceph osd crush rule dump
  6. {
  7. "rule_id": 2,
  8. "rule_name": "rgw_ec_rule",
  9. "ruleset": 2,
  10. "type": 3,
  11. "min_size": 3,
  12. "max_size": 6,
  13. "steps": [
  14. {
  15. "op": "set_chooseleaf_tries",
  16. "num": 5
  17. },
  18. {
  19. "op": "set_choose_tries",
  20. "num": 100
  21. },
  22. {
  23. "op": "take",
  24. "item": -13,
  25. "item_name": "default"
  26. },
  27. {
  28. "op": "chooseleaf_indep",
  29. "num": 0,
  30. "type": "host"
  31. },
  32. {
  33. "op": "emit"
  34. }
  35. ]
  36. }

2.3、调整crush rule,选择host和osd规则

# 导出crush rule
]$ ceph osd getcrushmap -o crushmap
]$ crushtool -d crushmap -o crushmap.txt
# 修改crush rule
]$ vim crushmap.txt
rule rgw_ec_rule {
        id 1
        type erasure
        min_size 3
        max_size 6
        step set_chooseleaf_tries 5
        step set_choose_tries 100
        step take default
        step choose indep 3 type host   # 选择3个host
        step choose indep 2 type osd    # 再选在2个osd
        step emit
}
# 将crushrule导入集群
]$ crushtool -c crushmap.txt -o crushmap
]$ ceph osd setcrushmap -i crushmap

2.4、创建rgw数据存储池使用rgw_ec_profile和rgw_ec_rule

]$ ceph osd pool create default.rgw.buckets.data 128 128 erasure rgw_ec_profile rgw_ec_rule
pool 'default.rgw.buckets.data' created

2.5、修改rgw数据存储池为纠删码池

  • 如果集群中还没有数据,则默认没有default.rgw.buckets.data存储池,直接将创建的存储池启用在rgw即可

    ]$ ceph osd pool application enable default.rgw.buckets.data rgw
    enabled application 'rgw' on pool 'default.rgw.buckets.data'
    
  • 如果已经存在default.rgw.buckets.data存储池,但未数据,则停止rgw,把默认的default.rgw.buckets.data存储池删掉,再创建新的default.rgw.buckets.data存储池,然后启用即可。 ```bash ]$ ceph df RAW STORAGE: CLASS SIZE AVAIL USED RAW USED %RAW USED ssd 8.2 TiB 8.2 TiB 69 MiB 9.1 GiB 0.11 TOTAL 8.2 TiB 8.2 TiB 69 MiB 9.1 GiB 0.11

POOLS: POOL ID PGS STORED OBJECTS USED %USED MAX AVAIL .rgw.root 1 32 1.2 KiB 4 768 KiB 0 2.6 TiB default.rgw.control 2 32 0 B 8 0 B 0 2.6 TiB default.rgw.meta 3 32 0 B 0 0 B 0 2.6 TiB default.rgw.log 4 32 0 B 175 0 B 0 2.6 TiB default.rgw.buckets.data 5 128 0 B 0 0 B 0 5.2 TiB # 使用纠删码池可用空间为5.2T

<a name="j9vCE"></a>
#### 2.6、修改存储池min_size
默认创建的存储池size是K+M=6,min_szie默认为5,当存储池当前size小于min_size时,pg会出现incomplete状态,因此调整min_size为4,可以容忍2个osd节点故障
```bash
# 修改前
pool 5 'default.rgw.buckets.data' erasure size 6 min_size 5 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 59 flags hashpspool stripe_width 16384 application rgw
# 修改后
]$ ceph osd pool set default.rgw.buckets.data min_size 4
]$ ceph osd pool ls detail |grep 'default.rgw.buckets.data'
pool 5 'default.rgw.buckets.data' erasure size 6 min_size 4 crush_rule 1 object_hash rjenkins pg_num 128 pgp_num 128 autoscale_mode warn last_change 59 flags hashpspool stripe_width 16384 application rgw

3、Ceph Dashboard启用Radosgw Gateway

  • 创建dashboard rgw管理用户

    ]$ radosgw-admin user create --uid=rgw-dashboard --display-name=rgw-dashboard --system
    
  • 将access-key和secret-key存放到文件

    ]$ echo T7D6ZCM8N515JJR502YV > access_key
    ]$ echo ajEJseQZvbysBsfBaZPDRgXZviMJTHrvWs11aDoO > secret_key
    
  • 将认证key注入到Dashboard

    ]$ ceph dashboard set-rgw-api-access-key -i access_key 
    ]$ ceph dashboard set-rgw-api-secret-key -i secret_key
    
  • 配置radosgw-api主机和端口,如果radosgw api使用默认端口则可以不需要这一步

    ]$ ceph dashboard set-rgw-api-host 10.10.3.181
    ]$ ceph dashboard set-rgw-api-port 80
    
  • 刷新Dashboard页面

image.png