ceph文件系统

ceph文件系统

1.概述

高扩展,分布式的存储文件系统,旨在提供高性能,高可靠性和高可用的对象存储,块存储,文件系统的存储。使用分布式的算法保证数据的高可用和一致性。

2.ceph的架构

(1)ceph minitor

MON: 负责存储和维护整个ceph的状态信息,主要是集群的成员信息,存储状态和配置数据等等。确保整个集群的一致性,处理选举和状态的更新,集群内部成员的通信。

ceph当中的mon至少要有三个节点,确保高可用。

(2)ceph osd

osd(object storage daemon):ceph存储系统的核心组件,负责存储数据,处理读写请求,数据复制,数据恢复。

  • 每个osd节点管理一个或者多个硬盘
  • 存储实际的数据和副本
  • 处理对象级别的数据操作,读,写,删
  • 在节点故障时,进行数据恢复

(3)ceph mds

mds(metadata server):对ceph的文件系统的元数据进行管理,文件和目录的结构,文件的权限,mds提供元数据服务。

  • 管理集群的元数据信息
  • 处理客户端对文件系统的请求
  • ceph集群中,至少要有一个mds节点

(4)存储池和pg

存储池(pool):ceph存储数据对象的容器,每个存储池可以定义不同的数据冗余的策略(副本数,默认都是3)crush映射规则等等。

  • 存储池是一个逻辑上的概念
  • 管理和组织数据的对象
  • 定义数据的冗余方式,主要靠副本(一般3个副本)
  • 配置crush映射,数据如何在osd之间分布
pg: placement group

pg也是ceph当中的一个逻辑概念,用于数据分布的基本单位,创建存储池时,定义好pg的数量。

pg是由一组对象(object)组成的逻辑集合,每个对象都会映射到一个或者多个pg。

数据分布:数据写入集群,会映射到储存池中的一个pg,crush算法决定将pg分布到哪些osd。在ceph当中,pg和osd的数量是相关的,设置一个合理的pg数,有助于提高集群的性能

3个osd为例

ps数量= (osd数量*100)/存储池的副本数

300/3=100

pg的数量是2的幂值 128 256(取大不取小)

pg的数量一般是osd数量的一百倍,左右。

(5)存储池,pg和osd之间的关系

  • 存储池(pool) 管理数据的基本单位,组成和配置数据的存储和冗余方式
  • pg:存储池中的数据被划分成多个pg,每个pg是数据分布的最小单位,pg负责对象存储的位置,通过crush的算法把数据分布到osd
  • osd是负责存储的数据的基于物理设备的虚拟概念

3.crush算法

crush算法是ceph自带的一种算法。数据分布的算法,把对象分配到集群的osd节点当中。

crush算法使用hash算法来决定数据的存储位置,确保数据是均匀的分布在集群的osd上。

4.实验

集群的架构:

nginx1 192.168.206.60 mon osd admin

nginx2 192.168.206.70 mon osd

nginx3 192.168.206.80 mon osd

ubuntu2 192.168.206.30 客户端

ubuntu自带 ceph17版本----2024 17.2.4新版 依赖于docker python3

换源

vim /etc/apt/source.list

deb http://mirrors.aliyun.com/ubuntu/ jammy main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted

deb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted

deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted

deb http://mirrors.aliyun.com/ubuntu/ jammy universe

deb-src http://mirrors.aliyun.com/ubuntu/ jammy universe

deb http://mirrors.aliyun.com/ubuntu/ jammy-updates universe

deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates universe

deb http://mirrors.aliyun.com/ubuntu/ jammy multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ jammy multiverse

deb http://mirrors.aliyun.com/ubuntu/ jammy-updates multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates multiverse

deb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

deb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse

deb http://mirrors.aliyun.com/ubuntu jammy-security main restricted

deb-src http://mirrors.aliyun.com/ubuntu jammy-security main restricted

deb http://mirrors.aliyun.com/ubuntu jammy-security universe

deb-src http://mirrors.aliyun.com/ubuntu jammy-security universe

deb http://mirrors.aliyun.com/ubuntu jammy-security multiverse

deb-src http://mirrors.aliyun.com/ubuntu jammy-security multiverse

apt-get update

apt-get upgrade

主机名映射

cat >> /etc/hosts <<EOF

192.168.206.60 test1

192.168.206.70 test2

192.168.206.80 test3

192.168.206.30 test4

EOF

安装依赖环境

apt -y install docker.io 客户端不用装

wget https://mirrors.aliyun.com/ceph/debian-17.2.4/pool/main/c/ceph/cephadm_17.2.4-1focal_amd64.deb

apt -y install lvm2

dpkg -i ceph..

apt --fix-broken install #如果安装不成功就用这个修复一下

开启集群的初始化

cephadm bootstrap --mon-ip 192.168.206.60 --cluster-network 192.168.206.0/24 --allow-fqdn-hostname

--mon-ip 指定mon进程的节点地址,先指定admin节点

--cluster-network 集群网络的范围,ceph节点内部通信

--allow-fqdn-hostname 允许ceph集群使用hostname来对节点进行标识。节点之间可以通过主机名进行通信

集群和客户端之间的免密登录

ssh-keygen -t rsa

ssh-copy-id root@192.168.206.70

ssh-copy-id root@192.168.206.80

ssh-copy-id root@192.168.206.30

ssh-copy-id -f -i /etc/ceph/ceph.pub test2

ssh-copy-id -f -i /etc/ceph/ceph.pub test3

添加osd

4台(包括客户端)

apt -y install ceph-common

在60这台上操作:

ceph orch host add test2

ceph orch host add test3

ceph orch ls

ceph orch apply mon 3#修改mon节点的数量

ceph orch apply mon "test1,test2,test3"

