ceph分布式存储系统

ceph是一个开源的,用c++语言编写的分布式的存储系统,存储文件数据。

/dev/sdb 物理磁盘

lvm 逻辑卷,动态扩容

raid 磁盘阵列,动态扩容,高可用

以上都是基于物理意义上的单机的存储系统


ceph分布式由多台物理磁盘组成一个集群,在这个基础之上实现高可用,扩容

1、远程访问

2、多个服务器组成的虚拟的硬盘

3、分布式存储

4、负载均衡和数据同步

ceph是一个统一的存储系统,同时提供块设备存储,文件系统存储和对象存储三种存储

对象存储:

对象存储也就是键值存储,通过接口指令,get put del 和其他的一些命令向对象存储上传或者下载数据

把数据作为对象,按照一定的逻辑和算法,存储到不同的硬盘上(可以是不同机器上的硬盘,依靠网络来进行互相通信)

优点:使用的是硬盘组,不受目录系统的影响,读写效率高

集群的扩展性很强,支持多副本存储

可以直接通过URL访问文件,简单,易管理

缺点:内容变动比较大的文件不适合作为对象存储,每一次变动都要重新上传

静态图片等等不需要变动的数据

(常用)文件存储系统 ceph-fs

ceph集群的存储看作是一个大的分区或者共享文件挂载到客户端的本地,客户端可以在本机直接进行操作,速度块,可以存储的数据类型也没有限制。

内核态和用户态:

mount 内核 速度快,读写快

ceph-fuse 用户态 速度慢,读写稍慢

优点:成本低,随便的一台服务器都可以做。

公司内部都会使用这种方式,如内网的云盘。

缺点:读写速度和传输速度相对比较慢(本地使用不在此列)

块存储RDB:

RDB为kvm虚拟化和云服务(openstack)提供高性能和无限可扩展的存储后端。

磁盘映射,raid和lvm提供磁盘空间,多个主机上的raid或者lvm组成一个逻辑上的raid和lvm

多块磁盘组成这种逻辑空间,可以并行的执行读写操作,IO效率比较高

缺点:对网络传输的要求比较高,windows无法访问linux的RDB操作。

ceph的主要特点:

统一存储 对象 块 文件系统

Crush算法(底层逻辑的核心)实现数据的寻址,数据完整性的校验和一致性,理论上可以支持上千个数据存储节点。

高扩展性 扩容方便

可靠性比较强 副本,创建数据的时候可以对数据进行副本操作,副本数由管理定义的

副本可以跨主机保存,跨架构,跨机房,跨数据中心进行保存

高性能 因为是多副本,读写的时候可以做到并行化处理。

ceph的组件和作用:

1、OSD ceph当中的OSD的守护进程,是集群的基础

主要功能:存储数据,保存副本数据,数据恢复,平衡数据分布。

冗余和高可用至少需要3个OSD(三个机器上的三个物理硬盘)

2、Monitors mon Monitors的守护进程

作用:监视ceph集群的状态,维护ceph集群的健康,OSD的状态也属于mon的监控范围。

ceph存储集群必须至少有一个Monitors进程,和两个OSD进程。

服务器的数量必须是奇数台 3-5

管理节点 mon

osd

osd

3、MDS也是一个守护进程

作用:保存ceph文件系统的元数据(文件的权限,所有者,所在组,修改时间等等,包括在ceph集群当中的inode号)

4、managers也是作为守护进程运行,跟踪集群的运行时间的指标和ceph集群的状态:存储的利用率,性能指标和系统的负载。

5、RADOS(rados):本身也是分布式系统,所有的存储功能都是基于rados实现的,高可用,高性能也是基于rados实现的,他是所有一切的底层,也是整个ceph集群的核心

rados由两部组成:OSD和Monitors

6、LIBRADOS:这是一个动态库,用来允许应用程序和RADOS系统进行交互。

通过端口进行通信。

存储的概念:

存储数据和object的关系:

对象存储,块存储,文件系统挂载,都需要object,存储的数据都会被分成多个object,分成之后每一个数据都有一个object id。

每个数据object的大小是可以调整的,默认是4M

ceph的最小存储单位

object和pg的关系:

在一个集群当中object数量太多,遍历和寻址速度都很慢

PG 就是归置组,placcment group 管理object

