目录

​编辑

一、Ceph概述

1、基础知识

1. 分布式存储定义

2. 常用的分布式文件系统

3. Ceph定义

4. Ceph组件

二、实验环境准备

1、实验拓扑图

2、配置yum源

3、配置SSH无密码连接

4、NTP时间同步

1.NTP服务器配置

2.NTP客户端配置

3.准备存储硬盘

三、部署环境

1、安装部署软件

1.使用node1作为部署主机(可自行选择主机)

2.ceph-deploy命令与子命令都支持--help查看帮助

2、创建目录

四、部署存储集群

1、创建Ceph集群

2、创建OSD

1. 初始化清空磁盘数据(仅node1操作即可)

2. 创建OSD存储空间(仅node1操作即可)

3. 状态查询

4. 清理集群软件以及相关数据(过程中若有不可逆操作,可执行此命令)

5.如何删除OSD

6. 常见错误

五、Ceph块存储

1、概述

1.块存储定义

2、块存储集群

1. 创建镜像

2. 动态调整大小

3. 客户端通过KRBD访问

4. 客户端撤销磁盘映射

5. 删除镜像

六、块存储应用案例

1、创建镜像快照

1. 查看镜像快照与创建

2. 删除客户端写入的测试文件

3. 还原快照

2、创建克隆快照

1.克隆快照(克隆前需要对快照进行保护)

2. 查看克隆镜像与父镜像快照的关系

3. 删除快照

七、分布式文件系统

1、基础知识

1. CephFS定义

2.环境拓扑

2、元数据服务器

1. 元数据定义

2. 部署元数据服务器

3、文件系统服务器

1.创建存储池

2. 创建Ceph文件系统

3. 客户端挂载(客户端需要安装ceph-common)

4. 查看所有用户列表

八、Ceph对象存储

1、概述

1. 对象存储定义

2、对象存储

1. 部署RGW软件包

2. 新建网关实例

3. 修改服务端口

4. 客户端测试

一、Ceph概述

1、基础知识

1. 分布式存储定义

① 分布式是指一种特殊的系统架构,它由一组网络进行通信、为了完成共同的任务而协调工作的计算机节点组成
② 分布式系统是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务
③ 其目的就是利用更多的机器,处理更多的数据

2. 常用的分布式文件系统

Lustre 大规模的,安全可靠的,具备高可用的集群文件系统(sun)
Hadoop 通过计算机设备组成的大型集群上执行分布式应用的框架
FastDFS 开源分布式文件系统;功能包括文件存储,文件同步,文件访问 文件上传,下载等
Ceph 彻底的分布式,没有单点依赖,用C编写,性能较好
GlusterFS 无单点故障问题,支持回收站,模块化堆叠式架构,对文件系统格式有要求

3. Ceph定义

① Ceph是一个分布式存储系统
② 具有高扩展、高可用、高性能的特点
③ Ceph可以提供对象存储、块存储、文件系统存储

④ Ceph可以提供PB级别的存储空间(PB → TB → GB)

- 1024G*1024G=1048576G

⑤ 软件定义存储(Software Defined Storage)作为存储行业的一大发展趋势,已经越来越受到市场的认可

⑥ 帮助文档:

http://docs.ceph.com                http://docs.ceph.org.cn

4. Ceph组件

组件 描述
OSDs(ceph-osd) 存储设备;安装ceph-osd默认三副本,至少3台
Monitors(ceph-mon) 集群监控组件;监控与地图(类似调度器)
RadosGateway(RGW,ceph-radosgw) 对象存储网关
MDSs(ceph-mds)

存放文件系统的元数据

(对象存储和块存储不需要该组件)

Client(ceph-common) ceph客户端

二、实验环境准备

1、实验拓扑图

一台客户端虚拟机、3台存储集群虚拟机(IP可自行规划)

2、配置yum源

 阿里云源地址:centos镜像_centos下载地址_centos安装教程-阿里巴巴开源镜像站 (aliyun.com)

如下,以一台设备为例(剩余节点设备可克隆此设备)

