RBD块存储

RBD介绍

1、RBD是Ceph分布式集群中最常用的存储类型
2、块是一个有序字节,普通的一个块大小为512字节,基于块的存储是最常见的存储方式,比如常见的硬盘、软盘和CD光盘等,都是存储数据最简单快捷的设备
3、Ceph块设备是一种精简置备模式,可以扩展大小且数据是以条带化的方式存储在一个集群中的多个OSD中RBD具有快照、多副本、克隆和一致性功能
4、Ceph块设备通过Linux内核模块或者librbd库与OSD之间交互通信的模式

librbd介绍

librbd是一个访问rbd块存储的库,librados提供了RBD、Ceph FS和Radosgw三种存储接口,其中librbd就是利用librados与RBD进行交互的,librbd主要用于为虚拟机提供块设备

RBD的应用场景

大多数使用场景中是基于QEMU/KVM通过librbd的方式,提到虚拟化就自然想到热度狠高的云计算,需拟化是云计算的核心,云计算的IaaS层一般对外提供虚拟机资源服务,比如火热的OpenStack等提供基础设施堆栈的开源软件框架,RBD块设备用于虚拟机的系统卷、数据卷,根据Ceph RBD的分层功能,还可以方便实现基于COW的克隆技术,还有基于RBD的快照、导入、导出和扩容等功能

RDB块存储的使用

#创建存储池
[cephadm@xiaomao ceph-cluster]$ ceph osd pool create kube 64 64
pool 'kube' created
#在kube存储池上启用rbd功能
[cephadm@xiaomao ceph-cluster]$ ceph osd pool application enable kube rbd
enabled application 'rbd' on pool 'kube'
#初始化rbd
[cephadm@xiaomao ceph-cluster]$ rbd pool init kube
#创建rbd镜像
#第一种创建方法
[cephadm@xiaomao ceph-cluster]$ rbd create  --pool kube --image vol01 --size 2G
#查看镜像是否创建成功
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube
vol01
#第二种创建方法
[cephadm@xiaomao ceph-cluster]$ rbd create --size 2G kube/vol02
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube
vol01
vol02
#查看镜像文件的详细信息
[cephadm@xiaomao ceph-cluster]$ rbd ls --pool kube -l
NAME  SIZE  PARENT FMT PROT LOCK
vol01 2 GiB          2
vol02 2 GiB          2
#第二种方法
[cephadm@xiaomao ceph-cluster]$ rbd info --pool kube vol01
rbd image 'vol01':size 2 GiB in 512 objectsorder 22 (4 MiB objects)snapshot_count: 0id: acd0fc78a781block_name_prefix: rbd_data.acd0fc78a781format: 2features: layering, exclusive-lock, object-map, fast-diff,deep-flattenop_features:flags:create_timestamp: Thu Jul  9 22:41:28 2020access_timestamp: Thu Jul  9 22:41:28 2020modify_timestamp: Thu Jul  9 22:41:28 2020

通过上面的 info 输出信息我们可以看到,当前2G的镜像,包含有512个object,每个object是4M,order类型是22,即2的2次方,块存储的前缀是 rbd_data.acd0fc78a781 开头,features提供了5个特性:layering, exclusive-lock, object-map, fast-diff, deep-flatten,由于CentOS 7.x有些特性还不支持,因此需要将其先禁用

#禁用rbd块的特性
[cephadm@xiaomao ceph-cluster]$ rbd feature disable kube/vol01 object-map fast-diff deep-flatten
#禁用后再次查看
[cephadm@xiaomao ceph-cluster]$ rbd info --pool kube vol01
rbd image 'vol01':size 2 GiB in 512 objectsorder 22 (4 MiB objects)snapshot_count: 0id: acd0fc78a781block_name_prefix: rbd_data.acd0fc78a781format: 2features: layering, exclusive-lock

客户端挂载使用rbd

