Ceph对象存储使用

2023-05-16

文章目录

      • 对象存储简介
      • RadosGW简介
      • RadosGW配置
        • RGW使用的存储池
        • 配置rgw使用的http端口
        • 配置rgw使用https
        • 配置rgw高可用
      • 客户端s3cmd测试数据读写
        • 创建rgw用户
        • 安装s3cmd客户端
        • 配置s3cmd访问rgw
        • 测试数据读写
        • bucket授权

对象存储简介

对象存储是无层次结构的数据存储方法,一般用于云计算环境。和其他数据存储方法相比,对象存储有以下特点:

  • 数据作为单独的对象进行存储
  • 数据并不存放在目录层次结构中,而是存在于平面地址结构的同一级别空间中
  • 应用通过唯一的地址来访问单个数据对象
  • 每个对象可以包含有助于数据检索的元数据

对象是对象存储系统中数据存储的基本单位,每个对象是数据和数据属性集的综合体。数据属性可以根据应用需求而设置,包括数据分布、服务质量等。

  • 每个对象自我维护其属性,减轻了存储系统的管理任务
  • 对象的大小可以不同,甚至可以包括整个数据结构,比如:文件、数据库表项等

在这里插入图片描述

一般情况下一个对象存储系统的核心资源类型应该包括用户、存储桶(bucket)、对象。

这三者之间的关系是,用户将对象存储在存储桶中,存储桶隶属于用户,一个用户可以拥有一个或多个存储桶,一个存储桶一般存放多个对象。

虽然设计与实现上有所区别,但大多数对象存储系统对外呈现的核心资源类型大同小异。

  • Amazon S3:提供user、bucket和object,其中bucket属于user,因此user可以作为bucket的名称空间,不同用户允许使用相同名称的bucket
  • Openstack Swift:提供user、container和object,分别对应用户、存储桶和对象。另外还提供了account,表示项目或租户,一个account可以包含一到多个user,这些user可以共享一组container,account还为container提供名称空间
  • Ceph RadosGW:提供user、subuser、bucket和object,其中user对应S3 user,subuser对应Swift user。不过user、subuer都不支持为bucket提供名称空间。从J版起,RadosGW引入tenant,来为user、subuser提供名称空间,但它是可选的

RadosGW简介

官方文档:https://docs.ceph.com/en/pacific/radosgw

RadosGW是Ceph提供的对象存储访问方式,RGW是一个服务,使客户端能够利用标准对象存储API来访问Ceph集群,它支持AWS S3 API和Swift API。

RGW的功能依赖于ceph-radosgw守护进程实现,它通过内置的civetweb或beast(从M版开始支持beast,civetweb在Q版已经废弃)服务向客户端提供REST API,并将数据操作请求转换为底层rados集群相关操作。

RGW存储特点:

  • 通过RGW将数据存储为对象,每个对象除了包含数据,还包含数据自身的元数据
  • 对象通过Object ID来检索,无法通过挂载方式访问,只能使用API来访问
  • 对象的存储不是垂直的目录树结构,而是存储在扁平的命名空间中,在ceph中使用bucket表示整个命名空间
  • bucket不能再包含bucket,不能嵌套
  • bucket需要被授权才能访问,一个账户可以对多个bucket授权么人权限可以不同
  • 方便横向扩展,快速检索数据
  • 适用于文件频繁读取但不经常修改的场景,例如视频网站

ceph使用bucket作为存储桶(存储空间),实现对象数据的存储和多用户隔离,数据存储在bucket中,用户的权限也是针对bucket进行授权,可以设置用户对不同bucket有不同权限,以实现权限管理。

存储空间bucket是用于存储对象的容器,所有的对象必须隶属于某个bucket,可以设置和修改存储空间属性用来控制地域、访问权限和生命周期等,这些属性设置直接作用于bucket内所有对象,因此可以通过创建不同的存储空间来完成不同的管理功能。

同一个存储空间的内部是扁平的,没有文件系统的目录概念,所有的对象都直接隶属于其对应的促成农户空间

每个用户可以拥有多个存储空间

存储空间的名称OSS范围内是全局唯一的,创建之后无法修改名称

存储空间内部的对象数量没有限制

RadosGW配置

集群中已经部署了两个rgw服务,分别运行在mon-01节点和mon-02节点上
在这里插入图片描述

RGW使用的存储池

查看默认radosgw的存储池信息

radosgw-admin zone get --rgw-zone=default --rgw-zonegroup=default

在这里插入图片描述

