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