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值

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

相关推荐
小宋10217 分钟前
玩转RabbitMQ声明队列交换机、消息转换器
服务器·分布式·rabbitmq
懒洋洋的华3696 小时前
消息队列-Kafka(概念篇)
分布式·中间件·kafka
March€6 小时前
分布式事务的基本实现
分布式
行走的山峰8 小时前
ceph之osd扩容和缩容
ceph
hejingdong1238 小时前
ceph iscsi网关配置过程遇到的问题和解决办法
ceph·ceph iscsi·iscsi 网关
DieSnowK8 小时前
[Redis][环境配置]详细讲解
数据库·redis·分布式·缓存·环境配置·新手向·详细讲解
行走的山峰8 小时前
ceph简介
ceph
Lill_bin8 小时前
深入理解ElasticSearch集群:架构、高可用性与数据一致性
大数据·分布式·elasticsearch·搜索引擎·zookeeper·架构·全文检索
qingcyb16 小时前
下载Kafka 3.0.0教程
分布式·kafka
杰信步迈入C++之路18 小时前
【RabbitMQ】快速上手
分布式·rabbitmq·ruby