[root@client ~]# rm -rf /etc/yum.repos.d/*                   #删除既有无效的repo
[root@client ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo                #下载ali源
[root@client ~]# vim /etc/yum.repos.d/ceph.repo              #编写ceph源文件
[ceph]
name=ceph
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=cephnoarch
baseurl=http://mirrors.aliyun.com/ceph/rpm-jewel/el7/noarch/
gpgcheck=0
[root@client ~]# yum makecache                               #更新缓存

3、配置SSH无密码连接

[root@client ~]# echo "192.168.5.123  client
> 192.168.5.124  node1
> 192.168.5.125  node2
> 192.168.5.126  node3" >> /etc/hosts    # 修改解析文件"
注意/etc/hosts解析的域名必须与本机主机名一致!!!
[root@client ~]# for i in 192.168.5.12{3,4,5,6}; do   scp /etc/hosts $i:/etc/; done
#将配置好的解析文件同步给另外的设备[root@client ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''  #非交互生成秘钥对
[root@client ~]# for i in 192.168.5.12{3,4,5,6}; do   ssh-copy-id $i; done #拷贝秘钥到各主机

4、NTP时间同步

1.NTP服务器配置

1.使用客户端当做NTP服务器

2.其他所有主机与其同步时间

[root@client ~]# for i in 192.168.5.12{3,4,5,6}; do   ssh $i "yum -y install chrony"; done
#为所有节点设备安装ntp服务
[root@client ~]# vim /etc/chrony.conf   #编写服务器配置文件
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
server ntp1.aliyun.com iburst        #配置服务器地址
# Record the rate at which the system clock gains/losses time.
driftfile /var/lib/chrony/drift# Allow the system clock to be stepped in the first three updates
# if its offset is larger than 1 second.
makestep 1.0 3# Enable kernel synchronization of the real-time clock (RTC).
rtcsync# Enable hardware timestamping on all interfaces that support it.
#hwtimestamp *# Increase the minimum number of selectable sources required to adjust
# the system clock.
#minsources 2# Allow NTP client access from local network.
allow 192.168.5.0/24    #允许此网段访问NTP# Serve time even if not synchronized to a time source.
local stratum 10        #设置NTP的层数量# Specify file containing keys for NTP authentication.
#keyfile /etc/chrony.keys# Specify directory for log files.
logdir /var/log/chrony# Select which information is logged.
#log measurements statistics tracking
[root@client ~]# systemctl enable --now chronyd  #启动NTP并加入开机自启

2.NTP客户端配置

[root@client ~]# for i in 192.168.5.12{4,5,6}; do   ssh $i "sed -i '/^server/ d' /etc/chrony.conf ; sed -i '1i server 192.168.5.123 iburst' /etc/chrony.conf; systemctl enable --now chronyd"; done
#去除无用配置,添加服务器地址,启动并设置开机自启
[root@client ~]# for i in 192.168.5.12{4,5,6}; do   ssh $i "chronyc sources -v | tail -1"; done
#检查客户端是否与服务器连接,^*代表已同步NTP
^* client                       11   7   377    47  +4724ns[  +23us] +/-   52ms
^* client                       11   6    37    54     +6ns[ +548us] +/-   52ms
^* client                       11   6    37    54   +114ns[ -176us] +/-   52ms

3.准备存储硬盘

三、部署环境

1、安装部署软件

1.使用node1作为部署主机(可自行选择主机)

[root@node1 ~]# yum -y install ceph-deploy.noarch    #安装依赖环境

2.ceph-deploy命令与子命令都支持--help查看帮助

[root@node1 ~]# ceph-deploy --help                   

2、创建目录

[root@node1 ~]# mkdir ceph-cluster

四、部署存储集群

1、创建Ceph集群

[root@node1 ~]# ssh-keygen -f /root/.ssh/id_rsa -N ''
[root@node1 ~]# for i in 192.168.5.12{3,4,5,6}; do   ssh-copy-id $i; done #发布秘钥到各主机
[root@node1 ~]# cd ceph-cluster/
[root@node1 ceph-cluster]# for i in node{1..3}; do   ssh $i "yum install -y yum-utils && yum-config-manager --add-repo https://dl.fedoraproject.org/pub/epel/7/x86_64/ && yum install --nogpgcheck -y epel-release && rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-EPEL-7 && rm -f /etc/yum.repos.d/dl.fedoraproject.org*"; done
#为node节点安装依赖包,不执行会出现如下错误
Error: Package: 2:ceph-common-10.2.11-0.el7.x86_64 (ceph)Requires: libbabeltrace-ctf.so.1()(64bit)
Error: Package: 2:ceph-osd-10.2.11-0.el7.x86_64 (ceph)Requires: libleveldb.so.1()(64bit)
Error: Package: 2:ceph-mon-10.2.11-0.el7.x86_64 (ceph)Requires: libleveldb.so.1()(64bit)
Error: Package: 2:librbd1-10.2.11-0.el7.x86_64 (ceph)Requires: liblttng-ust.so.0()(64bit)
Error: Package: 2:ceph-radosgw-10.2.11-0.el7.x86_64 (ceph)Requires: libfcgi.so.0()(64bit)
Error: Package: 2:ceph-base-10.2.11-0.el7.x86_64 (ceph)Requires: liblttng-ust.so.0()(64bit)
Error: Package: 2:librgw2-10.2.11-0.el7.x86_64 (ceph)Requires: libfcgi.so.0()(64bit)
Error: Package: 2:ceph-common-10.2.11-0.el7.x86_64 (ceph)Requires: libbabeltrace.so.1()(64bit)
Error: Package: 2:librados2-10.2.11-0.el7.x86_64 (ceph)Requires: liblttng-ust.so.0()(64bit)You could try using --skip-broken to work around the problemYou could try running: rpm -Va --nofiles --nodigest[root@node1 ceph-cluster]# ceph-deploy new node1 node2 node3    #创建集群配置(所有节点都为mon)
[root@node1 ceph-cluster]# for i in node{1,2,3}; do   ssh $i "yum -y install ceph-mon ceph-osd ceph-mds ceph-radosgw"; done
#给所有节点安装Ceph组件
ceph-mon        #提供mon监控及绘制地图
ceph-osd            #提供osd共享磁盘
ceph-mds            #提供文件系统服共享
ceph-radosgw        #提供对象存储共享[root@node1 ceph-cluster]# ceph-deploy mon create-initial #初始化所有节点mon服务
[root@node1 ceph-cluster]# systemctl status ceph-mon@node1 #可在各节点查看集群状态

2、创建OSD

1. 初始化清空磁盘数据(仅node1操作即可)

注意:磁盘号要和设备内对应,lsblk可以查看

[root@node1 ceph-cluster]# ceph-deploy disk zap node1:sdb node1:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy disk zap node3:sdb node3:sdc

2. 创建OSD存储空间(仅node1操作即可)

[root@node1 ceph-cluster]# ceph-deploy osd create node1:sdb node1:sdc
[root@node1 ceph-cluster]# ceph-deploy osd create node2:sdb node2:sdc
[root@node1 ceph-cluster]# ceph-deploy osd create node3:sdb node3:sdc

3. 状态查询

[root@node1 ceph-cluster]# ceph osd tree                #查看OSD状态
ID WEIGHT  TYPE NAME      UP/DOWN REWEIGHT PRIMARY-AFFINITY
-1 0.08752 root default
-2 0.02917     host node1                                   0 0.01459         osd.0       up  1.00000          1.00000 1 0.01459         osd.1       up  1.00000          1.00000
-3 0.02917     host node2                                   2 0.01459         osd.2       up  1.00000          1.00000 3 0.01459         osd.3       up  1.00000          1.00000
-4 0.02917     host node3                                   4 0.01459         osd.4       up  1.00000          1.00000 5 0.01459         osd.5       up  1.00000          1.00000
[root@node1 ceph-cluster]# ceph -s                    #查询集群状态cluster 85e4b1e5-541a-4c51-9709-2dbe52d5b85fhealth HEALTH_OKmonmap e1: 3 mons at {node1=192.168.5.124:6789/0,node2=192.168.5.125:6789/0,node3=192.168.5.126:6789/0}election epoch 4, quorum 0,1,2 node1,node2,node3osdmap e29: 6 osds: 6 up, 6 inflags sortbitwise,require_jewel_osdspgmap v56: 64 pgs, 1 pools, 0 bytes data, 0 objects646 MB used, 91447 MB / 92093 MB avail64 active+clean

4. 清理集群软件以及相关数据(过程中若有不可逆操作,可执行此命令)

注意,这些操作会删除node1-node3主机的所有ceph软件及配置文件等数据,非必要不要操作!!

'清除Ceph数据'
[root@node1 ceph-cluster]# ceph-deploy  purgedata  node1  node2  node3 '从远程主机中删除Ceph包并清除所有数据'
[root@node1 ceph-cluster]# ceph-deploy  purge  node1  node2  node3

5.如何删除OSD

ceph osd tree
ceph osd out osd.4
ceph osd crush remove osd.4
ceph auth del osd.4
ceph osd rm osd.4
最后要找到对应的主机,umount把osd.4对应的磁盘卸载

6. 常见错误

health: HEALTH_WARNclock skew detected on  node2, node3…
clock skew表示时间不同步,解决办法:请先将所有主机的时间都使用NTP时间同步!!!
Ceph要求所有主机时差不能超过0.05s,否则就会提示WARN。
如果状态还是失败,可以尝试执行如下命令,重启所有ceph服务:
解决方案:
[root@node1 ~]#  systemctl restart ceph.target
如果提示错误信息:[ceph_deploy][ERROR ]RuntimeError: bootstrap-osd keyring
not found; run 'gatherkeys'
解决方案:
[root@node1 ceph-cluster]# ceph-deploy gatherkeys node1 node2 node3查询状态如果还是失败
解决方案:
[root@node1 ceph-cluster]# systemctl restart ceph\*.service ceph\*.target
#在所有节点,或者是失败的节点
如果提示:
[node1][ERROR ] admin_socket: exception getting command descriptions: [Errno 2] No such file or directory
解决方案:
[root@node1 ceph-cluster]# vim ceph.conf  最下面加入行:
public_network = 192.168.5.0/24
[root@host1 ceoh-clu]# ceph-deploy --overwrite-conf config push node1 node2 node3
如果提示:
[ceph_deploy.config][ERROR] RuntimeError:config file /etc/ceph/ceph.conf exists whit different content; use –overwrite-conf to overwirte
解决方案:
[root@node1 ceph-cluster]# ceph-deploy –overwrite-conf mon create-initial
#覆盖远程主机现有的配置文件

五、Ceph块存储

1、概述

1.块存储定义

单机块设备
        - 光盘
        - 磁盘
分布式块存储
        - Ceph
        - Cinder
Ceph块设备也叫做RADOS块设备
        - RADOS  block  device:RBD
RBD驱动已经很好的集成在了Linux内核中
RBD提供了企业功能,如快照、COW克隆等等
RBD还支持内存缓存,从而能够大大提高性能
Linux内核可用直接访问Ceph块存储
KVM可用借助于librbd访问 

2、块存储集群

1. 创建镜像

① 查看存储池(默认有一个rbd池)

[root@node1 ceph-cluster]# ceph osd lspools #查看结果显示,共享池的名称为rbd,这个共享池的编号为0
0 rbd,

② 创建镜像、查看镜像

[root@node1 ceph-cluster]# rbd create demo-image --image-feature layering --size 10G
#创建demo-image镜像,这里的demo-image创建的镜像名称,名称可以为任意字符
[root@node1 ceph-cluster]# rbd create rbd/image --image-feature layering --size 10G
#在rbd池中创建名称为image的镜像(rbd/image),镜像名称可以任意
[root@node1 ceph-cluster]# rbd list    #列出所有镜像
demo-image
image
[root@node1 ceph-cluster]# rbd info demo-image    #查看demo-image这个镜像的详细信息
rbd image 'demo-image':size 10240 MB in 2560 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.10336b8b4567format: 2features: layeringflags:

2. 动态调整大小

① 缩小容量

[root@node1 ceph-cluster]# rbd resize --size 7G image --allow-shrink    #allow(允许),shrink(缩小)
Resizing image: 100% complete...done.
[root@node1 ceph-cluster]# rbd info image
rbd image 'image':size 7168 MB in 1792 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.10366b8b4567format: 2features: layeringflags: 

② 扩容容量

[root@node1 ceph-cluster]# rbd resize --size 15G demo-image    #扩容到15G
Resizing image: 100% complete...done.
[root@node1 ceph-cluster]# rbd info demo-image
rbd image 'demo-image':size 15360 MB in 3840 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.10336b8b4567format: 2features: layeringflags: 

3. 客户端通过KRBD访问

① 客户端需要安装ceph-common软件包

     拷贝配置文件(否则不知道集群在哪)

     拷贝连接秘钥(否则无权限连接)

[root@client ~]# rm -rf /etc/yum.repos.d/ceph.repo
[root@client ~]# yum -y install ceph-common
[root@client ~]# scp 192.168.5.124:/etc/ceph/ceph.conf /etc/ceph/ #拷贝配置文件(否则不知道集群在哪)
[root@client ~]# scp 192.168.5.124:/etc/ceph/ceph.client.admin.keyring /etc/ceph/ #拷贝连接密钥(否则无连接权限)

② 映射镜像到本地磁盘

[root@client ~]# rbd map image    #客户端访问映射服务器的image共享镜像
/dev/rbd0
[root@client ~]# lsblk            #查看结果(会多一块磁盘)rbd0
NAME            MAJ:MIN RM  SIZE RO TYPE MOUNTPOINT
sda               8:0    0   20G  0 disk
├─sda1            8:1    0    1G  0 part /boot
└─sda2            8:2    0   19G  0 part ├─centos-root 253:0    0   17G  0 lvm  /└─centos-swap 253:1    0    2G  0 lvm  [SWAP]
sr0              11:0    1  8.8G  0 rom
rbd0            252:0    0    7G  0 disk
[root@client ~]# rbd showmapped    #查看磁盘名和共享镜像名称的对应关系
id pool image snap device
0  rbd  image -    /dev/rbd0 

③ 客户端格式化、挂载分区

[root@client ~]# mkfs.xfs /dev/rbd0        #格式化,格式为xfs
meta-data=/dev/rbd0              isize=512    agcount=8, agsize=229376 blks=                       sectsz=512   attr=2, projid32bit=1=                       crc=1        finobt=0, sparse=0
data     =                       bsize=4096   blocks=1835008, imaxpct=25=                       sunit=1024   swidth=1024 blks
naming   =version 2              bsize=4096   ascii-ci=0 ftype=1
log      =internal log           bsize=4096   blocks=2560, version=2=                       sectsz=512   sunit=8 blks, lazy-count=1
realtime =none                   extsz=4096   blocks=0, rtextents=0
[root@client ~]# mount /dev/rbd0 /mnt/        #挂载(可以挂载到任意目录)
[root@client ~]# echo "test1" > /mnt/test.txt #测试写入数据
[root@client ~]# cat /mnt/test.txt            #查看数据
test1

4. 客户端撤销磁盘映射

[root@client ~]# umount /mnt       #卸载挂载点
[root@client ~]# rbd showmapped    #查看磁盘名和共享镜像名称的对应关系
id pool image snap device
0  rbd  image -    /dev/rbd0
[root@client ~]# rbd unmap /dev/rbd/rbd/image #撤销磁盘映射,也可以使用镜像名取消映射
[root@client ~]# rbd showmapped

5. 删除镜像

[root@node1 ceph-cluster]# rbd list
demo-image
image
[root@node1 ceph-cluster]# rbd rm image

六、块存储应用案例

1、创建镜像快照

1. 查看镜像快照与创建

[root@node1 ceph-cluster]# rbd snap ls image    #查看某个镜像有没有快照,image是镜像的名称,ls是查看
[root@node1 ceph-cluster]# rbd snap create image --snap image-snap1
#为image镜像创建快照,--snap指定快照名称,快照名称为image-snap1,快照名称可以任意
[root@node1 ceph-cluster]# rbd snap ls image
SNAPID NAME           SIZE 4 image-snap1 7168 MB 

2. 删除客户端写入的测试文件

[root@client ~]# rbd map image             #客户端访问映射服务器的image共享镜像
[root@client ~]# mount /dev/rbd0 /mnt/     #挂载
[root@client ~]# rm -rf /mnt/test.txt      #删除测试文件
[root@client ~]# umount /mnt               #卸载

3. 还原快照

[root@node1 ~]# rbd snap rollback image --snap image-snap1
# rollback是回滚的意思,使用image-snap1快照回滚数据,对image镜像进行回滚数据
Rolling back to snapshot: 100% complete...done.
[root@client ~]# mount /dev/rbd0 /mnt/    #客户端重新挂载分区
[root@client ~]# cat /mnt/test.txt        #查看数据是否被恢复
test1

2、创建克隆快照

1.克隆快照(克隆前需要对快照进行保护)

[root@node1 ~]# rbd snap protect image --snap image-snap1    #保护快照
#image是镜像名称,image-snap1是前面创建的快照(被保护的快照,不可以被删除)
[root@node1 ~]# rbd snap rm image --snap image-snap1         #删除被保护的快照,会失败
rbd: snapshot 'image-snap1' is protected from removal.
2022-07-21 19:53:33.373100 7fcb9614ed80 -1 librbd::Operations: snapshot is protected
[root@node1 ~]# rbd clone image --snap image-snap1 image-clone --image-feature layering
#使用image镜像的快照image-snap1克隆一个新的名称为jacob-clone的镜像,新镜像名称可以任意

2. 查看克隆镜像与父镜像快照的关系

[root@node1 ~]# rbd info image-clone
rbd image 'image-clone':size 7168 MB in 1792 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.ac5e6b8b4567format: 2features: layeringflags: parent: rbd/image@image-snap1overlap: 7168 MB
#克隆镜像的很多数据都来自于快照链(相当于文件的软链接的概念)
#如果希望克隆镜像可以独立工作,就需要将父快照中的数据,全部拷贝一份,但比较耗时!!![root@node1 ~]# rbd flatten image-clone #让新克隆的镜像与快照脱离关系
Image flatten: 100% complete...done.
[root@node1 ~]# rbd info image-clone    #查看镜像信息
rbd image 'image-clone':size 7168 MB in 1792 objectsorder 22 (4096 kB objects)block_name_prefix: rbd_data.ac5e6b8b4567format: 2features: layeringflags:
#注意,父快照信息没了!(parent)

3. 删除快照

[root@node1 ~]# rbd snap unprotect image --snap image-snap1    #取消快照保护
[root@node1 ~]# rbd snap rm image --snap image-snap1           #可以删除快照

七、分布式文件系统

1、基础知识

1. CephFS定义

① 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连
② CephFS使用Ceph集群提供与POSIX兼容的文件系统
③ 允许Linux直接将Ceph存储mount到本地

2.环境拓扑

2、元数据服务器

1. 元数据定义

① 元数据(Metadata)
        - 任何文件系统中的数据分为数据和元数据
        - 数据是指普通文件中的实际数据
        - 而元数据指用来描述一个文件的特征的系统数据
        - 如:访问权限、文件拥有者及文件数据块的分布信息(inode...)等
② 所以CephFS必须有MDSs节点

2. 部署元数据服务器

node3节点安装ceph-mds软件包

[root@node3 ~]# yum -y install ceph-mds

 node1部署节点操作

[root@node1 ~]# cd /root/ceph-cluster/
[root@node1 ceph-cluster]# ceph-deploy mds create node3    #给node3拷贝配置文件,启动mds服务

3、文件系统服务器

1.创建存储池

文件系统需要至少2个池

  - 一个池用于存储数据

- 一个池用于存储元数据

[root@node3 ~]# ceph osd pool create cephfs_data 64
#创建存储池,共享池的名称为cephfs_data,对应有64个PG
pool 'cephfs_data' created
[root@node3 ~]# ceph osd pool create cephfs_metadata 64
#创建存储池,共享池的名称为cephfs_metadata,对应有64个PG
pool 'cephfs_metadata' created
[root@node1 ~]# ceph osd lspools       #查看存储池

PG是一个逻辑概念,没有对应的物质形态,是为了方便管理OSD而设计的概念。

为了方便理解,可以把PG想象成为是目录,可以创建32个目录来存放OSD,也可以创建64个目录来存放OSD。

2. 创建Ceph文件系统

[root@node3 ~]# ceph mds stat
e2:, 1 up:standby
[root@node3 ~]# ceph fs new myfs1 cephfs_metadata cephfs_data
#myfs1是名称,名称可以任意,注意,先写metadata池,再写data池、fs文件系统
#默认,只能创建1个文件系统,多余的会报错
new fs with metadata pool 2 and data pool 1
[root@node3 ~]# ceph fs ls
name: myfs1, metadata pool: cephfs_metadata, data pools: [cephfs_data ]

3. 客户端挂载(客户端需要安装ceph-common)

[root@client ~]# mount -t ceph 192.168.5.124:6789:/ /mnt/ -o name=admin,secret=`awk 'NR==2 {print $3}' /etc/ceph/ceph.client.admin.keyring`
#注意:-t(type)指定文件系统类型,文件系统类型为ceph
# -o(option)指定mount挂载命令的选项,选项包括name账户名和secret密码
# 192.168.5.124为MON节点的IP(不是MDS节点),6789是MON服务的端口号
# admin是用户名,secret是秘钥
# 秘钥可以在/etc/ceph/ceph.client.admin.keyring中

4. 查看所有用户列表

[root@node1 ~]# ceph auth list              #查看所有用户列表
installed auth entries:mds.node3key: AQA1RtliJfZgERAAZ6OIk0t3HNoduZUzphFZcA==caps: [mds] allowcaps: [mon] allow profile mdscaps: [osd] allow rwx
osd.0key: AQCrtNdijjN8FRAAKyMmodwxijBkwPvt0kJ/dg==caps: [mon] allow profile osdcaps: [osd] allow *
osd.1key: AQC1tNdiIdcWCBAAicO3F16yzjzFs1oW2Qi3dA==caps: [mon] allow profile osdcaps: [osd] allow *
osd.2key: AQDDtNdi0hE6KxAA47mPGZIoSK/NSBEtRAWUMw==caps: [mon] allow profile osdcaps: [osd] allow *
osd.3key: AQDMtNdiz5qYFRAAPGnwulMyg/UN12yERROMUg==caps: [mon] allow profile osdcaps: [osd] allow *
osd.4key: AQDZtNdiMaHfOhAADGDwz6D2WQcpwp0TKHD2HQ==caps: [mon] allow profile osdcaps: [osd] allow *
osd.5key: AQDitNdi/NPVJhAAvbydxrLJETsL6MaXBUniCQ==caps: [mon] allow profile osdcaps: [osd] allow *
client.adminkey: AQC0stdi8PwwIRAAXMPH0nx2Qw/DDcxxRW9V1g==caps: [mds] allow *caps: [mon] allow *caps: [osd] allow *
client.bootstrap-mdskey: AQC1stdiN9ylBRAA/rhrC0yypFvj5U66ArvIOg==caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgrkey: AQC1stditKOgNxAAvY/YG+HzOMcJyk+7FyhXaQ==caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osdkey: AQC0stdiGaffKBAAIui/DgJg3M2MqO/4FAQ1zQ==caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgwkey: AQC0stdiM6U/NBAAzkR9kj5piGfk9zAuRkWtfw==caps: [mon] allow profile bootstrap-rgw

八、Ceph对象存储

1、概述

1. 对象存储定义

对象存储

        - 也就是键值存储,通其接口指令,也就是简单的GET、PUT、DEL和其他扩展,向存储服务上传下载数据

        - 对象存储中所有数据都被认为是一个对象,所以,任何数据都可以存入对象存储服务器,如图片、视频、音频等

RGW全称是Rados  Gateway
RGW是Ceph对象存储网关,用于向客户端应用呈现存储界面,提供RESTful  API访问接口

2、对象存储

1. 部署RGW软件包

用户需要通过RGW访问存储集群(node3需要安装ceph-radosgw)

[root@node3 ~]# yum -y install ceph-radosgw

2. 新建网关实例

① 拷贝配置文件,启动一个rgw服务

[root@node1 ceph-cluster]# cd /root/ceph-cluster/        #注意,执行ceph-deploy脚本一定要进入目录执行
[root@node1 ceph-cluster]# ceph-deploy rgw create node3    ##远程mode3启动rgw服务

② 登录node3验证服务是否启动

[root@node3 ~]# ps aux | grep radosgw
root       3394  0.6  0.9 588044 17784 ?        Ssl  21:34   0:00 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node3 --setuser ceph --setgroup ceph
root       3452  0.0  0.0 112704   972 pts/0    R+   21:34   0:00 grep --color=auto radosgw
[root@node3 ~]# systemctl status ceph-radosgw@\*
● ceph-radosgw@rgw.node3.service - Ceph rados gatewayLoaded: loaded (/usr/lib/systemd/system/ceph-radosgw@.service; enabled; vendor preset: disabled)Active: active (running) since Thu 2022-07-21 21:34:10 CST; 10min agoMain PID: 3394 (radosgw)CGroup: /system.slice/system-ceph\x2dradosgw.slice/ceph-radosgw@rgw.node3.service└─3394 /usr/bin/radosgw -f --cluster ceph --name client.rgw.node3 --setuser ceph --setgro...Jul 21 21:34:10 node3 systemd[1]: Started Ceph rados gateway.
Jul 21 21:34:10 node3 systemd[1]: Starting Ceph rados gateway...

3. 修改服务端口

[root@node3 ~]#  vim  /etc/ceph/ceph.conf
[global]
fsid = 85e4b1e5-541a-4c51-9709-2dbe52d5b85f
mon_initial_members = node1, node2, node3
mon_host = 192.168.5.124,192.168.5.125,192.168.5.126
auth_cluster_required = cephx
auth_service_required = cephx
auth_client_required = cephx
[client.rgw.node3]    #增加此处三行
host = node3            #主机名
rgw_frontends = "civetweb port=8000"   #civetweb是RGW内置的一个web服务
[root@node3 ~]# systemctl restart ceph-radosgw@\* #重启对象存储服务

4. 客户端测试

① curl测试

[root@client ~]# curl 192.168.5.126:8000
<?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></ListAllMyBucket

② 使用第三方软件访问

[root@node3 ~]# radosgw-admin user create --uid="testuser" --display-name="First User"
{"user_id": "testuser","display_name": "First User","email": "","suspended": 0,"max_buckets": 1000,"auid": 0,"subusers": [],"keys": [{"user": "testuser","access秘钥_key": "记住访问秘钥","secret安全口令_key": "客户端会使用"}],"swift_keys": [],"caps": [],"op_mask": "read, write, delete","default_placement": "","placement_tags": [],"bucket_quota": {"enabled": false,"max_size_kb": -1,"max_objects": -1},"user_quota": {"enabled": false,"max_size_kb": -1,"max_objects": -1},"temp_url_keys": []
}
#testuser为用户名,access_key和secret_key是账户密钥

③ 客户端安装软件(下载地址:

https://download-ib01.fedoraproject.org/pub/epel/7/x86_64/Packages/s/s3cmd-2.2.0-1.el7.noarch.rpm)

[root@client ~]# 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:                         #输入秘钥
Secret Key:                         #在node3节点可查
Default Region [US]:         #按回车Use "s3.amazonaws.com" for S3 Endpoint and not modify it to the target Amazon S3.
S3 Endpoint [s3.amazonaws.com]: 192.168.5.126:8000    #输入node3的IP及端口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]: 192.168.5.126:8000    #输入node3的IP及端口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    #输入NoOn 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: T4HWA1EIPTRCYKFKE8BASecret Key: acosOFwvPJaK6aoSsZsPZ5HOPATqu40wnmirflrnDefault Region: USS3 Endpoint: 192.168.5.126:8000DNS-style bucket+hostname:port template for accessing a bucket: 192.168.5.126:8000Encryption password: Path to GPG program: /usr/bin/gpgUse HTTPS protocol: FalseHTTP Proxy server name: HTTP Proxy server port: 0Test access with supplied credentials? [Y/n] n    #输入noSave settings? [y/N] y            #输入y保存
Configuration saved to '/root/.s3cfg'

④ 创建存储数据的bucket(类似于存储数据的目录)

[root@client ~]# s3cmd ls
[root@client ~]# s3cmd mb s3://my_bucket
Bucket 's3://my_bucket/' created
[root@client ~]# s3cmd ls
2022-07-22 10:12  s3://my_bucket
[root@client ~]# s3cmd put /var/log/messages s3://my_bucket/log/
upload: '/var/log/messages' -> 's3://my_bucket/log/messages'  [1 of 1]37622 of 37622   100% in    1s    27.47 KB/s  done
[root@client ~]# s3cmd ls s3://my_bucketDIR  s3://my_bucket/log/
[root@client ~]# s3cmd ls s3://my_bucket/log/
2022-07-22 10:13        37622  s3://my_bucket/log/messages

⑤ 测试下载功能

[root@client ~]# s3cmd get s3://my_bucket/log/messages /tmp/
download: 's3://my_bucket/log/messages' -> '/tmp/messages'  [1 of 1]37622 of 37622   100% in    0s     8.64 MB/s  done
[root@client ~]# ls /tmp/
messages

⑥ 测试删除功能

[root@client ~]# s3cmd del s3://my_bucket/log/messages
delete: 's3://my_bucket/log/messages'
[root@client ~]# s3cmd ls s3://my_bucket/log/messages

Ceph原理、部署、存储集群、块存储及对象存储centos7.5相关推荐

  1. Ceph分布式存储实战:从0搭建一个存储集群,并把块设备镜像映射到CentOS 7系统上的步骤

    本文配套视频和笔记: Ceph分布式存储实战(Ceph快速上手) B站视频在线观看链接:[千锋教育]Ceph分布式存储技术教程(进阶到实战) 百度网盘链接:2020全新_Ceph分布式存储技术-进阶到 ...

  2. 通过Charmed Ceph 在 H3C UniServer R4950 G5 服务器上 部署独立的Ubuntu Ceph 存储集群

    摘要 本文档提供了一个独立Ceph集群的构架参考,部署及各种访问方法.本测试在4台H3C UniServer R4950 G5服务器上构建了一个独立的可扩展.可靠和容错的Ceph存储集群.可以同时对外 ...

  3. Openstack云平台脚本部署之Ceph存储集群配置(十四)

    目录 一.简介 二.部署脚本 三.参考文档 四.源码 五.系列文章 一.简介 Openstack的后端存储对接Ceph分布式统一存储,将Glance镜像.Nova虚拟机及快照.Cinder-Volum ...

  4. Ceph 存储集群7-故障排除

    Ceph 仍在积极开发中,所以你可能碰到一些问题,需要评估 Ceph 配置文件.并修改日志和调试选项来纠正它. 一.日志记录和调试 般来说,你应该在运行时增加调试选项来调试问题:也可以把调试选项添加到 ...

  5. Ceph 存储集群5-数据归置

    一.数据归置概览 Ceph 通过 RADOS 集群动态地存储.复制和重新均衡数据对象.很多不同用户因不同目的把对象存储在不同的存储池里,而它们都坐落于无数的 OSD 之上,所以 Ceph 的运营需要些 ...

  6. Ceph 存储集群2-配置:心跳选项、OSD选项、存储池、归置组和 CRUSH 选项

    一.心跳选项 完成基本配置后就可以部署.运行 Ceph 了.执行 ceph health 或 ceph -s 命令时,监视器会报告 Ceph 存储集群的当前状态.监视器通过让各 OSD 自己报告.并接 ...

  7. RADOS:一种可扩展高可用的PB级存储集群(Ceph)

    摘要 基于对象的存储架构已经作为一种新的方法改进存储集群(Storage Clusters)的扩展性而出现.尽管存储节点已经表现的足够只能和自主,但现有的系统仍然将存储节点作为一种被动的设备(pass ...

  8. 初试 Centos7 上 Ceph 存储集群搭建

    https://blog.csdn.net/aixiaoyang168/article/details/78788703 目录 Ceph 介绍     环境.软件准备     Ceph 预检     ...

  9. 1.24版本k8s集群安装部署rook-ceph存储集群

    一.初始花基本环境 1.主机环境信息 系统 主机名 主机IP地址 配置说明 AlmaLinux release 8.6 (Sky Tiger) master01 192.168.3.31 k8s管理节 ...

最新文章

  1. Spring WebClient vs. RestTemplate
  2. 关于IE记录Cookie的问题
  3. ehcache 清除缓存_如何设计一个本地缓存
  4. 【招聘(北京)】北森测评招聘 .NET 架构师、高级工程师
  5. GSM掉话原因(网优的基础知识)
  6. ZABBIX 3.2.7 (源码包)安装部署
  7. IT行业最重要的四件宝--我的实习体会
  8. boost基础——随机数生成器
  9. numpy功能快速查找
  10. c++动态联编与静态联编
  11. 批量WORD转换为PDF
  12. 2dx cound not find libcocos2dcpp.so
  13. win10如何还原计算机名,win10电脑一键还原教程
  14. 小米联系人删除怎么恢复
  15. 估算活动持续时间-规划管理
  16. 静态函数和非静态函数的区别(静态方法和非静态方法)
  17. 【思维导图怎么画】万彩脑图大师教程 | 插入动画图标
  18. 益智游戏网开发之路二(网址yzyx.info)
  19. 用c语言编程阿姆斯特朗数,C语言水仙花数,阿姆斯特朗数
  20. oracle 12c 字符集修改 AL32UTF8 改为 ZHS16GBK

热门文章

  1. 查询存储过程报错TDS协议流无效
  2. Springboot -Shiro整合JWT(注解形式)
  3. C++:建立Cylinder类,有三个double型私有数据成员:半径、高和体积,构造函数传递两个值:半径和高,计算体积。成员函数showVolume()用来显示每个对象的体积。
  4. (LInux)network网卡重启失败原因及解决方法
  5. 阿里面试官问我Mybatis,我怂了吗?
  6. 基于51单片机的水温温度PID算法控制系统proteus仿真原理图PCB
  7. Java冷知识之——魔数(Magic Number)
  8. NoClassDefFoundError: org/apache/poi/poifs/filesystem/FileMagic 或者reflect.InvocationTargetException
  9. 【Git 系列】一个超好用的命令你会用吗?
  10. 【线代】转置、共轭转置