ceph文件系统

发布于:2025-02-10 ⋅ 阅读:(33) ⋅ 点赞:(0)

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 #查看副本数

 


网站公告

今日签到

点亮在社区的每一天
去签到