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

这篇具有很好参考价值的文章主要介绍了Ceph原理、部署、存储集群、块存储及对象存储centos7.5。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

​编辑

一、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原理、部署、存储集群、块存储及对象存储centos7.5

一、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组件

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

存放文件系统的元数据

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

Client(ceph-common) ceph客户端

 二、实验环境准备

1、实验拓扑图

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

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

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.准备存储硬盘

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

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

三、部署环境

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 problem
 You 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 #可在各节点查看集群状态

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

2、创建OSD

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

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

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

[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-2dbe52d5b85f
     health HEALTH_OK
     monmap 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,node3
     osdmap e29: 6 osds: 6 up, 6 in
            flags sortbitwise,require_jewel_osds
      pgmap v56: 64 pgs, 1 pools, 0 bytes data, 0 objects
            646 MB used, 91447 MB / 92093 MB avail
                  64 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_WARN
        clock 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访问 
Ceph原理、部署、存储集群、块存储及对象存储centos7.5

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 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.10336b8b4567
	format: 2
	features: layering
	flags: 

 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 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.10366b8b4567
	format: 2
	features: layering
	flags: 

② 扩容容量

[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 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.10336b8b4567
	format: 2
	features: layering
	flags: 

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 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.ac5e6b8b4567
	format: 2
	features: layering
	flags: 
	parent: rbd/image@image-snap1
	overlap: 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 objects
	order 22 (4096 kB objects)
	block_name_prefix: rbd_data.ac5e6b8b4567
	format: 2
	features: layering
	flags: 
#注意,父快照信息没了!(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.环境拓扑

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

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。

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

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.node3
	key: AQA1RtliJfZgERAAZ6OIk0t3HNoduZUzphFZcA==
	caps: [mds] allow
	caps: [mon] allow profile mds
	caps: [osd] allow rwx
osd.0
	key: AQCrtNdijjN8FRAAKyMmodwxijBkwPvt0kJ/dg==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.1
	key: AQC1tNdiIdcWCBAAicO3F16yzjzFs1oW2Qi3dA==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.2
	key: AQDDtNdi0hE6KxAA47mPGZIoSK/NSBEtRAWUMw==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.3
	key: AQDMtNdiz5qYFRAAPGnwulMyg/UN12yERROMUg==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.4
	key: AQDZtNdiMaHfOhAADGDwz6D2WQcpwp0TKHD2HQ==
	caps: [mon] allow profile osd
	caps: [osd] allow *
osd.5
	key: AQDitNdi/NPVJhAAvbydxrLJETsL6MaXBUniCQ==
	caps: [mon] allow profile osd
	caps: [osd] allow *
client.admin
	key: AQC0stdi8PwwIRAAXMPH0nx2Qw/DDcxxRW9V1g==
	caps: [mds] allow *
	caps: [mon] allow *
	caps: [osd] allow *
client.bootstrap-mds
	key: AQC1stdiN9ylBRAA/rhrC0yypFvj5U66ArvIOg==
	caps: [mon] allow profile bootstrap-mds
client.bootstrap-mgr
	key: AQC1stditKOgNxAAvY/YG+HzOMcJyk+7FyhXaQ==
	caps: [mon] allow profile bootstrap-mgr
client.bootstrap-osd
	key: AQC0stdiGaffKBAAIui/DgJg3M2MqO/4FAQ1zQ==
	caps: [mon] allow profile bootstrap-osd
client.bootstrap-rgw
	key: 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 gateway
   Loaded: 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 ago
 Main 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 --configure

Enter 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    #输入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: T4HWA1EIPTRCYKFKE8BA
  Secret Key: acosOFwvPJaK6aoSsZsPZ5HOPATqu40wnmirflrn
  Default Region: US
  S3 Endpoint: 192.168.5.126:8000
  DNS-style bucket+hostname:port template for accessing a bucket: 192.168.5.126:8000
  Encryption password: 
  Path to GPG program: /usr/bin/gpg
  Use HTTPS protocol: False
  HTTP Proxy server name: 
  HTTP Proxy server port: 0

Test access with supplied credentials? [Y/n] n    #输入no

Save 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_bucket
                          DIR  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

⑥ 测试删除功能文章来源地址https://www.toymoban.com/news/detail-418835.html

[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的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch 8.3集群部署(centos7)实战

    【提示】elasticsearch7以上的版本压缩包内自带JDK 本地安装 下载elasticsearch 的rpm包,然后 使用 rpm -ivh elasticsearch #这个命令安装,名字不全# systemctl daemon-reload # 重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,

    2023年04月15日
    浏览(38)
  • 3台Centos7快速部署Kafka集群

    首先,我要说,Kafka 是强依赖于 ZooKeeper 的,所以在设置 Kafka 集群之前,我们首先需要设置一个 ZooKeeper 集群。 部署ZooKeeper需要安装jdk yum install java-1.8.0-openjdk 安装完以后 下面是详细的步骤: 1.1 下载 ZooKeeper: 1.2 解压缩: 1.3 在每台机器上创建 myid 文件,并存放在一个特定的

    2024年02月08日
    浏览(33)
  • centos7.6部署ELK集群(一)之elasticsearch7.7.0集群部署

    32.3. 部署es7.7.0 32.3.1. 下载es(各节点都做) wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.7.0-linux-x86_64.tar.gz 32.3.2. 解压至安装目录(各节点都做) tar -xvf elasticsearch-7.7.0-linux-x86_64.tar.gz -C /vmdata/ 32.3.3. 创建es用户并设置密码(各节点都做) ES 7.x 开始不再允许以任何方

    2023年04月17日
    浏览(31)
  • VMWare中Centos7部署K8S集群

    关于我们要搭建的K8S: Docker版本:docker-ce-19.03.9; K8S版本:1.20.2; 三个节点:master、node1、node2(固定IP); 容器运行时:仍然使用Docker而非Containerd; Pod网络:用Calico替换Flannel实现 Pod 互通,支持更大规模的集群; 集群构建工具:Kubeadm(这个没啥好说的吧); 关于网络配

    2024年02月15日
    浏览(37)
  • nacos - centos7.x环境单机与集群快速部署

    参考官网:https://nacos.io/zh-cn/docs/what-is-nacos.html 官方集群部署手册:https://nacos.io/zh-cn/docs/cluster-mode-quick-start.html 【单机部署】 1.下载 解压到安装目录 下载:wget -c https://github.com/alibaba/nacos/releases/download/2.1.2/nacos-server-2.1.2.tar.gz 解压:tar -zxvf nacos-server-2.1.2.tar.gz -C /opt/app/ 2.初始

    2024年02月09日
    浏览(30)
  • centos7.6部署ELK集群(三)之logstash7.7.0部署

    32.5. 部署logstash7.7.0(在主节点上操作) 32.6.1. 下载logstash7.7.0 Logstash 官方下载地址:https://www.elastic.co/cn/downloads/logstash 32.6.2. 解压至安装目录 tar –xvf logstash-7.7.0.tar.gz -C /vmdata/ 32.6.3. 修改logstash-sample.conf配置文件 以kafka输入,es输出为例 32.6.4. 将logstash安装目录授权给es用户 c

    2023年04月22日
    浏览(40)
  • Centos7 + Hadoop 3.3.4 HA高可用集群部署

    目录 一、集群规划 二、主机环境准备 1、配置主机名 2、配置HOSTS 3、配置内核参数  4、配置Limits  5、关闭防火墙 6、关闭SELINUX 7、修改时区  8、修改中文支持 三、安装JDK 四、创建Hadoop用户 五、安装Zookeeper 1、下载安装 2、配置zoo.cfg 3、配置myid 4、启动/查看/停止服务 六、安

    2024年02月15日
    浏览(28)
  • Centos7 安装部署 Kubernetes(k8s) 高可用集群

    宿主机系统 集群角色 服务器IP 主机名称 容器 centos7.6 master 192.168.2.150 ks-m1 docker centos7.6 master 192.168.2.151 ks-n1 docker centos7.6 master 192.168.2.152 ks-n2 docker 1.1 服务器初始化及网络配置 VMware安装Centos7并初始化网络使外部可以访问** 注意事项:请一定要看完上面这篇文章再执行下面的操

    2024年02月03日
    浏览(48)
  • Kafka3.0.0版本——集群部署(linux环境-centos7)

    三台服务器 服务器名称 服务器ip centos7虚拟机1 192.168.136.27 centos7虚拟机2 192.168.136.28 centos7虚拟机3 192.168.136.29 Zookeeper集群安装参考此博文链接:https://wwwxz.blog.csdn.net/article/details/129280956?spm=1001.2014.3001.5502 3.1、官网下载地址 官网下载地址:http://kafka.apache.org/downloads.html 3.2、下载

    2024年02月04日
    浏览(35)
  • CentOS7使用kubeadm部署k8s-1.28集群

    参考资料:生产环境 记录使用CentOS7.9进行k8s-1.28版本部署,运行时环境使用containerd,网络插件使用calic,集群搭建完成后。搭建NFS共享存储环境,测试运行pod并挂载使用持久卷。 主机名 **IP地址 ** 角色 基础组件 el7-linux-node-01 192.168.240.11 k8s-master kubeadm,kubelet,kubectl,containerd,nf

    2024年04月26日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包