当前位置: 首页 > news >正文

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 <<eof

> [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:
 

 Health Status: 集群的健康状态显示为 HEALTH_OK,这通常表示集群的整体状态是正常的。然而,这并不意味着所有组件都正常运行。

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值

osdpg值+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 是一款功能强大但具有一定复杂性的分布式存储系统,在大规模数据存储领域具有广泛的应用前景。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 多头注意力用单元矩阵实现以及原因
  • SO_REUSEADDR 和 SO_REUSEPORT 的区别
  • WEB渗透-未授权访问篇
  • 图像处理案例03
  • 深度学习与图像修复:ADetailer插件在Stable Diffusion中的应用
  • 【JavaEE初阶】JUC(java.uitl.concurrent)的常见类
  • Java Server-Sent Event 服务端发送事件
  • [FSCTF 2023]细狗2.0
  • 力扣热题100_二叉树_94_二叉树的中序遍历
  • C语言中常用的函数
  • python自动化笔记:excel文件处理及日志收集
  • 列式数据库(HBase) 中实现表与表的关联
  • 区块链(Blockchain)
  • 【代码随想录】长度最小的子数组——滑动窗口
  • 第二十一节、敌人追击状态的转换
  • 【node学习】协程
  • Akka系列(七):Actor持久化之Akka persistence
  • CSS实用技巧
  • flask接收请求并推入栈
  • Invalidate和postInvalidate的区别
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Linux编程学习笔记 | Linux多线程学习[2] - 线程的同步
  • Python 使用 Tornado 框架实现 WebHook 自动部署 Git 项目
  • React-flux杂记
  • 不发不行!Netty集成文字图片聊天室外加TCP/IP软硬件通信
  • 不上全站https的网站你们就等着被恶心死吧
  • 等保2.0 | 几维安全发布等保检测、等保加固专版 加速企业等保合规
  • 计算机常识 - 收藏集 - 掘金
  • 蓝海存储开关机注意事项总结
  • 前端 CSS : 5# 纯 CSS 实现24小时超市
  • 前端学习笔记之原型——一张图说明`prototype`和`__proto__`的区别
  • 通过npm或yarn自动生成vue组件
  • 译自由幺半群
  • 由插件封装引出的一丢丢思考
  • 再谈express与koa的对比
  • 新年再起“裁员潮”,“钢铁侠”马斯克要一举裁掉SpaceX 600余名员工 ...
  • ​一文看懂数据清洗:缺失值、异常值和重复值的处理
  • ​油烟净化器电源安全,保障健康餐饮生活
  • #define
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • $forceUpdate()函数
  • (¥1011)-(一千零一拾一元整)输出
  • (2)MFC+openGL单文档框架glFrame
  • (leetcode学习)236. 二叉树的最近公共祖先
  • (Matalb分类预测)GA-BP遗传算法优化BP神经网络的多维分类预测
  • (MTK)java文件添加简单接口并配置相应的SELinux avc 权限笔记2
  • (pojstep1.1.2)2654(直叙式模拟)
  • (PWM呼吸灯)合泰开发板HT66F2390-----点灯大师
  • (二)十分简易快速 自己训练样本 opencv级联lbp分类器 车牌识别
  • (分布式缓存)Redis哨兵
  • (附源码)springboot家庭装修管理系统 毕业设计 613205
  • (附源码)springboot美食分享系统 毕业设计 612231
  • (免费领源码)Java#ssm#MySQL 创意商城03663-计算机毕业设计项目选题推荐
  • (算法)Travel Information Center
  • (转)为C# Windows服务添加安装程序