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

相关推荐
腾科张老师13 分钟前
什么是Ceph?它的技术特点是什么?部署挑战及解决方案如何?
ceph·计算机·存储
活跃的煤矿打工人20 小时前
【星海随笔】删除ceph
linux·服务器·ceph
怡雪~2 天前
k8s使用ceph
ceph·容器·kubernetes
怡雪~3 天前
Kubernetes使用Ceph存储
ceph·容器·kubernetes
学Linux的语莫13 天前
负载均衡,高可用,监控服务搭建总结
linux·服务器·分布式·ceph·lvs
运维小文13 天前
cephFS的使用以及K8S对接cephFS
ceph·云原生·容器·kubernetes·对象存储·cephfs
学Linux的语莫16 天前
ceph集群搭建,ceph块存储,文件存储,对象存储
linux·服务器·分布式·ceph
Rverdoser17 天前
K8S对接ceph的RBD块存储
ceph·容器·kubernetes
学Linux的语莫20 天前
Ceph对象存储
linux·运维·服务器·ceph
q_9721 天前
ceph基本概念
ceph