Ceph对象存储使用

news2024/10/7 16:19:35

文章目录

      • 对象存储简介
      • 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/#

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/499327.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

QT+OpenGL反射与折射

文章目录 QTOpenGL反射与折射反射折射 QTOpenGL反射与折射 本篇完整工程见gitee:QtOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主 反射 反射这个属性表现为物体(或者物体的一部分)反射它周围的环境&#xff0c;即根据观察者…

【Python入门篇】——Python基础语法(字符串格式化,表达式格式化和数据输入)

作者简介&#xff1a; 辭七七&#xff0c;目前大一&#xff0c;正在学习C/C&#xff0c;Java&#xff0c;Python等 作者主页&#xff1a; 七七的个人主页 文章收录专栏&#xff1a; Python入门&#xff0c;本专栏主要内容为Python的基础语法&#xff0c;Python中的选择循环语句…

STM32CubeMx+HAL库+小熊派+FreeRTOS+EasyLogger+Gitee+手把手教你

文章目录 1、创建工程配置RCC与SYS配置LED配置KEY配置串口生成工程 2、手动移植Freertos获取源码移植include移植portable移植src复制并修改FreeRTOSConfig.hkeil中添加路径与配置 3、移植EasyLogger获取源码复制easylogger文件keil中添加路径修改elog.h修改elog_port.c修改elo…

MacOS自定义安装 Python

Python 下载地址 官网下载太慢&#xff0c;如下是国内的镜像源&#xff0c;各版本都有&#xff1a;Python 国内镜像 下载好后缀是 tgz 的包进行解压 tar -zxvf Python-3.9.16.tgz进入目录并且对进行配置&#xff0c;编译(根据自己的目录进行调整) ./configure --with-opens…

Excel技能之图表,会Excel就能碾压程序员

数据可视化&#xff0c;让数据说话&#xff0c;需要Excel图表的呈现。你越用心&#xff0c;画的图越好看。 同一份数据&#xff0c;用不同的Excel图表展现出来&#xff0c;效果各有千秋。使用正确的图表&#xff0c;从一堆杂乱无章的数据中找出规律。不仅要知道怎么用图表&…

sentinel 随笔 1-流控

0. 想要个半个月的旅游 最近发现算法比较有意思一些&#xff0c;什么企业框架都是看不完的… 书接 FlowSlot 1. FlowRuleChecker.checkFlow() : 配置的规则校验类 sentinel 并没有对这个Checker进行抽象的设计&#xff0c;第一次看有些别扭… package com.alibaba.csp.sent…

矢量绘图UI设计Sketch

Sketch是一款Mac操作系统上常用的矢量图形编辑软件&#xff0c;旨在帮助用户设计和创建高质量的UI和UX界面。 软件安装&#xff1a;Sketch 中文 以下是Sketch软件的一些主要特点&#xff1a; 矢量工具和对象&#xff1a;Sketch提供了多种画线、填充、阴影、文本和形状等矢量工…

Illustrator如何使用图形对象的特殊效果之实例演示?

文章目录 0.引言1.制作毛球小怪物2.制作三维立体图形3.3D剪影球体艺术海报 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对Illustrator进行了学习&#xff0c;本文通过《Illustrator CC2018基础与实战》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本…

Unity大面积草地渲染——1、Shader控制一棵草的渲染

大家好&#xff0c;我是阿赵。 这里开始讲大面积草地渲染的第一个部分&#xff0c;一棵草的渲染。按照惯例&#xff0c;完整shader在最后。前面是原理的介绍。 一、准备的资源 这里我自己随便做了一个草的模型&#xff0c;主要是用几个面片搭建的一个简单模型。 然后我准备…

DAP之FLM算法研究

本人所写的博客都为开发之中遇到问题记录的随笔,主要是给自己积累些问题。免日后无印象,如有不当之处敬请指正(欢迎进扣群 24849632 探讨问题); 写在专栏前面https://blog.csdn.net/Junping1982/article/details/129955766 玩过自制DAP工具的一定都知道通过MDK目录的FLM文…

