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

相关推荐
三十..17 小时前
Ceph分布式存储核心技术精要与运维实践指南
运维·分布式·ceph
一个行走的民18 小时前
Ceph OSD NUMA 亲和性、Page Cache 跨 NUMA 访问与绑核实践
ceph
潮起鲸落入海19 小时前
ceph集群组件管理 ceph orch 和ceph config命令
ceph
bukeyiwanshui19 小时前
20260529 Ceph 分布式存储 认证和授权管理
ceph
bukeyiwanshui20 小时前
20260528 Ceph 分布式存储 池管理
ceph
一个行走的民20 小时前
CephX 认证机制深度解析
ceph
马立杰1 天前
Ceph 集群手动部署
ceph·分布式存储
bukeyiwanshui1 天前
20260528 Ceph 分布式存储 集群配置
分布式·ceph
qq_356408661 天前
Kubernetes Rook-Ceph 高可用存储部署文档
ceph·容器·kubernetes
潮起鲸落入海1 天前
ceph集群mon 以及池管理
ceph