如上图所示,rgw使用的各个pool的作用如下:

  • .rgw.root:包含realm(领域信息),比如zone和zonegroup
  • default.rgw.control:系统控制池,再有数据更新时,通知其它RGW更新缓存
  • default.rgw.log:存储日志信息,用于记录各种log信息
  • 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等

rgw部署之后默认就会创建一些要使用的存储池,如下所示:
在这里插入图片描述

使用ceph-ansibel部署的rgw默认监听8080端口,可以使用http访问测试
在这里插入图片描述

配置rgw使用的http端口

修改两个rgw服务所在节点的配置

vim /etc/ceph.conf
##################
[client.rgw.ceph-mon-02.rgw0]
.........
host = ceph-mon-02
rgw_frontends = beast port=9900	#将http端口修改为9900
.........
##################

sytemctl restart ceph-radosgw.target

重启完成后通过9900访问rgw验证

在这里插入图片描述

配置rgw使用https

签发证书

#生成CA
openssl genrsa -out ca.key 4096
openssl req -x509 -new -nodes -sha512 -days 3650  \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io"  \
-key ca.key  -out ca.crt

#生成radosgw证书,两个radosgw服务器使用同一套证书
openssl genrsa -out radosgw.key 4096
openssl req -sha512 -new \
-subj "/C=CN/ST=Beijing/L=Beijing/O=example/OU=Personal/CN=linux.io" \
-key radosgw.key \
-out radosgw.csr 

cat > v3.ext <<-EOF
authorityKeyIdentifier=keyid,issuer
basicConstraints=CA:FALSE
keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment
extendedKeyUsage = serverAuth
subjectAltName = @alt_names

[alt_names]
DNS.1=linux.io
DNS.2=ceph-mon-02.linux.io
DNS.3=ceph-mon-03.linux.io
EOF

openssl x509 -req -sha512 -days 3650 \
    -extfile v3.ext \
    -CA ca.crt -CAkey ca.key -CAcreateserial \
    -in radosgw.csr \
    -out radosgw.crt
cat radosgw.key radosgw.crt >radosgw.pem	#将key和crt保存到一个pem文件中

将证书分发至两个rgw服务所在节点

scp radosgw.key radosgw.crt  ceph-mon-02:/etc/ceph/cert/
scp radosgw.key radosgw.crt  ceph-mon-03:/etc/ceph/cert/

修改两个rgw服务所在节点的配置

vim /etc/ceph/ceph.conf
############################
[client.rgw.ceph-mon-02.rgw0]
.........
#指定https端口以及证书和私钥位置
rgw frontends = beast port=9900 ssl_port=9443 ssl_certificate=/etc/ceph/cert/radosgw.crt ssl_private_key=/etc/ceph/cert/radosgw.key		
.........
############################

systemctl restart ceph-radosgw.target

通过https访问测试
在这里插入图片描述
在这里插入图片描述

配置rgw高可用

部署配置haproxy

apt -y install haproxy

vim /etc/haproxy/haproxy.cfg	#修改haproxy配置,添加转发配置
############################
listen radosgw-http
       bind 192.168.211.15:80
       mode tcp
       server radosgw-server1 192.168.211.24:80 check inter 2000 fall 3 rise 5
       server radosgw-server2 192.168.211.25:80 check inter 2000 fall 3 rise 5

listen radosgw-https
       bind 192.168.211.15:443
       mode tcp
       server radosgw-server1 192.168.211.24:443 check inter 2000 fall 3 rise 5
       server radosgw-server2 192.168.211.25:443 check inter 2000 fall 3 rise 5
############################

systemctl restart haproxy	#重启

通过haproxy访问rgw测试
在这里插入图片描述
在这里插入图片描述

其它的配置可以参考官方文档介绍:https://docs.ceph.com/en/pacific/radosgw/frontends/ 和 https://docs.ceph.com/en/pacific/radosgw/config-ref/

客户端s3cmd测试数据读写

创建rgw用户

radosgw-admin user create --uid user1 --display-name user1
radosgw-admin user list	#查看用户

在这里插入图片描述

创建完成后会返回一个access_key和一个secret_key,保存这两个key,是用户user1访问rgw的凭据

安装s3cmd客户端

apt -y install s3cmd

配置s3cmd访问rgw

在s3cmd客户端配置域名解析,将域名解析至负载均衡器地址或具体的RGW的地址。这里将radowgw.linux.io解析至前面配置中haproxy的地址

echo "192.168.211.15 radowgw.linux.io" >>/etc/hosts

以交互式的方式指定s3cmd的配置