priority_queue

priority_queue&#xff1a;优先队列 头文件还是 < queue> 本质就是堆&#xff1a;完全二叉树 条件&#xff08;任意节点都比其孩子大&#xff08;大根堆&#xff09;&#xff09; priority_queue的默认比较是less&#xff0c;但是建出来的是大根堆&#xff1b;sort排序…

顺序表的基本操作(初始化,增,删,查,改等等)

1.线性表 线性表&#xff08;linear list&#xff09;是n个具有相同特性的数据元素的有限序列。 线性表是一种在实际中广泛使 用的数据结构&#xff0c;常见的线性表&#xff1a;顺序表、链表、栈、队列、字符串...线性表在逻辑上是线性结构&#xff0c;也就说是连续的一条直线…

智能算法系列之蚁群算法

本博客封面由ChatGPT DALLE 2共同创作而成。 文章目录 前言1. 算法思想2. 算法流程3. 细节梳理4. 算法实现4.1 问题场景4.2 代码实现 代码仓库&#xff1a;IALib[GitHub] 前言 本篇是智能算法(Python复现)专栏的第五篇文章&#xff0c;主要介绍蚁群算法(Ant Colony Optimizati…

cmd@快捷键方式@静默执行命令

文章目录 ref快捷方式执行命令行或打开文件eg:直接打开某个文件 创建快捷方式eg:快捷方式运行命令 ref How can I execute a Windows command line in background? - Super Userstbrenner/SilentCMD: SilentCMD executes a batch file without opening the command prompt wi…

如何用100天时间,让CSDN的粉丝数从0狂飙到10000

2022年10月7日&#xff0c;正式开通了CSDN账号。但因为工作忙的原因&#xff0c;一直没有时间写博客文章&#xff0c;也没有投入精力在CSDN上。理所当然的&#xff0c;我的粉丝数量很稳定&#xff0c;一直保持着0的记录。 2023年春节假期过后&#xff0c;有点空闲时间了&#x…

Tre靶场通关过程(linpeas使用+启动项编辑器提权)

Tre靶场通关 通过信息收集获得到了普通用户账号密码&#xff0c;利用PEASS-ng的linpeas脚本进行提权的信息收集&#xff0c;根据已有信息进行提权。 靶机下载地址&#xff1a; https://download.vulnhub.com/tre/Tre.zip 信息收集 靶机IP探测&#xff1a;192.168.0.129 a…

java多线程下

ThreadLocal ThreadLocal 有什么用&#xff1f;通常情况下&#xff0c;我们创建的变量是可以被任何一个线程访问并修改的。如果想实现每一个线程都有自己的专属本地变量该如何解决呢&#xff1f;JDK 中自带的ThreadLocal类正是为了解决这样的问题。 ThreadLocal类主要解决的就…

解释表情包This code will never do anything!

目录 解释一下下面这段代码 #include int main(){ while (1) ;} void unreachable(){ std::cout <<"Hello world!"<;}<> 解释一下下面这段代码 $ clang loop.cpp -01 -Wall -o loop $ ./loop Hello world! 解释一下下面这段代码 #include <iostre…

python面试题

文章目录 赋值、深拷贝和浅拷贝有什么区别&#xff1f;元组和列表有什么不同&#xff1f;和is有什么不同&#xff1f;集合怎么转字典&#xff1f;字典怎么遍历&#xff1f;如何在Python中实现多线程&#xff1f;如何实现tuple和list的转换&#xff1f;实现删除一个list里面的重…

厉害的人是搭建平台的人,少数人

牛人是搭建平台的人&#xff0c;是少数人 创建平台才有难度 趣讲大白话&#xff1a;多数人的成就是借平台之力 【趣讲信息科技157期】 **************************** 认识清楚平台能力和个人能力 创建阿里巴巴公司太难 多数人是借阿里巴巴平台之力成就的 离开一个成功的平台&a…