#xiaomao5充当客户端
[root@xiaomao5 ~]# yum -y install ceph-common
#创建认证账号
#client.kube 账号名(kube) pool存储池   -o  ceph.client.kube.keyring:保存的文件名
[cephadm@xiaomao ceph-cluster]$  ceph auth get-or-create  client.kube  mon 'allow r' mds 'allow rw'  osd  'allow rwx pool=kube' -o  ceph.client.kube.keyring
#查看账号信息
[cephadm@xiaomao ceph-cluster]$ ceph auth get client.kube
exported keyring for client.kube
[client.kube]key = AQDjOAdfFB5MNRAAnIkXJr3Bo5G4UWEb3gfOcA==caps mds = "allow rw"caps mon = "allow r"caps osd = "allow rwx pool=kube"
#客户端挂载RBD的两个条件
#复制账号信息到客户端
[cephadm@xiaomao ceph-cluster]$ scp ceph.client.kube.keyring   root@xiaomao5:/etc/ceph/
#复制ceph.conf配置文件到客户端
[cephadm@xiaomao ceph-cluster]$ scp ceph.conf   root@xiaomao5:/etc/ceph/
#使用客户端连接ceph集群
# --user 普通用户
[root@xiaomao5 ~]# ceph  --user kube -scluster:id:     eff8141a-a26b-498f-9608-879c2565496dhealth: HEALTH_OKservices:mon: 3 daemons, quorum xiaomao4,xiaomao5,xiaomao (age 100m)mgr: xiaomao4(active, since 2h), standbys: xiaomao, xiaomao5osd: 6 osds: 6 up (since 84m), 6 in (since 84m)data:pools:   1 pools, 64 pgsobjects: 7 objects, 213 Busage:   6.0 GiB used, 354 GiB / 360 GiB availpgs:     64 active+clean
#RBD块映射
[root@xiaomao5 ~]# rbd --user kube map kube/vol01
/dev/rbd0
#开始挂载
[root@xiaomao5 ~]# mkfs.xfs /dev/rbd0
[root@xiaomao5 ~]# mount /dev/rbd0  /mnt/
[root@xiaomao5 ~]# cd /mnt/
[root@xiaomao5 mnt]# cp /etc/fstab   /mnt/
[root@xiaomao5 mnt]# ls
fstab
#查看是否挂载成功
[root@xiaomao5 mnt]# df -h
Filesystem               Size  Used Avail Use% Mounted on
/dev/rbd0                2.0G   33M  2.0G   2% /mnt
#查看块映射信息
[root@xiaomao5 ~]# rbd showmapped
id pool namespace image snap device
0  kube           vol01 -    /dev/rbd0
#卸载块设备
[root@xiaomao5 ~]# rbd unmap /dev/rbd0
#调整RBD块的大小
[cephadm@xiaomao ceph-cluster]$ rbd resize -s 5G kube/vol01
Resizing image: 100% complete...done.
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
NAME  SIZE  PARENT FMT PROT LOCK
vol01 5 GiB          2
vol02 2 GiB          2
#删除镜像
[cephadm@xiaomao ceph-cluster]$ rbd rm kube/vol02
#查看镜像是否删除成功
[cephadm@xiaomao ceph-cluster]$  rbd ls -p kube -l
NAME  SIZE  PARENT FMT PROT LOCK
vol01 5 GiB          2
#把镜像放进回收站
[cephadm@xiaomao ceph-cluster]$ rbd trash move kube/vol01
#再次查看镜像是否回收成功
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
#显示回收站中的镜像文件
[cephadm@xiaomao ceph-cluster]$ rbd trash list -p kube
acd0fc78a781 vol01
#从回收站中恢复镜像
#rbd trash restore -p 存储池 --image 镜像名 --image-id 回收站中镜像id
[cephadm@xiaomao ceph-cluster]$ rbd trash restore -p kube --image vol01 --image-id acd0fc78a781
#查看是否恢复回来了
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube -l
NAME  SIZE  PARENT FMT PROT LOCK
vol01 5 GiB          2

创建rbd快照