s3cmd --configure

在这里插入图片描述

设置完成后,配置文件默认保存在~/.s3cfg
在这里插入图片描述

测试数据读写

创建bucket

s3cmd mb s3://bucket1	#创建一个名为bucket1的bucket
s3cmd ls	#查看bucket

在这里插入图片描述
上传数据

s3cmd put ./1.jpg s3://bucket1/		#将当前目录下1.jpg上传到bucket1中
s3cmd la	#查看所有bucket中存在的object

在这里插入图片描述

下载数据

s3cmd get s3://bucket1/1.jpg ./2.jpg	#将bucket1中1.jpg保存为本地2.jpg

在这里插入图片描述

bucket授权

目前我们通过s3cmd上传到bucket中的数据除了创建者user1外其它用户都不能访问

例如,向bucket1中上传一个MP4视频文件

s3cmd -r put videos/ s3://bucket1

在这里插入图片描述

通过浏览器访问1.mp4文件,会提示拒绝访问
在这里插入图片描述

此时就需要对bucket进行授权,设置公有读的权限,才能公开访问

首先准备policy文件

  • Effect:允许(allow)或拒绝(deny),默认拒绝所有,必须设置
  • Principal:授权针对的用户,*表示所有,必须设置
  • Action:执行的动作,例如读取对象、上传对象等,必须设置。所有可设置的动作可以参考:https://docs.ceph.com/en/quincy/radosgw/bucketpolicy/#limitations
  • Resource:针对哪些bucket、object资源进行授权,必须设置
  • Condition:授权生效的条件,例如客户端访问的TLS版本等,非必须,可不设置
cat test-policy.json	#此policy允许所有人读取bucket1中的对象
###########################
{
  "Version": "2012-10-17",
  "Statement": [{
    "Effect": "Allow",
    "Principal": {
      "AWS": "*"
    },
    "Action": "s3:GetObject",
    "Resource": [
      "arn:aws:s3:::bucket1/*"
    ]
  }]
}
###########################

应用policy到bucket

s3cmd setpolicy test-policy.json s3://bucket1	#设置权限
s3cmd info s3://bucket1		#查看权限

在这里插入图片描述

再次通过浏览器访问1.mp4就可以访问了,权限已经生效

在这里插入图片描述

更多授权的操作可以参考:

  • https://docs.aws.amazon.com/zh_cn/AmazonS3/latest/userguide/using-iam-policies.html
  • https://docs.ceph.com/en/quincy/radosgw/bucketpolicy/#
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Ceph对象存储使用 的相关文章