ceph orch ls #集群信息完全同步

添加磁盘

在三台上添加磁盘(20G)客户端不需要

#刷新节点

for host in /sys/class/scsi_host/host*/scan; do echo "- - -" | sudo tee $host done

lsblk #看硬盘是否刷新

作为ceph集群的底层硬盘必须满足两个条件

1.容量必须大于5G

2.不能对硬盘做任何分区和文件系统

ceph orch apply osd --all-available-devices #获取可用的节点

ceph orch device ls

ceph orch daemon add osd test2:/dev/sdb

ceph orch daemon add osd test3:/dev/sdb

tail -f /var/log/cepg/ceph.admin

tail -f /var/log/syslog

创建存储池

ceph osd pool create rbd1 128 128 #创建存储池的命令

ceph osd pool rbd1 #存储池的名称

128 pg_num pg的数量

128 pgp_num 的数量

这两个数量要保持一致

ceph osd pool application enable rbd1 rdb

传送配置文件和秘钥文件

scp /etc/ceph/ceph.conf test4:/etc/ceph(从admin节点复制给客户端)

scp /etc/ceph/ceph.client.admin.keyring test4:/etc/ceph

创建镜像,映射并挂载

rbd create myrbd1 --size 2G --pool rbd1 创建镜像的命令(在主节点或者客户端做都行)

rbd map myrbd1 --pool rbd1 (映射只能在客户端)

映射之后,会虚拟出一个逻辑上的硬盘,要创建文件系统,然后挂载才可以使用

mkdir /data1

mount /dev/rdb0 /etc/ceph/data1

cd /data1

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

镜像:RDB存储的基本单位,是一个虚拟的磁盘。

镜像提供了一个虚拟的块设备的接口,可以挂载的方式进行使用。

5.cephfs的存储方式

存储类型:对象存储 云平台存储,基于apt接口,通过http(s)来对目标发起请求的方式获取数据。

块存储:RBD(redis block device)

虚拟化环境,openstack KVM

数据库:性能高,延迟低的块存储方式

优点:

1.支持动态扩展

2.支持快照和克隆

缺点:

rdb的方式必须要创建文件系统

使用方式:在云计算的平台经常被使用,尤其是大规模存储和高性能存储场景

文件系统:cephfs

文件系统分布式存储方式,基于内核实现共享文件的存储方式。

大数据存储,文件服务器(文件共享,企业的镜像服务器)

  • 优点:内核兼容,NFS方式也可以实现,部署速度比较快。跨节点实现。
  • 缺点:配置比rdb的方式复杂,在打击群当中比较复杂

ceph需要两个存储池

  • 数据池cephfs.data,用来存储数据的
  • 元数据池 保存数据的元信息,cephfs.meta

cephfs:数据池 cephfs.data这个存储池是用保存数据的,这是根据osd的数量和总空间的大小,创建cephfs的时候,系统自动分配给cephfs文件系统的大小,按照一般情况是总大小的三分之一。

实验

60主机:

ceph fs volume create cephfs

ceph fs volume ls

ceph fs status cephfs

客户端:

root@test4:/etc/ceph/data1# ceph auth get-key client.admin

AQCGh3dn7AICOBAA/UX9Dn3IyssnZDaKntJ3Bw==root@test4:/etc/ceph/data1#

mkdir data2

#挂载

mount -t ceph 192.168.206.60:6789:/ /data2 -o name=admin,secret=AQCGh3dn7AICOBAA/UX9Dn3IyssnZDaKntJ3Bw==

df -hT

root@test4:/data2# dd if=/dev/zero of=test1.txt bs=10M count=10

记录了10+0 的读入

记录了10+0 的写出

104857600字节(105 MB,100 MiB)已复制,0.36182 s,290 MB/s

60主机:

ceph orch apply nfs nfs-share

ceph osd pool create nfs-pools

ceph osd lspools #查看集群当中所有的存储池

ceph orch apply nfs my-bfs nfs-pools --placement="test2,test3"

#创建nfs的高可用,分别运行在test1 再加入test2和test3

mkdir data3

mount -t ceph 192.168.206.60:6789,192.168.206.70:6789,192.168.206.80:6789:/ /data3 -o name=admin,secret=AQCGh3dn7AICOBAA/UX9Dn3IyssnZDaKntJ3Bw==

nfs的挂载目录和cephfs数据池之间的关系:

通过nfs的挂载方式,依然使用的cephfs.data的数据的空间,文件实际上还是存储在cephfs.data的数据池当中。

6.ceph object storge 对象存储

云计算的后台的存储方式一般都是用对象存储

对象存储:高扩展,处理文件的级别可以达到PB

缺点:如果数据量不是特别巨大,一般不需要改场景

ceph需要使用分布式文件系统的企业一般都是需要存储海量数据,以及保证数据的高可用非常严谨的场景 ceph

ceph的存储方式的数据流向: 存储池 pg osd 创建存储池,分配p8数据按照对象分配给P8 Pg再把数据分配到osd。

ceph df #查看存储的使用情况

ceph osd pool get rdb1 size #查看副本数

相关推荐
2401_878961727 小时前
ceph集群配置
ceph
2401_850410837 小时前
ceph文件系统
ceph
PzZzang219 小时前
ceph文件系统
ceph
qq_448941083 天前
ceph文件系统
ceph
Tomorrow'sThinker4 天前
go语言调用s3接口通过rgw节点创建ceph用户
ceph·go
Al_WAYS7785 天前
搭建开源版Ceph分布式存储
ceph
沉默的八哥5 天前
Ceph对象存储接口的路线
ceph
peter67685 天前
开源存储详解-分布式存储与ceph
ceph
腾科张老师11 天前
什么是Ceph?它的技术特点是什么?部署挑战及解决方案如何?
ceph·计算机·存储