#为了模拟看出效果,先挂载rbd块存储
[root@xiaomao5 ~]# rbd --user kube map kube/vol01
/dev/rbd0
[root@xiaomao5 ~]# mount /dev/rbd0 /data/
[root@xiaomao5 ~]# df -h
/dev/rbd0                2.0G   33M  2.0G   2% /data
[root@xiaomao5 ~]# cp -r /etc/  /data/
[root@xiaomao5 ~]# cd /data/
[root@xiaomao5 data]# ll
total 16
drwxr-xr-x. 80 root root 8192 Jul 10 17:46 etc
-rw-r--r--.  1 root root  465 Jul  9 23:50 fstab
#回到管理节点创建快照
#开始创建快照
[cephadm@xiaomao ceph-cluster]$ rbd snap create kube/vol01@snap1
#查看快照是否创建成功
[cephadm@xiaomao ceph-cluster]$ rbd snap list kube/vol01
SNAPID NAME  SIZE  PROTECTED TIMESTAMP4 snap1 5 GiB           Fri Jul 10 17:50:56 2020
#在客户端删除挂载目录上的全部数据,然后恢复快照
[root@xiaomao5 ~]# cd /data/
[root@xiaomao5 data]# ls
etc
[root@xiaomao5 data]# rm -rf *
[root@xiaomao5 ~]# umount /data/
[root@xiaomao5 ~]# rbd unmap /dev/rbd0
#回到管理端开始恢复快照
[cephadm@xiaomao ceph-cluster]$ rbd snap rollback kube/vol01@snap1
Rolling back to snapshot: 100% complete...done.
#再次从客户端映射挂载,查看数据是否恢复成功
[root@xiaomao5 ~]# rbd --user kube map kube/vol01
/dev/rbd0
[root@xiaomao5 ~]# mount /dev/rbd0 /mnt/
[root@xiaomao5 ~]# ls /mnt/
etc  fstab
#删除快照
[cephadm@xiaomao ceph-cluster]$ rbd snap rm kube/vol01@snap1
Removing snap: 100% complete...done.
#限制快照创建的数量
[cephadm@xiaomao ceph-cluster]$ rbd snap limit set kube/vol01 --limit 10
#清除限制
[cephadm@xiaomao ceph-cluster]$ rbd snap limit clear kube/vol01
#建立多层快照
# 第一步创建镜像,
rbd create  --pool kube --image vol01 --size 2G
#第二步创建镜像快照
[cephadm@xiaomao ceph-cluster]$ rbd snap create kube/vol01@clonetpl1
#查看快照是否创建成功
[cephadm@xiaomao ceph-cluster]$ rbd snap ls kube/vol01
SNAPID NAME      SIZE  PROTECTED TIMESTAMP6 clonetpl1 5 GiB           Sat Jul 11 11:09:12 2020
#设置clonetpl1的快照名为保护模式
#在克隆(Cloning)前,快照必须处于被保护(protected)的状态才能够被克隆
[cephadm@xiaomao ceph-cluster]$ rbd snap protect kube/vol01@clonetpl1
#第三步对快照做克隆(多层快照)
# rbd clone  原始快照  新的快照名称(kube/myimg01)
#克隆好的快照可以当作一个镜像来使用,也可以跨存储池做克隆(多层快照)
[cephadm@xiaomao ceph-cluster]$ rbd clone kube/vol01@clonetpl1 kube/myimg01
#查看是否创建成功
[cephadm@xiaomao ceph-cluster]$ rbd ls -p kube
myimg01
vol01
#在客户端机器测试这个克隆镜像是否能使用成功
#重新映射磁盘
[root@xiaomao5 ~]# rbd --user kube map kube/myimg01
/dev/rbd0
[root@xiaomao5 ~]# mount /dev/rbd0 /mnt/
[root@xiaomao5 ~]# cd /mnt/
[root@xiaomao5 mnt]# ll
total 16
drwxr-xr-x. 80 root root 8192 Jul 10 17:46 etc
-rw-r--r--.  1 root root  465 Jul  9 23:50 fstab
#查看快照做了多少克隆
[cephadm@xiaomao ceph-cluster]$ rbd children kube/vol01@clonetpl1
kube/myimg01
#切断kube/myimg01与原镜像快照(kube/vol01@clonetpl1)的关系,哪怕原镜像快照被删除,旧的依然能使用
[cephadm@xiaomao ceph-cluster]$ rbd flatten kube/myimg01
Image flatten: 100% complete...done.
#解除保护kube/vol01@clonetpl1的保护
[cephadm@xiaomao ceph-cluster]$ rbd snap unprotect kube/vol01@clonetpl1
#删除kube/vol01@clonetpl1快照
[cephadm@xiaomao ceph-cluster]$ rbd snap rm kube/vol01@clonetpl1
Removing snap: 100% complete...done.

RBD的导入和导出

#创建镜像
[cephadm@xiaomao ceph-cluster]$ rbd create --pool kube  --image vol03 --size 4G
#导出镜像
#rbd export  需要导出的镜像   导出后镜像的备份名称
[cephadm@xiaomao ceph-cluster]$ rbd export kube/vol03  vol03_export
#查看是否导出成功
[cephadm@xiaomao ceph-cluster]$ ll -h vol03_export
-rw-r--r-- 1 cephadm cephadm 4.0G Jul 12 17:45 vol03_export
#导入镜像
#rbd import  导入镜像文件   导入后的镜像名称 --image-format 2
[cephadm@xiaomao ceph-cluster]$ rbd import vol03_export  kube/vol04 --image-format 2
#查看是否导入成功
[cephadm@xiaomao ceph-cluster]$ rbd ls kube
myimg01
vol01
vol03
vol04

CephX认证机制

Ceph使用cephx协议对客户端进行身份认证

1、每个MON都可以对客户端进行身份验正并分发密钥,不存在单点故障和性能瓶颈
2、MON会返回用于身份验正的数据结构,其包含获取Ceph服务时用到的session key

1、session key通过客户端密钥进行加密
2、客户端使用session key向MON请求所需的服务
3、MON向客户端提供一个ticket,用于向实际处理数据的OSD等验正客户端身份
4、MON和OSD共享同一个secret,因此OSD会信任由MON发放的ticket
5、ticket存在有效期限
#注意
1、CephX身份验正功能仅限制Ceph的各组件之间,它不能扩展到其它非Ceph组件;
2、它并不解决数据传输加密的问题;

认证与授权

1、无论Ceph客户端是何类型,Ceph都会在存储池中将所有数据存储为对象
2、Ceph用户需要拥有存储池访问权限才能读取和写入数据
3、Ceph用户必须拥有执行权限才能使用Ceph的管理命令

用户

1、用户是指个人或系统参与者(例如应用)
2、通过创建用户,可以控制谁(或哪个参与者)能够访问Ceph存储集群、以及可访问的存储池及存储池中的数据

#Ceph支持多种类型的用户,但可管理的用户都属于Client类型
1、区分用户类型的原因在于,MON、OSD和MDS等系统组件也使用Cephx协议,但它们非客户端
2、通过点号来分隔用户类型和用户名,格式为TYPE.ID,例如client.admin等

用户授权

1、描述用户可针对MON、OSD或MDS使用的权限范围或级别
2、通用语法格式:daemon-type ‘allow caps’ […]