object通过CRUSH算法映射到PG当中,一个PG里面可以包含多个object

pg与osd之间的关系:

pg也是通过CRUSH算法映射到osd当中去存储,如果有3个副本,每个pg会映射三个osd当中

PG和PGD的关系:

pgd是存放pg的排列组合

存储池 :pool

ceph的集群进行逻辑划分,设置ceph存储集群的权限,副本数 pg的数量和算法的规则

pool是由管理员自定义,相当于一个独立的空间,每个pool之间是独立的,数据也是隔离的。


实验环节:

服务器 ip地址 功能

test1 192.168.124.10 admin、osd、mon、mgr

test2 192.168.124.20 osd、mds、mon、mgr

test3 192.168.124.30 osd、mds、mon、mgr

客户端

nginx1 192.168.124.40

关闭所有点的防火墙和安全机制

1 [root@test1 ~]# systemctl stop firewalld

2 [root@test1 ~]# setenforce 0

添加主机映射关系

1 vim /etc/hosts

2 192.168.124.10 test1

3 192.168.123.20 test2

4 192.168.124.30 test3

主节点生成密钥队

root@test1 \~\]# ssh-keygen Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:TF7xrNIEndEg75ZKltiuJqo4T9lwaznK7GJvwX3NKag root@test1 The key's randomart image is: +---\[RSA 2048\]----+ \| o.+= \| \| +o+. \| \| . + o \| \| \* \* o \| \| o o o S B \| \| B = \* B \| \| o O . + \| \|+= E.... \| \|+\*Xo o. \| +----\[SHA256\]-----+

将密钥发送到每个从节点

root@test1 \~\]# ssh-copy-id 192.168.124.20 \[root@test1 \~\]# ssh-copy-id 192.168.124.30 \[root@test1 \~\]# ssh-copy-id 192.168.124.40

所有节点安装源

root@test1 \~\]# cat\> /etc/yum.repos.d/ceph.repo \<\ \[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

配置集群:

1 [root@test1 ceph]# cd /etc/ceph/

2 [root@test1 ceph]# ceph-deploy new test1 test2 test3
vim ceph.conf

global

fsid = 82cf375e-6891-4832-b8db-a243138c31ed

mon_initial_members = test1, test2, test3

mon_host = 192.168.124.10,192.168.124.20,192.168.124.30

auth_cluster_required = cephx

auth_service_required = cephx

auth_client_required = cephx

osd_pool_default_size = 2

管理节点初始化

ceph-deploy mon create-initial

查看集群状态

root@test1 ceph\]# ceph -s cluster: id: 82cf375e-6891-4832-b8db-a243138c31ed health: HEALTH_OK services: mon: 3 daemons, quorum test1,test2,test3 mgr: no daemons active osd: 0 osds: 0 up, 0 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 0B used, 0B / 0B avail pgs:

Services: mon: 有3个监视器(mon)守护进程正在运行,显示quorum的节点是test1、test2、test3,这表示监视器集群是正常的。 mgr: 管理器(mgr)没有活动的守护进程,这可能是一个问题。通常情况下,至少应该有一个活跃的mgr进程来收集和显示集群的状态数据。 osd: 没有OSD(对象存储守护进程)在运行。通常情况下,Ceph集群应该至少有一个OSD守护进程来存储数据。

ceph自动分区 接下来需要创建 OSD 了,OSD 是最终数据存储的地方,这里我们准备了3个 OSD 节点。 官方建议为 OSD 及其日志使用独立硬盘或分区作为存储空间,也可以使用目录的方式创建。

1 [root@test1 ceph]# ceph-deploy disk zap test1 /dev/sdb

2 [root@test1 ceph]# ceph-deploy disk zap test2 /dev/sdb

3 [root@test1 ceph]# ceph-deploy disk zap test3 /dev/sdb

查看osd节点的状态

root@test1 ceph\]# ceph-deploy osd list test1 test2 test3

添加mgr服务

ceph-deploy mgr create test1 test2 test3

统一集群配置 用 ceph-deploy 把配置文件和 admin 密钥拷贝到管理节点和 Ceph 节点, 这样你每次执行 Ceph 命令行时就无需指定 monitor 地址和 ceph.client.admin.keyring 了。

管理节点

root@ceph01 ceph\]# ceph-deploy admin test1 test2 test3

