【分布式系统】Ceph对象存储系统之RGW接口

目录

一.对象存储概述

二.创建RGW接口

1.在管理节点创建一个 RGW 守护进程

2.创建成功后默认情况下会自动创建一系列用于 RGW 的存储池

3.默认情况下 RGW 监听 7480 号端口

4.开启 http+https ,更改监听端口

5.在 rgw 节点上查看端口

6.在客户端访问验证

7.创建 RadosGW 账户

8.客户端测试

三.总结


接着之前的部署集群架构

一.对象存储概述

对象存储(object storage)是非结构数据的存储方法,对象存储中每一条数据都作为单独的对象

存储,拥有唯一的地址来识别数据对象,通常用于云计算环境中

不同于其他数据存储方法,基于对象的存储不使用目录树。

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

端的角度来看,分为以下几个逻辑单位

  • Amazon S3

提供了

  1. 用户(User)
  2. 存储桶(Bucket)
  3. 对象(Object)

三者的关系是

  1. User将Object存储到系统上的Bucket
  2. 存储桶属于某个用户并可以容纳对象,一个存储桶用于存储多个对象
  3. 同一个用户可以拥有多个存储桶,不同用户允许使用相同名称的Bucket,因此User名称即可做为Bucket的名称空间
  • OpenStack Swift
  1. 提供了user、container和object分别对应于用户、存储桶和对象,
  2. 它还额外为user提供了父级组件account,用于表示一个项目或用户组
  3. 因此一个account中可以包含一到多个user,它们可共享使用同一组container,并为container提供名称空间
  • RadosGW
  1. 提供了user、subuser、bucket和object,其中的user对应于S3的user,而subuser则对应于Swift的user
  2. user和subuser都不支持为bucket提供名称空间,因此不同用户的存储桶不允许同名
  3. 自jewel版本起,RadosGW引入了tenant(租户)用于为user和bucket提供名称空间,但他是个可选组件

二.创建RGW接口

如果需要使用到类似 S3 或者 Swift 接口时候才需要部署/创建 RadosGW 接口,RadosGW 通常作

为对象存储(Object Storage)使用,类于阿里云OSS

1.在管理节点创建一个 RGW 守护进程

cd /etc/ceph
ceph-deploy rgw create node01
ceph -s

2.创建成功后默认情况下会自动创建一系列用于 RGW 的存储池

ceph osd pool ls
rgw.root 
default.rgw.control			#控制器信息
default.rgw.meta			#记录元数据
default.rgw.log				#日志信息
default.rgw.buckets.index	#为 rgw 的 bucket 信息,写入数据后生成
default.rgw.buckets.data	#是实际存储的数据信息,写入数据后生成

3.默认情况下 RGW 监听 7480 号端口

ssh root@node01 netstat -lntp | grep 7480

4.开启 http+https ,更改监听端口

RadosGW 守护进程内部由 Civetweb 实现,通过对 Civetweb 的配置可以完成对 RadosGW 的

基本管理
 

#要在 Civetweb 上启用SSL,首先需要一个证书,在 rgw 节点生成证书
1)生成CA证书私钥:
openssl genrsa -out civetweb.key 2048
 
2)生成CA证书公钥:
openssl req -new -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=192.168.20.7"
 
#3、将生成的证书合并为pem
cat civetweb.key civetweb.crt > /etc/ceph/civetweb.pem

更改监听端口

vim ceph.conf
......
[client.rgw.node01]
rgw_host = node01
rgw_frontends = "civetweb port=80+443s ssl_certificate=/etc/ceph/civetweb.pem num_threads=500 request_timeout_ms=60000"
 
------------------------------------------------------------
●rgw_host:对应的RadosGW名称或者IP地址
●rgw_frontends:这里配置监听的端口,是否使用https,以及一些常用配置:
•port:如果是https端口,需要在端口后面加一个s。
•ssl_certificate:指定证书的路径。
•num_threads:最大并发连接数,默认为50,根据需求调整,通常在生产集群环境中此值应该更大
•request_timeout_ms:发送与接收超时时长,以ms为单位,默认为30000
•access_log_file:访问日志路径,默认为空
•error_log_file:错误日志路径,默认为空
------------------------------------------------------------
 
#修改完 ceph.conf 配置文件后需要重启对应的 RadosGW 服务,再推送配置文件
ceph-deploy --overwrite-conf config push node0{1..3}


systemctl restart ceph-radosgw.target

5.在 rgw 节点上查看端口

netstat -lntp | grep -w 80
netstat -lntp | grep 443

6.在客户端访问验证


curl http://192.168.80.105:80
curl -k https://192.168.80.105:443

7.创建 RadosGW 账户

在管理节点使用 radosgw-admin 命令创建 RadosGW 账户

radosgw-admin user create --uid="rgwuser" --display-name="rgw test user"

#创建成功后将输出用户的基本信息,其中最重要的两项信息为 access_key 和 secret_key 。用户创建成后功,如果忘记用户信息可以使用下面的命令查看
radosgw-admin user info --uid="rgwuser"