#MON:
1、包括r、w、x和allow profile cap
2、例如:mon 'allow rwx',以及mon  'allow profile osd'等
#OSD
1、包括r、w、x、class-read、class-write和profile osd
2、此外,osd还允许进行存储池和名称空间设置
#MDS
1、只需要allow,或留空

各项的解释说明

1、allow:需先于守护进程的访问设置指定,仅对MDS表示rw
2、r:向用户授予读取权限,访问监视器以检索CRUSH地图时需具有此能力
3、w:向用户授予针对对象的写入权限
4、x:授予用户调用类方法(包括读取和写入)的能力,以及在监视器中执行auth操作的能力
5、class-read:授予用户调用类读取方法的能力,
6、class-write:授予用户调用类写入方法的能力
7、*:授予用户对特定守护进程/存储池的读取、写入和执行权限,以及执行管理命令的能力
8、profile osd:授予用户以某个 OSD 身份连接到其他 OSD 或监视器的权限。授予 OSD 权限,使 OSD 能够处理复制检测信号流量和状态报告
9、profile mds:授予用户以某个mds身份连接到其他mds或监视器的权限
10、profile bootstrap-osd:授予用户引导 OSD 的权限。授权给部署工具,使其在引导 OSD 时有权添加密钥。
11、profile bootstrap-mds:授予用户引导元数据服务器的权限。授权给部署工具,使其在引导元数据服务器时有权添加密钥

用户管理

1、Ceph集群管理员能够直接在Ceph集群 中创建、更新和删除用户
2、创建用户时,可能需要将密钥分发到客户端,以便将密钥添加到密钥环(存放多个用户及其密钥信息)

列出用户

1、命令:ceph auth list
2、用户标识:TYPE.ID,因此,osd.0表示OSD类型的用户,用户ID为0

检索特地用户

命令:ceph auth get TYPE.ID或者ceph auth export TYPE.ID

添加用户

1、ceph auth add:规范方法,它能够创建用户、生成密钥并添加指定的caps
2、ceph auth get-or-create:简便方法,创建用户并返回密钥文件格式的密钥信息,或者在用户存在时
返回用户名及密钥文件格式的密钥信息
3、ceph auth get-or-create-key:简便方法,创建用户并返回密钥信息,或者在用户存在时返回密钥信息

注意:典型的用户至少对 Ceph monitor 具有读取功能,并对 Ceph OSD 具有读取和写入功能;另外,用户的 OSD 权限通常应该限制为只能访问特定的存储池,否则,他将具有访问集群中所有存储池的权限

用户管理

#列出用户
[cephadm@xiaomao ceph-cluster]$ ceph auth list
#添加用户
#创建一个testuser的用户
#ceph auth add client.用户名 mon 'allow r' osd 'allow rw pool=存储池'
[cephadm@xiaomao ~]$ ceph auth add client.testuser mon 'allow r' osd 'allow rw pool=rbdpool'
added key for client.testuser
#查看刚创建用户的信息
[cephadm@xiaomao ~]$ ceph auth get client.testuser
exported keyring for client.testuser
[client.testuser]key = AQBAbQlfnYdQERAA9JHJC2rST7ICdxL4LV6qTQ==caps mon = "allow r"caps osd = "allow rw pool=rbdpool"
#列出用户的密钥
[cephadm@xiaomao ~]$ ceph auth print-key client.testuser
AQBAbQlfnYdQERAA9JHJC2rST7ICdxL4LV6qTQ==
#修改用户授权
[cephadm@xiaomao ~]$ ceph auth caps client.testuser mon 'allow rw' osd 'allow rw pool=rbdpool'
updated caps for client.testuser
#查看用户授权是否修改成功
[cephadm@xiaomao ~]$ ceph auth get client.testuser
exported keyring for client.testuser
[client.testuser]key = AQBAbQlfnYdQERAA9JHJC2rST7ICdxL4LV6qTQ==caps mon = "allow rw"caps osd = "allow rw pool=rbdpool"
#删除用户
[cephadm@xiaomao ~]$ ceph auth del client.testuser
updated

keyring

访问Ceph集群时,客户端会于本地查找密钥环

# 默认情况下,Ceph会使用以下四个密钥环名称预设密钥环
• /etc/ceph/cluster-name.user-name.keyring:保存单个用户的keyring
• /etc/ceph/cluster.keyring:保存多个用户的keyring
• /etc/ceph/keyring
• /etc/ceph/keyring.bin

1、 cluster-name是为集群名称,user-name是为用户标识(TYPE.ID)
2、client.admin用户的在名为ceph的集群上的密钥环文件名为ceph.client.admin.keyring

将用户添加至keyring

