rgw 部署

Last updated on 9 months ago

image-20220803145842254\

what rgw

RGW(Rados GateWay) 对象存储网关,ceph 是分布式对象系统,完全是可以做对象存储的,然而 Rados提供的是私有接口,不符合市场趋势,因为对象存储狭义上说是 云存储(互联网应用),所以接口应该支持主流网络协议,如http;ceph为了支持 http协议访问,设计了RGW存储网关,提供接口,此外还兼容云存储领域较为主流的接口 如 S3,Swift。

创建 rgw的keyring

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# 每添加一个 功能节点都需要  创建一个 keyring
[root@node29 ~]# ceph-authtool --create-keyring /etc/ceph/ceph.client.radosgw.keyring
creating /etc/ceph/ceph.client.radosgw.keyring

[root@node29 ceph]# ls/etc/ceph
ceph.client.admin.keyring ceph.client.radosgw.keyring ceph.conf
#将 新建立 rgw 节点 都注册到 ceph.client.radosgw.keyring中 并且为 node 生产密钥 (后面试了下不用这也可完成?是因为你把 cephx给关闭了)
#注意 名字 为 client.{rgwname}
[root@node29 ceph]# ceph-authtool /etc/ceph/ceph.client.radosgw.keyring -n client.radosgw.gateway --gen-key



#赋予节点访问权限 --cap osd 'allow rwx' 读写执行权限
[root@node29 ceph]# ceph-authtool -n client.radosgw.gateway --cap osd 'allow rwx' --cap mon 'allow rwx' /etc/ceph/ceph.client.radosgw.keyring

#将节点添加到集群
[root@node29 ceph]# ceph -k /etc/ceph/ceph.client.admin.keyring auth add client.radosgw.gateway -i /etc/ceph/ceph.client.radosgw.keyring
added key for client.radosgw.gateway



#ceph auth ls 可以 查看到 已认证的node
[root@node29 ceph]# ceph auth ls | grep -10 rados
client.radosgw.gateway
key: AQBTJepinqB+JBAAqYgKorE4nfwrtsN9LdpIzg==
caps: [mon] allow rwx
caps: [osd] allow rwx
client.rgw.node29
key: AQDGNepiNtYXLhAAGMGUlsRA8EfP0iDkXiBKSQ==
caps: [mon] allow rwx
caps: [osd] allow rwx

配置 ceph. conf

由于 安装的这个版本 修改过代码,起rgw之前,需要将 rgw系统的系统池创建好,然后在拉RGW!