随机推荐

  • 思科网络工程师必学

    网络工程师学习笔记 第一章 计算机基础知识 一 硬件知识 1 计算机系统的组成包括硬件系统和软件系统 硬件系统分为三种典型结构 1 单总线结构 2 双总线结构 3 采用通道的大型系统结构 中央处理器 CPU 包含运算器和控制器 2 指令系统
  • 什么是数字技术?

    数字技术 xff08 Digital Technology xff09 xff0c 是一项与电子计算机相伴相生的科学技术 xff0c 它是指借助一定的设备将各种信息 xff0c 包括 xff1a 图 文 声 像等 xff0c 转化为电子计算
  • 启示录:新加坡纬壹科技城成功建设经验

    数字TOD xff1a 在各省市新一年的重点工作中 xff0c 产业园区都被放在非常显赫的位置加以强调 xff0c 有的被冠以 高质量发展主战场 的地位 xff0c 有的则异常鲜明地提出 园区兴则产业兴 xff0c 园区强则经济强 的口号
  • 区块链技术赋能数字经济建设

    区块链技术是一项利用密码学算法 以去中心化方式集体维护一个可靠分布式数据库的新兴技术 它具有分布式 不可篡改 可追溯等特征 xff0c 能够弥补传统信用体系不足 防止信息篡改和伪造 节省全社会信用成本 xff0c 对金融 电子商务 智慧医疗
  • 启示录:日本涉谷未来之光TOD成功建设经验

    启示录 xff1a 日本涉谷未来之光TOD成功建设经验 数字TOD 在城市土地供应日益紧张 城市人口膨胀 公共交通快速发展的今天 xff0c 涩谷之光以复合业态功能叠加和选择重点业态精心打造 xff0c 并最大限度对接公共交通资源的开发策略
  • 夜间经济:激发新⼀轮消费潜力升级的新引擎

    数字TOD 夜间经济是现代城市业态之一 xff0c 指从当日下午6点到次日早上6点所包含的经济文化活动 xff0c 其业态囊括晚间购物 餐饮 旅游 娱乐 学习 影视 休闲等 夜间经济是现代城市经济的重要组成部分 xff0c 是促消费 稳就业
  • os模块和序列化

    os模块 和操作系统交互的模块 import os os makedirs dir1 dir2 创建多个文件夹 os mkdir dir3 创建一个文件夹 os removedirs 39 dir3 dir4 删除多个空文件夹 os rmd
  • 启示录:日本东京都二子玉川站TOD成功建设经验

    数字TOD 在成都两会期间印发的 关于实施幸福美好生活十大工程的报告 指出 xff0c 实施幸福美好生活十大工程 xff0c 将以满足人民群众日益增长的美好生活需要为根本目的 xff0c 从市民和企业反映最强烈 最迫切的领域着手 特别提出
  • 启示录:TOD分类及用地功能结构组成

    数字TOD 彼得 卡尔索普在 The Next American Metropolis 一书中描述了两类TOD 一类是城市TOD xff08 Urban TODs xff09 xff0c 位于区域性的干道的轻轨 重轨或快速的公交汽车的站点
  • 启示录:了解TOD模式的正确打开方式(一)

    数字TOD 提起TOD xff0c 到目前很多人可能还很懵懂 科普TOD xff0c 是笔者不可推卸的责任 所以一起回忆下电影 lt 流浪地球 gt 电影魔性台词先上 xff1a 34 北京第三区交通委提醒您 xff1a 道路千万条 xff
  • 启示录:了解TOD模式的正确打开方式(二)

    数字TOD 在中国的城市化进程中 xff0c 城市病 也在加速蔓延 xff0c 交通问题的加重以及土地资源的日益紧缺 xff0c 让生活在其中的人们饱受困扰 xff0c 这同时也引发了人们对城市发展模式的反思 为了实现城市的可持续化发展 x
  • 问题解决方案1-------------catkin_make编译时候的各种问题汇总

    文件移植和编译出现的问题汇总 我真实服了 xff0c 我几乎每一步都能遇到问题 xff0c 这是我catkin make时候遇到的新问题 xff1a 百度总结了一下 xff0c 文末附上链接 xff1a 1 Could not find a
  • CoreDNS介绍与使用

    介绍 在Kubernetes中DNS组件为整个集群提供DNS服务 xff0c 从而实现服务之间的访问 Kubernetes的DNS服务在Kubernetes中经历了3个阶段 xff1a 1 3版本之前skydns1 3 1 10版本kube
  • k8s日志收集

    日志收集介绍 日志收集的目的 xff1a 分布式日志数据统一收集 xff0c 实现集中式查询和管理故障排查安全信息和事件管理报表统计及展示功能 日志收集的价值 xff1a 日志查询 问题排查 故障恢复和故障自愈应用日志分析 xff0c 错误
  • k8s网络插件之Calico

    Calico简介 Calico官方文档 xff1a https projectcalico docs tigera io getting started kubernetes quickstart Calico是一套开源的网络和网络安全解决
  • ceph集群维护常用操作

    文章目录 通过套接字进行单机管理集群启停移除节点ceph配置文件存储池分类副本池IO纠删码池IO PG与PGPPG数量计算PG常见状态存储池管理创建存储池查看存储池删除存储池存储池配额 存储池可用参数存储池快照 通过套接字进行单机管理 可以
  • rbd块存储使用

    文章目录 rbd存储池镜像管理创建镜像查看镜像删除镜像镜像回收站功能镜像特性管理创建image时指定要启用的特性启用特性 xff08 针对已存在的image添加特性 xff09 禁用特性 xff08 针对已存在的image移除特性 xff0
  • 基于fo-dicom 的 Worklist & CStore 我的学习实现路线

    学习了三个周的DICOM协议 xff0c 主要进行了Worklist CStore应用测试 xff0c 下面总结一下过程中收获的心得 刚开始接触DICOM这个东西领导提出两个需求测试实现Worklist和DICOM文件下载 xff0c 后面
  • CephFs使用

    CephFS简介 官方文档 xff1a https docs ceph com en quincy cephfs CephFS即ceph filesystem xff0c 可以实现文件系统共享功能 xff08 POSIX标准 xff09 x
  • Ceph对象存储使用

    文章目录 对象存储简介RadosGW简介RadosGW配置RGW使用的存储池配置rgw使用的http端口配置rgw使用https配置rgw高可用 客户端s3cmd测试数据读写创建rgw用户安装s3cmd客户端配置s3cmd访问rgw测试数据