#创建用户并保存成keyring文件
#可将某个用户从包含多个用户的keyring中导出,并保存于一个专用的keyring文件
#命令:ceph auth get-or-create TYPE.ID -o /etc/ceph/cluster-name.user-name.keyring
[cephadm@xiaomao ~]$ ceph auth get-or-create  client.kube1 mon 'allow r' osd 'allow * pool=kube' -o ceph.client.kube1.keyring
#将用户的keyring合并至一个统一的keyring文件中
[cephadm@xiaomao ~]$ cd ceph-cluster/
#注意合并的文件一定要事先存在才行
#ceph.client.kube.keyring合并到fsclient.key
[cephadm@xiaomao ceph-cluster]$ ceph-authtool  fsclient.key --import-keyring  ./ceph.client.kube.keyring
importing contents of ./ceph.client.kube.keyring into fsclient.key
#查看合并后的结果
[cephadm@xiaomao ceph-cluster]$ ceph-authtool  fsclient.key --import-keyring  ./ceph.mon.keyring
importing contents of ./ceph.mon.keyring into fsclient.key
[cephadm@xiaomao ceph-cluster]$ ceph-authtool -l fsclient.key
[mon.]key = AQBVVf1eAAAAABAAn3rKdl9QYMJtVml3lOaMPQ==caps mon = "allow *"
[client.kube]key = AQDjOAdfFB5MNRAAnIkXJr3Bo5G4UWEb3gfOcA==

Ceph RGW对象存储

RGW介绍

RGW是Ceph对象存储网关服务RADOS Gateway的简称,是一套基于Librados接口封装而实现的FastCGI服务,对外提供RESTful风格的对象存储数据访问和管理接口。RGW基于HTTP协议标准,因此非常适用于Web类的互联网应用场景,用户通过使用SDK或者其他客户端工具,能够很方便地接入RGW进行图片、视频以及各类文件的上传或下载,并设置相应的访问权限,共享给其他用户,形成最简单的网盘分享

RGW提供的兼容接口

1、S3接口:兼容大部分Amazon S3 API标准,目前这套接口应用比较广泛
2、Swift接口:兼容OpenStack Swift API
3、Admin管理接口:实现对S3用户、Bucke(存储空间)t和Quota等信息的统一管理

其中,S3兼容接口提供了一套简单的Web服务接口,可随时随地通过HTTP的方式在网络上的任何位置存储和检索任意数量的数据,是一套非常实用的对象存储服务标准。很多互联网公司的产品,比如图片、视频一类资源的存储与发布等都是借助这套标准服务来实现的,节约了大量的采购、开发和部署运维成本,特别适合一次写入,多用户同时读取的场景。

Amazon S3简介

1、Amazon S3提供了一个简单的Web服务接口,可随时在web上的任何位置存储和检索任何数量的数据,
同时提供了丰富的SDK,支持java、python、Ruby和PHP等多种开发语言

S3的服务特点

安全与访问管理

S3可以针对每个对象存储桶或者对象设置独立的访问控制策略,可以允许某些S3访问、或者全部对外开放等,另外
S3还支持对对象的限时访问,提供一个仅在规定时间内有效的URL

支持各种语言的SDK进行编程访问

亚马逊提供的SDK支持C++、C#、Java、PHP、Python和Ruby等常见的语言,使应用的开
发能够更加灵活简单。

多元化使用S3服务

1、通过S3 SDK编程访问
2、通过REST API进行访问
3、通过命令行CLI进行访问

存储对象的版本控制

对于S3存储桶中的每个对象,可以使用版本控制功能来保存各个版本,可以用于数据恢复等

搭建Nginx+RGW环境

新建RGW
[cephadm@xiaomao ~]$ cd ceph-cluster/
[cephadm@xiaomao ceph-cluster]$ ceph-deploy  rgw create  xiaomao4 xiaomao5
#配置文件发生了变化,及时推送文件到集群中的机器
[cephadm@xiaomao ceph-cluster]$ ceph-deploy  --overwrite config push xiaomao xiaomao4 xiaomao5
#RGW默认使用的端口是7480
#查看监听端口是否启动
[root@xiaomao4 ~]# ss -ntl
LISTEN      0      128                                                                :::7480                                                                           :::*
#测试访问
[root@xiaomao5 ~]# curl http://xiaomao4: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></ListAllMyB

修改RGW的默认端口

这次就以xiaomao4机器为例子