8.客户端测试

1)在客户端安装 python3、python3-pip
yum install -y python3 python3-pip

python3 -V
Python 3.6.8

pip3 -V
pip 9.0.3 from /usr/lib/python3.6/site-packages (python 3.6)

2)安装 boto 模块,用于测试连接 S3
pip3 install boto

3)测试访问 S3 接口
echo 123123 > /opt/123.txt

vim test.py
#coding:utf-8
import ssl
import boto.s3.connection
from boto.s3.key import Key
try:
    _create_unverified_https_context = ssl._create_unverified_context
except AttributeError:
    pass
else:
    ssl._create_default_https_context = _create_unverified_https_context
	
#test用户的keys信息
access_key = "ER0SCVRJWNRIKFGQD31H"                          #输入 RadosGW 账户的 access_key
secret_key = "YKYjk7L4FfAu8GHeQarIlXodjtj1BXVaxpKv2Nna"      #输入 RadosGW 账户的 secret_key

#rgw的ip与端口
host = "192.168.80.11"        #输入 RGW 接口的 public 网络地址

#如果使用443端口,下述链接应设置is_secure=True
port = 443
#如果使用80端口,下述链接应设置is_secure=False
#port = 80
conn = boto.connect_s3(
    aws_access_key_id=access_key,
    aws_secret_access_key=secret_key,
    host=host,
    port=port,
    is_secure=True,
    validate_certs=False,
    calling_format=boto.s3.connection.OrdinaryCallingFormat()
)

#一:创建存储桶
#conn.create_bucket(bucket_name='bucket01')
#conn.create_bucket(bucket_name='bucket02')

#二:判断是否存在,不存在返回None
exists = conn.lookup('bucket01')
print(exists)
#exists = conn.lookup('bucket02')
#print(exists)

#三:获得一个存储桶
#bucket1 = conn.get_bucket('bucket01')
#bucket2 = conn.get_bucket('bucket02')

#四:查看一个bucket下的文件
#print(list(bucket1.list()))
#print(list(bucket2.list()))

#五:向s3上存储数据,数据来源可以是file、stream、or string
#5.1、上传文件
#bucket1 = conn.get_bucket('bucket01')
# name的值是数据的key
#key = Key(bucket=bucket1, name='myfile')
#key.set_contents_from_filename('/opt/123.txt')
# 读取 s3 中文件的内容,返回 string 即文件 123.txt 的内容
#print(key.get_contents_as_string())

#5.2、上传字符串
#如果之前已经获取过对象,此处不需要重复获取
bucket2 = conn.get_bucket('bucket02')
key = Key(bucket=bucket2, name='mystr')
key.set_contents_from_string('hello world')
print(key.get_contents_as_string())

#六:删除一个存储桶,在删除存储桶本身时必须删除该存储桶内的所有key
bucket1 = conn.get_bucket('bucket01')
for key in bucket1:
    key.delete()
bucket1.delete()


4)按照以上步骤执行 python 脚本测试
python3 test.py

三.总结

RGW操作

服务端

ceph-deploy rgw create 节点列表                                      
#创建RGW接口,还可以修改ceph配置文件,设置RGW监听的端口号(默认端口为7480)
radosgw-admin user create --uid="用户名" --display-name="备注信息"      
#创建RGW账户,获取access_key和secret_key

客户端

  1. 准备好客户端应用程序
  2. 使用RGW账户的access_key和secret_key做验证访问RGW对象存储接口
  3. 在对象存储里创建bucket存储桶
  4. 在bucket存储桶里创建对象object,上传数据

相关推荐

  1. 分布式系统Ceph对象存储系统RGW接口

    2024-07-13 08:24:02       28 阅读
  2. 分布式系统Ceph对象存储系统RGW接口

    2024-07-13 08:24:02       21 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-07-13 08:24:02       66 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-07-13 08:24:02       70 阅读
  3. 在Django里面运行非项目文件

    2024-07-13 08:24:02       57 阅读
  4. Python语言-面向对象

    2024-07-13 08:24:02       68 阅读

热门阅读

  1. 浅谈PostCSS

    2024-07-13 08:24:02       27 阅读
  2. AI学习指南机器学习篇-层次聚类的优缺点

    2024-07-13 08:24:02       23 阅读
  3. 一文学会鉴别“套壳”ChatGPT模型

    2024-07-13 08:24:02       29 阅读
  4. MPPT概念

    2024-07-13 08:24:02       26 阅读
  5. Python MySQL 教程

    2024-07-13 08:24:02       30 阅读
  6. 数据湖仓一体(二) 安装kafka

    2024-07-13 08:24:02       26 阅读
  7. Kafka Rebalance详解

    2024-07-13 08:24:02       30 阅读
  8. python:使用openpyxl模块处理excel

    2024-07-13 08:24:02       24 阅读
  9. Redis

    Redis

    2024-07-13 08:24:02      25 阅读
  10. 【ceph】ceph集群-添加/删除mon

    2024-07-13 08:24:02       26 阅读