集群每一个节点授权

root@test1 ceph\]# chmod +r /etc/ceph/ceph.client.admin.keyring \[root@test2 ceph\]# chmod +r /etc/ceph/ceph.client.admin.keyring \[root@test3 ceph\]# chmod +r /etc/ceph/ceph.client.admin.keyring

添加mds服务 Mds是ceph集群中的元数据服务器,而通常它都不是必须的, 因为只有在使用cephfs的时候才需要它,而目在云计算中用的更广泛的是另外两种存储方式。

Mds虽然是元数据服务器,但是它不负责存储元数据, 元数据也是被切成对象存在各个osd节点中的

在创建CEPH FS时,要至少创建两个POOL,一个用于存放数据,另一个用于存放元数据。 Mds只是负责接受用户的元数据查询请求,然后从osd中把数据取出来映射进自己的内存中供客户访问。 所以mds其实类似一个代理缓存服务器,替osd分担了用户的访问压力

管理节点

root@test1 ceph\]# ceph-deploy mds create test2 test3

查看mds服务状态

root@test11 ceph\]# ceph mds stat , 2 up:standby

查看集群状态

root@test1 ceph\]# ceph -s cluster: id: 82cf375e-6891-4832-b8db-a243138c31ed health: HEALTH_OK services: mon: 3 daemons, quorum test1,test2,test3 mgr: test1(active), standbys: test3, test2 osd: 3 osds: 3 up, 3 in data: pools: 0 pools, 0 pgs objects: 0 objects, 0B usage: 3.01GiB used, 57.0GiB / 60.0GiB avail pgs:

查看文件系统

root@test1 \~\]# ceph fs ls

No filesystems enabled 没有文件系统

首先创建存储池 语法:

root@test1 ceph\]# ceph osd pool create cephfs_data 128 pool 'cephfs_data' created \[root@test1 ceph\]# ceph osd pool create ceph_metadata 128 pool 'ceph_metadata' created

第一个存储数据的pool 第二个存储元数据的pool

ceph osd pool create cephfs date pg_num

少于5个osd的情况下,pg的数量等于128

5-10个osd 512

10-50个osd 4096个

Pg总数:750个,不能超过750个

128 * 3= 384个

750-384= 366

存储元数据也要pg

1282=256

存储数据:

osdpg值

元数据

2pg值

osd pg值+2pg值<750

pg_num=(osd100)/副本数 设定pg值的目的,通过管理较少的pg,ceph获取数据,分配,管理数据的效率越高

pg值越多,数据分布的越多,管理就越复杂。

给创建的2个存储池创建文件系统

root@test1 ceph\]# ceph fs new cephfs ceph_metadata ceph_data new fs with metadata pool 2 and data pool 1 这里创建文件系统名称的时候可以更改cephfs

查看文件系统

root@test1 ceph\]# ceph fs ls name: cephfs, metadata pool: ceph_metadata, data pools: \[cephfs_data

查看mds的状态

root@test1 ceph\]# ceph fs status cephfs cephfs - 0 clients ====== +------+--------+-------+---------------+-------+-------+ \| Rank \| State \| MDS \| Activity \| dns \| inos \| +------+--------+-------+---------------+-------+-------+ \| 0 \| active \| test2 \| Reqs: 0 /s \| 10 \| 12 \| +------+--------+-------+---------------+-------+-------+ +---------------+----------+-------+-------+ \| Pool \| type \| used \| avail \| +---------------+----------+-------+-------+ \| ceph_metadata \| metadata \| 2246 \| 26.9G \| \| cephfs_data \| data \| 0 \| 26.9G \| +---------------+----------+-------+-------+ +-------------+ \| Standby MDS \| +-------------+ \| test3 \| +-------------+ MDS version: ceph version 12.2.13 (584a20eb0237c657dc0567da126be145106aa47e) luminous (stable)

内核驱动的方式挂载文件系统

在client创建挂载点
复制代码
[root@nginx1 ~]# mkdir /data
查看秘钥
复制代码
[root@test1 ceph]# cat ceph.client.admin.keyring
[client.admin]
        key = AQBkHLNmMJQjMxAAcT0Avk2vxSJ667mGTxBRhA==

使用秘钥挂载