#修改RGW的默认端口
#管理节点修改
[cephadm@xiaomao ceph-cluster]$ cat ceph.conf
#在配置文件[global]末尾添加
#需要修改的节点机器
[client.rgw.xiaomao4]
#把监听端口改为8081
rgw frontends = civetweb port=8081
#推送配置文件到远端
[cephadm@xiaomao ceph-cluster]$ ceph-deploy  --overwrite config push xiaomao xiaomao4 xiaomao5
#重启服务
[root@xiaomao4 ~]# systemctl restart ceph-radosgw.target
[root@xiaomao4 ~]# systemctl status  ceph-radosgw.target
● ceph-radosgw.target - ceph target allowing to start/stop all ceph-radosgw@.service instances at onceLoaded: loaded (/usr/lib/systemd/system/ceph-radosgw.target; enabled; vendor preset: enabled)Active: active since Sun 2020-07-12 16:51:15 CST; 6s ago
#查看端口是否修改成功
[root@xiaomao4 ~]# ss -ntl | grep 8081
LISTEN     0      128          *:8081                     *:*
生成自签证书
[root@xiaomao4 ~]# cd /etc/ceph/
[root@xiaomao4 ceph]# mkdir ssl
[root@xiaomao4 ceph]# cd ssl/
#生成用于生成Key的参数
#2048:表示的是生成key的大小,单为字节(bits)
#genrsa:指定了生成了算法使用RSA
[root@xiaomao4 ssl]# openssl  genrsa -out civetweb.key 2048
Generating RSA private key, 2048 bit long modulus
.............................+++
...........................................................................................................................+++
e is 65537 (0x10001)
#-days:天数
#-x509:专用于CA生成自签证书,如果不是自签证书则不需要此项
#-out:证书的保存路径
#-new:表示生成一个新证书签署请求
[root@xiaomao4 ssl]# openssl req -new  -x509 -key civetweb.key -out civetweb.crt -days 3650 -subj "/CN=xiaomao4.ilinux.io"
#合并生成的证书
[root@xiaomao4 ssl]# cat civetweb.key  civetweb.crt  > civetweb.pem

修改配置文件使用自建证书

#在管理节点上修改
[cephadm@xiaomao ceph-cluster]$ cat ceph.conf
#同时提供http和https服务
#ssl_certificate=证书路径
[client.rgw.xiaomao4]
rgw frontends = civetweb port=7480+8443s ssl_certificate=/etc/ceph/ssl/civetweb.pem
#推送配置文件到xiaomao4上
[cephadm@xiaomao ceph-cluster]$ ceph-deploy  --overwrite config push xiaomao xiaomao4 xiaomao5
#重启服务
[root@xiaomao4 ssl]# systemctl restart ceph-radosgw@rgw.xiaomao4
#查看端口是否监听
[root@xiaomao4 ssl]# ss -ntl | grep 8443
LISTEN     0      128          *:8443                     *:*
[root@xiaomao4 ssl]# ss -ntl | grep  7480
LISTEN     0      128          *:7480                     *:*

DNS泛域名解析的支持

