Ceph radosgw的基本使用
RadosGW 对象存储网关简介
RadosGW 是对象存储(OSS,Object Storage Service)的一种访问实现方式,RADOS 网关也称为 Ceph 对象网关、RadosGW、RGW,是一种服务,使客户端能够利用标准对象存储API 来访问 Ceph 集群,它支持 AWS S3 和 Swift API,在 ceph 0.8 版本之后使用 Civetweb(https://github.com/civetweb/civetweb) 的 web 服务器来响应 api 请求,客户端使用http/https 协议通过 RESTful API 与 RGW 通信,而 RGW 则通过 librados 与 ceph 集群通信,RGW 客户端通过 s3 或者 swift api 使用 RGW 用户进行身份验证,然后 RGW 网关代表用户利用 cephx 与 ceph 存储进行身份验证。
S3 由 Amazon 于 2006 年推出,全称为 Simple Storage Service,S3 定义了对象存储,是对象存储事实上的标准,从某种意义上说,S3 就是对象存储,对象存储就是 S3,它是对象存储市场的霸主,后续的对象存储都是对 S3 的模仿。
部署 RadosGW 服务:
将 ceph-mgr1、ceph-mgr2 服务器部署为高可用的 radosGW 服务
添加ceph仓库源并安装radosgw
#支持 https 镜像仓库源:
apt install -y apt-transport-https ca-certificates curl software-properties-common
#导入 key:
wget -q -O- 'https://mirrors.tuna.tsinghua.edu.cn/ceph/keys/release.asc' | sudo apt-key add -
apt-add-repository 'deb https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific/ bionic main'
root@ceph-mgr1:/etc/apt# apt update
root@ceph-mgr1:~# apt-cache madison radosgw #搜索radosgw
radosgw | 16.2.10-1bionic | https://mirrors.tuna.tsinghua.edu.cn/ceph/debian-pacific bionic/main amd64 Packages
radosgw | 12.2.13-0ubuntu0.18.04.10 | http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-updates/main amd64 Packages
radosgw | 12.2.13-0ubuntu0.18.04.10 | http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic-security/main amd64 Packages
radosgw | 12.2.4-0ubuntu1 | http://mirrors.tuna.tsinghua.edu.cn/ubuntu bionic/main amd64 Packages
#mg1和mgr2安装radosgw
root@ceph-mgr1:/etc/apt# apt install radosgw
root@ceph-mgr1:~# radosgw -v
ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)
root@ceph-mgr2:~# radosgw -v
ceph version 16.2.10 (45fa1a083152e41a408d15505f594ec5f1b4fe17) pacific (stable)
ceph-deploy节点调度 mgr1 和mg2 部署rgw服务
root@ceph-deploy:~# su - cephadmin
cephadmin@ceph-deploy:~$ cd ceph-cluster/
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf rgw create ceph-mgr1
cephadmin@ceph-deploy:~/ceph-cluster$ ceph-deploy --overwrite-conf rgw create ceph-mgr2
--overwrite-conf 参数含义:以当前ceph-deploy的ceph.conf配置为准,替换掉mgr1节点上的/etc/ceph.conf
RGW部署完成后,会在mgr1、mgr2节点启动ceph-radosgw@rgw.ceph-mgr1、2服务,端口监听在tcp 7480
mgr1节点验证radosgw服务
#检查radosgw服务
root@ceph-mgr1:~# systemctl status ceph-radosgw@rgw.ceph-mgr1.service
root@ceph-mgr2:~# systemctl status ceph-radosgw@rgw.ceph-mgr2.service
#检查服务端口
root@ceph-mgr1:~# ss -lntup|grep 7480
root@ceph-mgr2:~# ss -lntup|grep 7480
使用web http方式访问mgr1、mgr2 ip:7480服务
从ceph状态验证查看rgw服务部署
Radosgw默认存储池
初始化完成 radosgw 之后,会初始化默认的存储池如下:
名称以 default.rgw.* 为前缀和 .rgw.root的存储池
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool ls
device_health_metrics
rbd-data
default.rgw.log
.rgw.root
default.rgw.control
default.rgw.meta
cephfs-metadata
cephfs-data
验证radosgw服务进程
root@ceph-mgr1:~# ps -ef|grep radosgw
ceph 1302 1 0 14:58 ? 00:00:04 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr1 --setuser ceph --setgroup ceph
root 3562 3492 0 15:32 pts/0 00:00:00 grep --color=auto radosgw
root@ceph-mgr2:~# ps -ef|grep radosgw
ceph 19646 1 0 15:22 ? 00:00:01 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr2 --setuser ceph --setgroup ceph
root 20332 2930 0 15:33 pts/0 00:00:00 grep --color=auto radosgw
radosgw 的存储池类型:
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool ls
device_health_metrics
rbd-data
default.rgw.log
.rgw.root
default.rgw.control
default.rgw.meta
cephfs-metadata
cephfs-data
查看默认 radosgw 的存储池信息:
cephadmin@ceph-deploy:~/ceph-cluster$ radosgw-admin zone get --rgw-zone=default --rgw-zonegroup=default
{
"id": "638985bc-6486-4a1a-8012-a619266611ef",
"name": "default",
"domain_root": "default.rgw.meta:root",
"control_pool": "default.rgw.control",
"gc_pool": "default.rgw.log:gc",
"lc_pool": "default.rgw.log:lc",
"log_pool": "default.rgw.log",
"intent_log_pool": "default.rgw.log:intent",
"usage_log_pool": "default.rgw.log:usage",
"roles_pool": "default.rgw.meta:roles",
"reshard_pool": "default.rgw.log:reshard",
"user_keys_pool": "default.rgw.meta:users.keys",
"user_email_pool": "default.rgw.meta:users.email",
"user_swift_pool": "default.rgw.meta:users.swift",
"user_uid_pool": "default.rgw.meta:users.uid",
"otp_pool": "default.rgw.otp",
"system_key": {
"access_key": "",
"secret_key": ""
},
"placement_pools": [
{
"key": "default-placement",
"val": {
"index_pool": "default.rgw.buckets.index",
"storage_classes": {
"STANDARD": {
"data_pool": "default.rgw.buckets.data"
}
},
"data_extra_pool": "default.rgw.buckets.non-ec",
"index_type": 0
}
}
],
"realm_id": "",
"notif_pool": "default.rgw.log:notif"
}
rgw.root: 包含 realm(领域信息),比如 zone 和 zonegroup
default.rgw.log: 存储日志信息,用于记录各种 log 信息。
default.rgw.control: 系统控制池,在有数据更新时,通知其它 RGW 更新缓存。
default.rgw.meta: 元数据存储池,通过不同的名称空间分别存储不同的 rados 对象,这些名称空间包括⽤⼾UID 及其 bucket 映射信息的名称空间 users.uid、⽤⼾的密钥名称空间users.keys、⽤⼾的 email 名称空间 users.email、⽤⼾的 subuser 的名称空间 users.swift,以及 bucket 的名称空间 root 等。
default.rgw.buckets.index: 存放 bucket 到 object 的索引信息。
default.rgw.buckets.data: 存放对象的数据。
default.rgw.buckets.non-ec: 数据的额外信息存储池
default.rgw.users.uid: 存放用户信息的存储池。
default.rgw.data.root: 存放 bucket 的元数据,结构体对应 RGWBucketInfo,比如存放桶名、桶 ID、data_pool 等。
查看对象存储池的存储策略、副本数量、pgp和pg的数量
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool get default.rgw.meta crush_rule
crush_rule: replicated_rule
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool get default.rgw.meta size
size: 3
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool get default.rgw.meta pgp_num
pgp_num: 8
cephadmin@ceph-deploy:~/ceph-cluster$ ceph osd pool get default.rgw.meta pg_num
pg_num: 8
radosgw http 服务高可用配置
自定义 http 端口
配置文件可以在 ceph deploy 服务器修改然后统一推送,或者单独修改每个 radosgw 服务器的配置为统一配置,然后重启 RGW 服务。
https://docs.ceph.com/en/latest/radosgw/frontends/
在ceph.conf最后面添加针对当前节点的自定义配置如下
root@ceph-mgr1:~# vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = civetweb port=9900
重启节点 mgr1 的 radosgw 服务
root@ceph-mgr1:~# systemctl restart ceph-radosgw@rgw.ceph-mgr1.service
root@ceph-mgr1:~# systemctl status ceph-radosgw@rgw.ceph-mgr1.service
ceph-radosgw@rgw.ceph-mgr1.service - Ceph rados gateway
Loaded: loaded (/lib/systemd/system/ceph-radosgw@.service; indirect; vendor preset: enabled)
Active: active (running) since Wed 2022-12-14 11:44:11 CST; 6s ago
Main PID: 4196 (radosgw)
Tasks: 603
CGroup: /system.slice/system-ceph\x2dradosgw.slice/ceph-radosgw@rgw.ceph-mgr1.service
©¸©¤4196 /usr/bin/radosgw -f --cluster ceph --name client.rgw.ceph-mgr1 --setuser ceph --setgroup ceph
Dec 14 11:44:11 ceph-mgr1 systemd[1]: Started Ceph rados gateway.
Dec 14 11:44:11 ceph-mgr1 radosgw[4196]: 2022-12-14T11:44:11.494+0800 7f76c28843c0 -1 IMPORTANT: the civetweb frontend is
root@ceph-mgr1:~# ss -lntup|grep 9900
tcp LISTEN 0 128 0.0.0.0:9900 0.0.0.0:* users:(("radosgw",pid=4196,fd=75))
实现高可用
安装haproxy并配置反向代理:
配置haproxy,反向代理 ceph-mgr1 和 mgr2 的radosgw服务tcp网络端口,mgr2的端口此时还为默认的7480端口.
root@haproxyA:~# vim /etc/haproxy/haproxy.cfg
listen ceph-radosgw-8090
bind :8090
mode tcp
server ceph-mgr1 192.168.100.38:9900 check inter 3s fall 3 rise 2
server ceph-mgr2 192.168.100.39:7480 check inter 3s fall 3 rise 2
root@haproxyA:~# systemctl restart haproxy
root@haproxyA:~# systemctl status haproxy
● haproxy.service - HAProxy Load Balancer
Loaded: loaded (/lib/systemd/system/haproxy.service; enabled; vendor preset: enabled)
Active: active (running) since Wed 2022-12-14 12:00:17 CST; 4s ago
Docs: man:haproxy(1)
file:/usr/share/doc/haproxy/configuration.txt.gz
Process: 1401 ExecStartPre=/usr/sbin/haproxy -f $CONFIG -c -q $EXTRAOPTS (code=exited, status=0/SUCCESS)
Main PID: 1413 (haproxy)
Tasks: 2 (limit: 2236)
Memory: 2.2M
CGroup: /system.slice/haproxy.service
├─1413 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
└─1417 /usr/sbin/haproxy -Ws -f /etc/haproxy/haproxy.cfg -p /run/haproxy.pid -S /run/haproxy-master.sock
Dec 14 12:00:17 haproxyA systemd[1]: Starting HAProxy Load Balancer...
Dec 14 12:00:17 haproxyA haproxy[1413]: Proxy ceph-radosgw-8090 started.
Dec 14 12:00:17 haproxyA haproxy[1413]: Proxy ceph-radosgw-8090 started.
Dec 14 12:00:17 haproxyA haproxy[1413]: Proxy statistics started.
Dec 14 12:00:17 haproxyA haproxy[1413]: Proxy statistics started.
Dec 14 12:00:17 haproxyA haproxy[1413]: [NOTICE] 347/120017 (1413) : New worker #1 (1417) forked
Dec 14 12:00:17 haproxyA systemd[1]: Started HAProxy Load Balancer.
root@haproxyA:~# ss -lntup|grep 8090
tcp LISTEN 0 3000 0.0.0.0:8090 0.0.0.0:* users:(("haproxy",pid=1417,fd=7)
浏览器访问haproxy代理地址 192.168.100.20:8090
查看haproxy的服务代理日志,能看到将客户端的请求均衡代理到后端实际的ceph-mgr节点 endpoint
日志及其它优化配置
创建日志目录
root@ceph-mgr2:~# mkdir /var/log/radosgw
root@ceph-mgr2:~# chown ceph.ceph /var/log/radosgw
root@ceph-mgr2:~# vim /etc/ceph/ceph.conf
[client.rgw.ceph-mgr1]
rgw_host = ceph-mgr1
rgw_frontends = "civetweb port=9900+9443s ssl_certificate=/etc/ceph/certs/cephrgw.pem error_log_file=/var/log/radosgw/radosgw.error.log access_log_file=/var/log/radosgw/radosgw.access.log request_timeout_ms=30000 num_threads=200"
[client.rgw.ceph-mgr2]
rgw_host = ceph-mgr2
rgw_frontends = "civetweb port=9900+9443s ssl_certificate=/etc/ceph/certs/cephrgw.pem error_log_file=/var/log/radosgw/radosgw.error.log access_log_file=/var/log/radosgw/radosgw.access.log request_timeout_ms=30000 num_threads=200"
error_log_file: 指定radosgw错误日志路径
access_log_file: 指定radosgw访问日志路径
request_timeout_ms:指定radosgw访问超时时间
num_threads: 指定radosgw运行线程数量,默认线程数是100,https://docs.ceph.com/en/mimic/radosgw/config-ref/
重启radosgw
root@ceph-mgr2:/etc/ceph# systemctl restart ceph-radosgw@rgw.ceph-mgr2.service
root@ceph-mgr2:/etc/ceph# systemctl status ceph-radosgw@rgw.ceph-mgr2.service
验证日志
创建 RGW 账户
在ceph管理节点创建对象用户
--uid 指定用户ID
--display-name 指定显示用户名称
cephadmin@ceph-deploy:~/ceph-cluster$ radosgw-admin user create --uid="user1" --display-name="user1"
{
"user_id": "user1",
"display_name": "user1",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user1",
"access_key": "45CMIRWTFQY9DGJX7W1Z",
"secret_key": "EyFmlD51WWfCGbtxFYZcygwDc48QWMYyKs13nuDD"
}
],
"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": []
}
注意保存对象用户的 access_key 和 secret_key
查看用户信息
root@ceph-mgr1:/var/log/ceph# radosgw-admin user --uid="user1" info
{
"user_id": "user1",
"display_name": "user1",
"email": "",
"suspended": 0,
"max_buckets": 1000,
"subusers": [],
"keys": [
{
"user": "user1",
"access_key": "45CMIRWTFQY9DGJX7W1Z",
"secret_key": "EyFmlD51WWfCGbtxFYZcygwDc48QWMYyKs13nuDD"
}
],
"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": []
}
查询所有用户
root@ceph-mgr1:/var/log/ceph# radosgw-admin metadata list user
[
"user1"
]
RGW 账户权限控制
参考aws 官网文档介绍:https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/example-bucket-policies.html
账户权限介绍
1、授权简介和预览
Resources: 授权的目的 Buckets、objects等资源,必须指定。
Actions:要授予的动作,CreateBucket、DeleteObject、GetObject、PubObject。必须指定
Effect:要授予的操作效果是允许(allow)还是拒绝(deny),默认为拒绝访问所有的资源,必须指定。
Principal: 要授权的目的账号,必须指定
Condition:授权策略生效的条件,比如访问TLS版本等,非必须,可不写。
{
“Condition”: {
“NumericLessThan”: {
“s3:TlsVersion”: 1.2
}
}
}
2、权限集合
https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/API/API_Operations.html
权限配置
1、授予匿名用户对 bucket01 的 GetObject权限,仅可以查看桶内的文件。
创建权限json文件
[root@ansible ~]# vim bucket01-policy.json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": "*",
"Action": "s3:GetObject",
"Resource": [
"arn:aws:s3:::bucket01/*"
]
}
]
}
进行授权
[root@ansible ~]# s3cmd setpolicy bucket01-policy.json s3://bucket01
s3://bucket01/: Policy updated
验证权限,客户端浏览器访问 http://rgw.cncf.net/bucket01/<文件名>
本文来自博客园,作者:PunchLinux,转载请注明原文链接:https://www.cnblogs.com/punchlinux/p/17070273.html