复制代码
[root@nginx1 ~]# mount -t ceph 192.168.124.10:6789:/ /data -o name=admin,secret=AQBkHLNmMJQjMxAAcT0Avk2vxSJ667mGTxBRhA==

查看挂载状态

复制代码
[root@nginx1 ~]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   37G  9.6G   27G   27% /
devtmpfs                 2.3G     0  2.3G    0% /dev
tmpfs                    2.3G     0  2.3G    0% /dev/shm
tmpfs                    2.3G   13M  2.3G    1% /run
tmpfs                    2.3G     0  2.3G    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   18G   39M   18G    1% /home
tmpfs                    470M   12K  470M    1% /run/user/42
tmpfs                    470M     0  470M    0% /run/user/0
192.168.124.10:6789:/     27G     0   27G    0% /data

用户空间的方式挂载文件系统

安装用户态挂载的工具

复制代码
[root@nginx1 data]# yum -y install ceph-fuse

挂载

复制代码
[root@nginx1 ceph]# mkdir /data1
[root@nginx1 ceph]# ceph-fuse -m 192.168.124.10:6789 /data1
ceph-fuse[16863]: starting ceph client
2024-08-07 16:04:00.717627 7f18da9c5240 -1 init, newargv = 0x5612f406d260 newargc=9
ceph-fuse[16863]: starting fuse
[root@nginx1 ceph]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
/dev/mapper/centos-root   37G  9.6G   27G   27% /
devtmpfs                 2.3G     0  2.3G    0% /dev
tmpfs                    2.3G     0  2.3G    0% /dev/shm
tmpfs                    2.3G   13M  2.3G    1% /run
tmpfs                    2.3G     0  2.3G    0% /sys/fs/cgroup
/dev/sda1               1014M  179M  836M   18% /boot
/dev/mapper/centos-home   18G   39M   18G    1% /home
tmpfs                    470M   12K  470M    1% /run/user/42
tmpfs                    470M     0  470M    0% /run/user/0
192.168.124.10:6789:/     27G  100M   27G    1% /data
ceph-fuse                 27G  100M   27G    1% /data1

调整副本数,在命令行输入

ceph osd pool get ceph_date size +数字


总结:

Ceph 是一种强大的分布式存储系统,具有诸多显著特点和优势。

首先,它具备高度的可扩展性。能够轻松应对不断增长的数据存储需求,通过添加新的存储节点实现容量和性能的线性扩展。例如,在一个大型数据中心中,随着业务的发展,可以逐步增加 Ceph 存储节点,而不会对现有系统造成太大影响。

其次,Ceph 提供了出色的数据可靠性和容错能力。它通过数据冗余机制,如副本和纠删码,确保数据的安全性和可用性。即便某些存储节点出现故障,数据仍然能够被访问和恢复。

再者,Ceph 支持多种存储接口,包括块存储、文件存储和对象存储。这使得它能够满足不同应用场景的需求,如虚拟机存储、大数据存储等。

在性能方面,Ceph 经过优化可以提供较好的读写性能。通过合理的配置和调整,能够适应高并发的数据访问请求。

然而,Ceph 也存在一些挑战。其部署和管理相对复杂,需要一定的技术知识和经验。同时,对硬件资源的要求较高,需要进行精心的规划和配置。

总之,Ceph 是一款功能强大但具有一定复杂性的分布式存储系统,在大规模数据存储领域具有广泛的应用前景。

相关推荐
小江的记录本1 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
半桶水专家5 小时前
Kafka 性能瓶颈 → JMX 指标对照表
分布式·kafka
殷紫川6 小时前
别再乱用了!幂等处理与分布式锁,90% 开发者都踩过的坑与正确落地姿势
分布式·架构
Jack_David10 小时前
Kafka批量消息发送
java·分布式·kafka
泡沫·10 小时前
CEPH的基本认识
ceph
wanhengidc10 小时前
服务器托管对企业的作用
大数据·运维·服务器·分布式·智能手机
Code知行合壹10 小时前
Spark使用总结
大数据·分布式·spark
Swift社区10 小时前
分布式能力不是功能,而是一种架构约束
分布式·架构
0xDevNull11 小时前
Apache Kafka 完全指南
分布式·kafka
zb2006412012 小时前
RabbitMQ 客户端 连接、发送、接收处理消息
分布式·rabbitmq·ruby