ceph集群

目录

概念

对象存储

[文件系统存储 ceph-fs](#文件系统存储 ceph-fs)

[块设备存储 RBD](#块设备存储 RBD)

ceph的主要特点

ceph的组件和作用

存储的概念

存储数据和object的关系

object和pg的关系

pg和osd之间的关系

ceph实验

数据流向图

实验操作

架构

步骤


概念

ceph是一个开源的,用c++语言编写的分布式的存储系统,它是用来存储文件数据。分布式由多台物理磁盘组成一个集群,在这个基础之上实现高可用、扩展。

ceph是一个统一的存储系统,同时提供块设备存储,文件系统存储和对象存储三种存储。

对象存储

也就是键值存储,通过接口指令(get put del)和其他的命令向对象存储上传或者下载数据。把数据作为对象,按照一定的逻辑和算法,存储到不同的硬盘上(可以是不同机器上的硬盘,依靠网络来进行互相通信)。

优点:因为使用的是硬盘组,所以它不受目录系统的影响,读写效率高

集群的扩展性很强,支持多副本存储

可以直接通过URL访问文件,所以它简单也好管理

缺点:内容变动比较大的文件不适合作为对象存储,每一次变动都要重新上传

适用于静态图片等等不需要变动的数据

文件系统存储 ceph-fs

ceph集群的存储看做是一个大的分区或者共享文件挂载到客户端的本地。客户端可以在本地直接进行操作。所以速度快,可以存储的数据类型也没有限制。它分为内核态和用户态。

内核态:mount 速度快 读写快

用户态:ceph-fuse 速度慢 读写稍慢

优点:成本低。随便的一台服务器都可以做。一般公司内部都会使用这种方式,比如内网云盘

缺点:读写速度和传输速度相对比较慢

块设备存储 RBD

RBD为kvm虚拟化和云服务(openstack)提供高性能和无限可扩展的存储后端。

优点:磁盘映射,raid和lvm提供磁盘空间,多个主机上的raid或者lvm组成一个逻辑上的raid和lvm,多块磁盘组成这种逻辑空间,可以并发的执行读写操作,IO效率比较高

缺点:对网络传输的要求比较高,windows无法访问linux的RDB操作

ceph的主要特点

1.统一存储:对象存储、块设备存储、文件系统存储

2.crush算法,通过算法来实现数据的寻址,保证数据完整性的校验和一致性。理论上可以支持上千个数据存储节点

3.高扩展性 扩容方便

可靠性比较强 副本,创建数据的时候可以对数据进行副本操作,副本数由管理定义的,副本可以跨主机保存,跨架构、机房、数据中心进行保存

4.高性能 因为是多副本,读写的时候可以做到并行化处理

ceph的组件和作用

1.OSD ceph当中的OSD的守护进程,是集群的基础

主要功能:存储数据,保存副本数据,数据恢复,平衡数据分布

冗余和高可用至少要有3个OSD(三个机器上的三个物理硬盘)

2.Monitors 简称mon Monitors守护进程,用来监视ceph集群的状态,维护ceph集群的健康

OSD的状态也属于Mon的监控范围

ceph存储集群必须要有一个Monitors进程,和两个OSD进程。服务器的数量必须是奇数台

  1. MDS 也是一个守护进程,保存ceph文件系统的元数据(文件的权限、所有者、所在组、修改时间、在ceph集群当中的inode号)

4.managers 也是作为守护进程运行,跟踪集群的运行时间的指标和ceph集群的状态(存储的利用率、性能指标和系统的负载)

5.rados 分布式存储系统,所有的存储功能都是基于RADOS实现的,它的高可用高性能也是基于RADOS来实现的。它是所有一切的底层,也是整个ceph集群的核心

RADOS有两部分组成:OSD和Monitor

6.LIBRADOS :这是一个动态库,用来允许应用程序和RADOS系统进行交互。即通过端口进行通信

存储的概念

存储数据和object的关系

对象、块、文件系统挂载都需要object,存储的数据会被分成多个object,分成之后每一个数据都有一个object id

每个数据object的大小是可以调整的,默认是4M。object是ceph的最小存储单位

object和pg的关系

因为object数量太多了,在一个集群当中,object的数量太多,遍历和寻址速度都很慢,于是就有了pg

PG:就是归置组,placcment group 用来管理object

object通过crush算法映射到PG当中,一个pg里面可以包含多个object

pg和osd之间的关系

pg也是通过crush算法映射到osd当中去存储,如果有3个副本,每个pg会映射到三个OSD当中。副本数决定了pg映射的数量

PG和PGD的关系

pgd是存放pg的排列组合

存储池:pool

ceph的集群进行逻辑划分,设置ceph存储集群的权限,副本数、 pg的数量和算法的规则

pool是由管理员自定义,相当一个独立的空间,每个pool之间是独立的,数据也是隔离的。

原理:先把数据分散,分成每个object,每个object给一个id,每个id保存到osd中,根据object分成不同的pg组,把pg组结合起来保存到存储池,osd看要不要做副本,做副本就复制,有两个就做主从,有3个就两两复制。读数据:先到osd,看osd上的pg,在pg上找object,最后把数据读取。

ceph实验

数据流向图

实验操作

架构

192.168.233.11 admin osd mon mgr 主节点

192.168.233.12 mds osd mon mgr

192.168.233.13 mds osd mon mgr

192.168.233.80 client 客户端

步骤

1.由于它是基于主机名的,所以需要先做主机名映射

所有虚拟机都做映射

vim /etc/hosts

hostnamectl set-hostname nginx1

hostnamectl set-hostname nginx2

hostnamectl set-hostname nginx3

hostnamectl set-hostname test

2.主节点11上操作 做免密通信

ssh-keygen

ssh-copy-id 192.168.233.12

ssh-copy-id 192.168.233.13

ssh-copy-id 192.168.233.80

3.所有虚拟机都操作

bash 复制代码
cat> /etc/yum.repos.d/ceph.repo <<eof
[ceph]
name=ceph
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/x86_64/
gpgcheck=0
[ceph-noarch]
name=ceph-noarch
baseurl=http://mirrors.163.com/ceph/rpm-luminous/el7/noarch/
gpgcheck=0
eof

yum clean all && yum makecache

yum install -y ceph-deploy ceph ceph-radosgw snappy leveldb gdisk python-argparse gperftools-libs

4.回到主节点11(所有操作都必须在ceph目录下)

cd /etc/ceph/

ceph-deploy new nginx1 nginx2 nginx3 配置集群

vim ceph.conf 修改副本数

osd_pool_default_size = 2

ceph-deploy mon create-initial 节点初始化

5.三台虚拟机都添加硬盘

alias scan='echo "- - -" > /sys/class/scsi_host/host0/scan;echo "- - -" > /sys/class/scsi_host/host1/scan;echo "- - -" > /sys/class/scsi_host/host2/scan'

scan

lsblk

分区 全部在主11上配置

ceph-deploy disk zap nginx1 /dev/sdb

ceph-deploy disk zap nginx2 /dev/sdb

ceph-deploy disk zap nginx3 /dev/sdb

把分区添加到osd中

ceph-deploy osd create nginx1 --data /dev/sdb

ceph-deploy osd create nginx2 --data /dev/sdb

ceph-deploy osd create nginx3 --data /dev/sdb

部署mgr

ceph-deploy mgr create nginx1 nginx2 nginx3

ceph -s 查看命令

把密钥文件传给三个节点

ceph-deploy admin nginx1 nginx2 nginx3

每台虚拟机都需要操作(三次)

cd /etc/ceph/

chmod +r ceph.client.admin.keyring

回到主节点11

ceph-deploy mds create nginx2 nginx3

创建存储数据的pool

ceph osd pool create ceph_data 128

注:少于5个osd的情况下,pg的数量等于128

5-10个osd,pg的数量设置为512

10-50个osd,pg的数量设置为4096

pg总数:默认是750个,不能超过750个

存储数据:osd * pg值

存储元数据:2*pg值

pg总数:osd * pg值 + 2*pg值 < 750

计算pg值:pg_num = (osd*100)/副本数

设定pg值的目的,通过管理较少的pg值,ceph获取数据,分配,管理数据的效率越高

pg值越多,数据分布的越多,管理就越复杂

创建存储元数据的pool

ceph osd pool create ceph_metadata 128

创建文件系统 ceph fs

ceph fs new ceph_test1 ceph_metadata ceph_data

ceph fs ls 查看

ceph fs status ceph_test1

内核态挂载

在客户端

mkdir /data1

mount -t ceph 192.168.233.11:6789:/ /data1 -o name=admin,secret=AQCVI7NmGiCvFRAApuuNAWSznO4fQG5Xd0rX5Q==

这个密码在主节点11上 cat ceph.client.admin.keyring 然后复制那个密码

写入100M文件测试

cd /data1

dd if=/dev/zero of=/data1/test1.txt bs=10M count=10

然后回到主节点11

ceph fs status ceph_test1

查看used的有没有变化,有变化才能正常使用

用户态挂载

在客户端

yum -y install ceph-fuse

免密挂载

cd /etc/ceph/

scp root@192.168.233.11:/etc/ceph/ceph.client.admin.keyring /etc/ceph

scp root@192.168.233.11:/etc/ceph/ceph.conf /etc/ceph/

mkdir /data2

ceph-fuse -m 192.168.233.11:6789 /data2

然后在/data1目录下创建文件,/data2也会同步

调整副本数

  1. vim ceph.conf (但是需要重启生效)

  2. 命令:ceph osd pool set cephfs_data size 3

相关推荐
斯普信专业组2 小时前
k8s云原生rook-ceph pvc快照与恢复(下)
ceph·云原生·kubernetes
斯普信专业组9 小时前
k8s云原生rook-ceph pvc快照与恢复(上)
ceph·云原生·kubernetes
斯普信专业组14 小时前
Ceph、K8s、CSI、PVC、PV 深入详解
ceph·容器·kubernetes
mixboot13 天前
Ceph OSD.419 故障分析
ceph·osd
赵成ccc13 天前
离线部署三节点 Ceph 分布式存储
分布式·ceph
赵成ccc13 天前
三节点Ceph分布式存储搭建指南
分布式·ceph
免檒13 天前
windows11下基于docker单机部署ceph集群
ceph·后端·docker·容器
mixboot13 天前
Ceph集群OSD崩溃恢复
ceph·osd
羌俊恩17 天前
分布式存储之Ceph使用指南--部署篇(未完待续)
分布式·ceph·pg·osd·rados
大咖分享课23 天前
深度剖析:Ceph分布式存储系统架构
分布式·ceph·架构·分布式存储