#主机名
[root@xiaomao4 etc]# hostname
xiaomao4.ilinux.io
#安装DNS服务
[root@xiaomao4 ~]# yum -y install bind
#修改配置文件
[root@xiaomao4 ~]# vim /etc/named.conf
options {listen-on port 53 { 192.168.146.136; };allow-query     { any; };#允许所有机器访问#下面这些都需要禁用掉#listen-on-v6 port 53 { ::1; };    #dnssec-enable yes;#dnssec-validation yes;#bindkeys-file "/etc/named.root.key";
#编辑局域配置文件
[root@xiaomao4 ~]# vim /etc/named.rfc1912.zones
#在文件末尾添加
zone "ilinux.io" IN {type master;file "ilinux.io.zone";
};
#定义区域解析文件
[root@xiaomao4 ~]# cd /var/named/
[root@xiaomao4 named]# cp named.localhost  ilinux.io.zone
[root@xiaomao4 named]# cat ilinux.io.zone
$TTL 1D
@  IN SOA  ns.ilinux.io. admin.ilinux.io. (0   ; serial1D  ; refresh1H ; retry1W   ; expire3H )    ; minimumIN      NS                ns
ns     IN      A           192.168.146.136
#RGW节点
xiaomao4   IN      A            192.168.146.136
xiaomao5   IN      A            192.168.146.137
#所有*.xiaomao4访问的都定义成xiaomao4的别名
*.xiaomao4 IN      CNAME      xiaomao4
*.xiaomao5 IN      CNAME      xiaomao5
#检查配置文件是否有错
#没有提示就是没有错误
[root@xiaomao4 named]# named-checkconf
#修改权限
[root@xiaomao4 named]# chown :named ilinux.io.zone
#启动服务
[root@xiaomao4 named]# systemctl start named
#查看端口是否监听
[root@xiaomao4 named]# ss -ntl | grep 53
LISTEN     0      10     192.168.146.136:53                       *:*
LISTEN     0      10     127.0.0.1:53                       *:*
#在网卡配置文件那也要把DNS服务给修改了
[root@xiaomao5 ~]# cat /etc/sysconfig/network-scripts/ifcfg-ens33
DNS1=192.168.146.136
#xiaomao5充当客户机
[root@xiaomao5 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
search localdomain
nameserver 192.168.146.136
#安装客户端工具,测试解析是否正常
[root@xiaomao5 ~]# yum -y install  bind-utils
[root@xiaomao5 ~]# host -t A xiaomao4.ilinux.io
xiaomao4.ilinux.io has address 192.168.146.136

编辑Ceph配置文件让服务使用DNS解析

[cephadm@xiaomao ceph-cluster]$ vim ceph.conf
#num_threads:最大线程数
#request_timeout_ms:以毫秒为单位的请求超时时长
[client.rgw.xiaomao4]
rgw frontends = civetweb port=7480+8443s ssl_certificate=/etc/ceph/ssl/civetweb.pem  num_threads=500 request_timeout_ms=60000
rgw_dns_name = xiaomao4.ilinux.io[client.rgw.xiaomao5]
rgw frontends = civetweb port=7480+8443s ssl_certificate=/etc/ceph/ssl/civetweb.pem  num_threads=500 request_timeout_ms=60000
rgw_dns_name = xiaomao5.ilinux.io#推送过去覆盖之前的配置文件
[cephadm@xiaomao ceph-cluster]$ ceph-deploy  --overwrite config push xiaomao   xiaomao4  xiaomao5
#重启服务
[root@xiaomao4 etc]# systemctl restart ceph-radosgw@rgw.xiaomao4
[root@xiaomao5 ~]# systemctl restart ceph-radosgw@rgw.xiaomao5

使用radosgw-admin管理用户

radosgw-admin是整个radosgw服务的命令行管理工具,提供了强大的用户和Bucket等资源的管理功能

#radosgw-admin  user create --uid="用户名" --display-name="用户访问后的提示信息"
[cephadm@xiaomao ceph-cluster]$ radosgw-admin  user create --uid="s3user" --display-name="S3 Testing User"
#下面是生成的信息
"keys": [{......................#其他省略这两个key需要在客户端配置"access_key": "BX44YQKE3E7JN0HZKOL6","secret_key": "l03gUzVwWrDj0mIRYb1BqkjeXoav4vnBpAsRrvTP"}

s3cmd命令行工具的使用

s3cmd是一套基于Amazon S3接口封装的命令行管理工具,可以很方便地实现对Amazon S3资源的访问与管理

#客户端访问测试
[root@xiaomao5 ~]# yum -y install s3cmd
客户端配置
#在客户端配置管理用户的key(密钥)
[root@xiaomao5 ~]# s3cmd --configureEnter new values or accept defaults in brackets with Enter.
Refer to user manual for detailed description of all options.Access key and Secret key are your identifiers for Amazon S3. Leave them empty for using the env variables.
Access Key: BX44YQKE3E7JN0HZKOL6
Secret Key: l03gUzVwWrDj0mIRYb1BqkjeXoav4vnBpAsRrvTP
Default Region [US]:Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: xiaomao4.ilinux.io:7480 #RGW节点Use "%(bucket)s.s3.amazonaws.com" to the target Amazon S3. "%(bucket)s" and "%(location)s" vars can be used
if the target S3 system supports dns based buckets.
DNS-style bucket+hostname:port template for accessing a bucket [%(bucket)s.s3.amazonaws.com]: %(bucket)s.xiaomao4.ilinux.io:7480  #泛域名解析,我这里只使用一个Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password:  #密码加密 默认回车
Path to GPG program [/usr/bin/gpg]: #查看路径是否存在,存在就回车When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP, and can only be proxied with Python 2.7 or newer
Use HTTPS protocol [Yes]: no  #根据自已的情况定On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't connect to S3 directly
HTTP Proxy server name:  #默认回车New settings:Access Key: BX44YQKE3E7JN0HZKOL6Secret Key: l03gUzVwWrDj0mIRYb1BqkjeXoav4vnBpAsRrvTPDefault Region: USS3 Endpoint: xiaomao4.ilinux.io:7480DNS-style bucket+hostname:port template for accessing a bucket: %(bucket)s.xiaomao4.ilinux.io:7480Encryption password:Path to GPG program: /usr/bin/gpg   Use HTTPS protocol: FalseHTTP Proxy server name:HTTP Proxy server port: 0Test access with supplied credentials? [Y/n] y  #默认配置信息
Please wait, attempting to list all buckets...
Success. Your access key and secret key worked fine :-)Now verifying that encryption works...
Not configured. Never mind.Save settings? [y/N] y  #是否保存文件
Configuration saved to '/root/.s3cfg'
使用s3cmd客户端连接并管理S3资源
# 新建Bucket
[root@xiaomao5 ~]# s3cmd mb s3://images
Bucket 's3://images/' created
#查看现有Bucket
[root@xiaomao5 ~]# s3cmd ls
2020-07-12 14:44  s3://images
#开始上传文件
[root@xiaomao5 ~]# s3cmd put  CentOS-7-x86_64-Minimal-1708.iso s3://images/
upload: 'CentOS-7-x86_64-Minimal-1708.iso' -> 's3://images/CentOS-7-x86_64-Minimal-1708.iso'  [part 1 of 53, 15MB] [1 of 1]15728640 of 15728640   100% in    2s     5.29 MB/s  done
#查看是否上传成功
[root@xiaomao5 ~]# s3cmd ls s3://images
2020-07-12 14:56    830472192  s3://images/CentOS-7-x86_64-Minimal-1708.iso
#下载文件
[root@xiaomao5 ~]# cd /tmp/
[root@xiaomao5 tmp]# s3cmd get s3://images/CentOS-7-x86_64-Minimal-1708.iso
download: 's3://images/CentOS-7-x86_64-Minimal-1708.iso' -> './CentOS-7-x86_64-Minimal-1708.iso'  [1 of 1]830472192 of 830472192   100% in   10s    78.04 MB/s  done
[root@xiaomao5 tmp]# ls
CentOS-7-x86_64-Minimal-1708.iso

Ceph 认证授权和RBD块存储、对象存储使用(三)相关推荐

  1. vmware挂载san存储_戏说 块存储 文件存储 对象存储

    用通俗的语言 讲述复杂的技术   块存储   一个块存储设备通常包含一组控制器和一组磁盘阵列 大多数情况下,块存储是通过SAN网络连接服务器.当然,除了SAN网络之外,还有其它多种块存储访问方式,比如 ...

  2. 计算机存储的发展(块存储,文件存储,对象存储)

    块存储 DAS SAN 文件存储 块存储和文件存储异同: 对象存储 1.对象 2.对象存储设备 3.元数据服务器(Metadata Server,MDS) 4.对象存储系统的客户端Client 三者之 ...

  3. 认证+1!腾讯云对象存储COS、存储一体机TStor首批通过信通院云原生存储能力评估

    数字经济发展日新月异,企业走向数字化,诞生了海量的软件和服务.软件行业高数据规模,高自动化.高迭代速度的要求,给传统软件行业带来了挑战.为推动软件架构更加健全,管理更加高效,云原生的概念应运而生,强调 ...

  4. 2020中国云存储(对象存储)服务商TOP20

    云存储,是在云计算基础上延伸和衍生发展出来的新概念,是把数据存放在通常由第三方托管的多台虚拟服务器,一种网上在线存储的模式. 目前云存储主要分为公有云存储和私有云存储. 公有云通常指第三方提供商为用户 ...

  5. Kubernetes 集群基于 Rook 的 Ceph 存储之块设备、文件系统、对象存储

    文章目录 1.Rook & Ceph 介绍 2.环境.软件准备 3.Block 块存储 3.1.创建 CephBlockPool.StorageClass 3.2.验证并测试 4.File S ...

  6. CLUSTER 05: 块存储应用案例 分布式文件系统 对象存储

    一.块存储应用案例 目的: KVM虚拟机调用Ceph镜像作为虚拟机的磁盘. 1.1 准备实验环境 1.1.1 创建磁盘镜像 •  为虚拟机创建磁盘镜像 [root@node1    ~]#    rb ...

  7. 【存储】块存储、文件存储和对象存储的区别?

    目录 简单说明 详细解释 存储分类 01 块存储(提供虚拟磁盘) 02 文件存储 03 对象存储 04 三种存储的区别和对比 分布式块存储.文件存储.对象存储的区别 理解Ceph的三种存储接口:块设备 ...

  8. 块存储、文件存储、对象存储这三者的区别

    参考链接 https://blog.csdn.net/wuxiaobingandbob/article/details/80178502 https://blog.csdn.net/qq_319331 ...

  9. 玩转Docker Ceph集群及对象存储

    为什么80%的码农都做不了架构师?>>>    [编者按]Ceph是一种集高性能.高可靠性和高可扩展性为一体的统一的.分布式的存储系统."统一的"意味着Ceph可 ...

最新文章

  1. “三板斧”式文化价值体系互助协作,打通企业全流程管理模式
  2. 他被导师半夜敲门叫醒:你得诺贝尔奖了!还曾为5G频谱拍卖设计方案,担任谷歌IPO咨询顾问...
  3. MSB3721 命令““C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v9.0\bin\nvcc.exe“ 已退出 返回代码为1
  4. .NetCore中IdentityServer使用nginx-proxy的一次排错经历
  5. AsyncEx - async/await 的辅助库
  6. 数据结构(十二)动态规划
  7. class checklist
  8. Android 10 vs iOS 13,逐鹿手机操作系统之王!
  9. 2009年4月21日 博客更新公告,敬请关注!
  10. 特征选择的工程方法?
  11. 张家界 凤凰 旅游有感
  12. linux应用层读写event,Linux应用层获取鼠标坐标
  13. dzzoffice 任意文件下载漏洞分析
  14. 台式计算机驱动程序未被安装,计算机图形驱动程序安装失败的原因及其解决方法...
  15. jFinal 使用slf4j打印sql及其它相关日志
  16. git pull报错error: You have not concluded your merge (MERGE_HEAD exists).
  17. 北京师范大学新闻与传播专硕考研一战上岸经验分享
  18. 一个移动端开发者,对未来的思考
  19. Java.lang.Character类详解
  20. 云南贵州地区市场知名的调查研究咨询公司

热门文章

  1. ARCGIS中某字段递增赋值,如1,2,3,4,
  2. 软件测试面试中的一些奇葩问题
  3. 中阿博览会搭建丝路新平台 共享中阿企业发展新机遇
  4. 计算机主机清洁方法,正确方法:教您如何清洁台式机灰尘?
  5. 首届.NET Core开源峰会 2018年5月20日
  6. 非专业人士对特斯拉人工智能日的专业解释 ——记@Cosmacelf在Reddit.com上对于AI Day的评价...
  7. 爬虫------爬取搜狗图片
  8. android开机图片修改工具栏,如何以编程方式更改android工具栏中的图标...
  9. oracle rownum order by 爬坑
  10. 魔王语言解释C(可输出)