先创建池 ,这里参考并修改了同事的部署脚本(这里用 是单机部署如果是集群记得 将 修改好后的 ceph 同步到其他节点用了单副本,结合实际情况设置副本数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
##################################################################################################
ceph osd pool create .rgw.root 8 8
ceph osd pool create master.rgw.control 8 8
ceph osd pool create master.rgw.meta 8 8
ceph osd pool create master.rgw.log 8 8
ceph osd pool create master1.rgw.buckets.cache 8 8
ceph osd pool create master1.rgw.buckets.index 8 8
ceph osd pool create master1.rgw.buckets.non-ec 8 8
ceph osd pool create master1.rgw.buckets.data 8 8
ceph osd pool create master1.rgw.buckets.data2 8 8
ceph osd pool create master1.rgw.buckets.data3 8 8
ceph osd pool set .rgw.root size 1
ceph osd pool set master.rgw.control size 1
ceph osd pool set master.rgw.meta size 1
ceph osd pool set master.rgw.log size 1
ceph osd pool set master1.rgw.buckets.cache size 1
ceph osd pool set master1.rgw.buckets.index size 1
ceph osd pool set master1.rgw.buckets.non-ec size 1
ceph osd pool set master1.rgw.buckets.data size 1
ceph osd pool set master1.rgw.buckets.data2 size 1
ceph osd pool set master1.rgw.buckets.data3 size 1

#创建 realm 用户
radosgw-admin realm create --rgw-realm=default --default
#
radosgw-admin zonegroup create --rgw-zonegroup=default --rgw-realm=default --default --master

radosgw-admin zone create --rgw-zone=master --rgw-zonegroup=default --default --master

radosgw-admin user create --uid admin --display-name admin --access_key admin --secret_key admin --system
radosgw-admin zone modify --rgw-zone=master --access_key admin --secret_key admin --endpoints=http://10.1.20.176:7480
#记得改成你的ip!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
radosgw-admin zonegroup placement add --rgw-zonegroup=default --placement-id=test

#这里设置 placement rule (具体为什么这样还没搞明白)
radosgw-admin zonegroup placement add --placement-id mplacement --storage-class STANDARD

radosgw-admin zonegroup placement add --placement-id mplacement --storage-class GLACIER

radosgw-admin zonegroup placement add --placement-id test --storage-class STANDARD

radosgw-admin zone placement add --placement-id test --storage-class STANDARD --default-storage STANDARD --active-pool master1.rgw.buckets.data3 --index-pool master1.rgw.buckets.index --data-extra-pool master1.rgw.buckets.non-ec --cache-pool master1.rgw.buckets.cache


radosgw-admin zone placement add --placement-id mpplacement_testlacement --storage-class STANDARD --default-storage STANDARD --active-pool master1.rgw.buckets.data --index-pool master1.rgw.buckets.index --data-extra-pool master1.rgw.buckets.non-ec --cache-pool master1.rgw.buckets.cache

radosgw-admin zone placement add --placement-id mplacement --storage-class GLACIER --active-pool master1.rgw.buckets.data2 --compression zlib

radosgw-admin period update --commit

#创建rgw用户
radosgw-admin user create --uid piglet --display-name piglet --access_key 123456 --secret_key 123456
##################################################################################################

#修改 conf
#这是你要上文你设置 网关名
[client.radosgw.gateway]
rgw_frontends = "beast port=8009" # 解析hthp的库 新版本 默认用 beast,以及指定端口 默认 7480
keyring = /etc/ceph/ceph.client.radosgw.keyr
#debug_rgw=20
rgw_zone=master #这里 是命名空间, 和刚才建的 pool前缀一样
rgw_gc_obj_min_wait=60
rgw_gc_processor_max_time=60
rgw_gc_processor_period=6

#######################################
# 修改ceph配置文件
auth cluster required = none
auth service required = none
auth client required = none

# 将下面配置 添加到ceph配置中
[client.radosgw.gateway]
rgw_frontends = "beast port=8009"
keyring = /etc/ceph/ceph.client.radosgw.keyring
#debug_rgw=20
rgw_zone=master
rgw_gc_obj_min_wait=60
rgw_gc_processor_max_time=60
rgw_gc_processor_period=60

#最后重启 ,建议其他 节点也重启下
systemctl restart ceph-osd@*
systemctl restart ceph-mgr@node29_mgr.service
systemctl restart ceph-mon@mon-node29.service

#启动服务
systemctl restart ceph-radosgw@radosgw.gateway.service

#最后我把整个 ceph.co 都贴出来,供参考

#ceph -s 看是否有 rgw ,以及看 端口是否 有监听
#也可以测试下端口
[root@node29 home]# curl http://10.1.23.29:7480
<?xml version="1.0" encoding="UTF-8"?><ListAllMyBucketsResult xmlns="http://s3.amazonaws.com/doc/2006-03-01/"><Owner><ID>anonymous</ID><DisplayName></DisplayName></Owner><Buckets></Buckets></ListAllMyBucketsResult>
[root@node29 home]#

部署遇的问题

  1. rgw服务起不来
1
2
3
4
5
6
7
8
9
10
#名字搞错! 这个rgwname 要和 你在ceph.conf 中配置rgw名字一样!
systemctl restart ceph-radosgw@{rgwname}.service
#配置 文件有误

#这里 pool不是随便建立的 ,{zone-name}.pool-name.{池的功能},这里zone 应该是为了隔离多站点, 我可以启很多哥 rgw服务
#补充
systemctl | grep {name} 可以搜服务,结合 ps 看看经常

journalctl |grep 'error' 可以看启动服务时有哪些报错

  1. 服务起来了,但是 ceph -s 没有显示 rgw 节点

    • 保证集群 是正常状态 ! 这个很关键!!用 ceph health detail 可查看

      image-20220804162818423

      (我的一开始就 pg chunk , 记得先坚持 集群正常状态

    • 查看 mgr 服务是否正常 (开始我的mgr是挂的)

    • 更新了cepf.conf 要重启服务,mon,mgr,osd也要重启, 此外 ceph.conf 也要同步到其他节点(最后都再这里 栽跟头了)

:point_up_2:

附件 ceph.conf

rwg配置参数还有很多 ,可以参考官网的 https://docs.ceph.com/en/nautilus/radosgw/config-ref/

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
[root@node29 home]# cat /etc/ceph/ceph.conf 
[global]
fsid = 311a4057-0837-4af8-92ab-a8053e4a3a57
mon initial members = mon-node29,mon-node31
mon host = 10.1.23.29 , 10.1.23.31
public network = 10.1.23.0/24

auth cluster required = none
auth service required = none
auth client required = none

osd journal size = 1024
osd pool default size = 3
osd pool default min size = 2
osd pool default pg num = 333
osd pool default pgp num = 333
osd crush chooseleaf type = 1
mon allow pool delete = true

mon_max_pg_per_osd = 2000

rbd_default_features = 1

[client.rgw.node29]

keyring = /etc/ceph/ceph.client.radosgw.keyring

rgw_zone = master
rgw_override_bucket_index_max_shards = 10
rgw_frontends = "beast port=7480"
rgw_override_bucket_index_max_shards = 10
debug_rgw = 20

[client.radosgw.gateway]
rgw_frontends = "beast port=8009"
keyring = /etc/ceph/ceph.client.radosgw.keyring
#debug_rgw=20
rgw_zone=master
rgw_gc_obj_min_wait=60
rgw_gc_processor_max_time=60
rgw_gc_processor_period=60



[client.radosgw1.gateway]
rgw_frontends = "beast port=809"
keyring = /etc/ceph/ceph.client.radosgw.keyring
#debug_rgw=20
rgw_zone=master
rgw_gc_obj_min_wait=60
rgw_gc_processor_max_time=60
rgw_gc_processor_period=60
You have new mail in /var/spool/mail/root
[root@node29 home]#