当前位置:首页 » 存储配置 » ceph适合虚拟化存储吗

ceph适合虚拟化存储吗

发布时间: 2023-08-07 00:09:50

1. 什么数据存储软件的兼容性比较高

1. Ceph
Ceph是一个强大的存储系统,它在同一个系统中同时提供了对象,块(通过RBD)和文件存储。无论您是希望在虚拟机中使用块设备,还是将非结构化数据存储在对象存储中,Ceph都可以在一个平台上提供所有功能,并且还能获得出色的灵活性。 Ceph中的所有内容都以对象的形式存储,不管原始的数据类型是什么,RADOS(reliable autonomic distributed object store)都会把它们当做对象来进行存储。

RADOS层确保数据始终保持一致状态并且可靠。Ceph会通过数据复制,故障检测和恢复,以及跨群集节点进行数据迁移和重新平衡来实现数据一致性。 Ceph提供了一个符合POSIX的网络文件系统(CephFS),旨在实现高性能,大数据存储以及与传统应用程序的最大兼容。Ceph可以通过各种编程语言或者radosgw(RGW)实现无缝的访问对象存储,(RGW)这是一种REST接口,它与为S3和Swift编写的应用程序兼容。另一方面,Ceph的RADOS块设备(RBD)可以访问在整个存储集群中条带化和复制的块设备映像。

Ceph的特性
独立、开放和统一的平台:将块,对象和文件存储组合到一个平台中,包括最新添加的CephFS

兼容性:您可以使用Ceph 存储对外提供最兼容Amazon Web Services(AWS)S3的对象存储。

精简配置模式:分配存储空间时,只是虚拟分配容量,在跟进使用情况占用实际磁盘空间。这种模式提供了更多的灵活性和磁盘空间利用率。

副本:在Ceph Storage中,所有存储的数据都会自动从一个节点复制到多个其他节点。默认任何时间群集中的都有三份数据。

自我修复:Ceph Monitors会不断监控你的数据集。一旦出现一个副本丢失,Ceph会自动生成一个新副本,以确保始终有三份副本。

高可用:在Ceph Storage中,所有存储的数据会自动从一个节点复制到多个其他的节点。这意味着,任意节点中的数据集被破坏或被意外删除,在其他节点上都有超过两个以上副本可用,保证您的数据具有很高的可用性。

Ceph很强大:您的集群可以用于任何场景。无论您希望存储非结构化数据或为数据提供块存储或提供文件系统,或者希望您的应用程序直接通过librados使用您的存储,而这些都已经集成在一个Ceph平台上了。

可伸缩性:C

2. ScaleIO、VSAN、MFS、Ceph这几种存储方案的区别是什么

ScaleIO:使用弹性聚合软件产品来革新数据存储,该软件产品利用本地磁盘来创建服务器存储区域网络 (SAN)。纯软件方式的基于服务器的存储区域网络 (SAN),将存储和计算资源聚合到一起,形成单层的企业级存储产品。 ScaleIO 存储弹性灵活,可以提供可线性扩展的性能。 其横向扩展服务器 SAN 体系结构可以从几个服务器扩展至数千服务器。
基本适用于全平台。https://community.emc.com/thread/198500
VSAN:VMware Virtual SAN™ 是面向虚拟环境中超聚合的软件定义存储.Virtual SAN 是第一款专为 vSphere 环境设计的策略驱动型存储产品,可帮助用户实现存储调配和管理的简化和优化。 通过使用虚拟机级存储策略,Virtual SAN 可自动将需求与底层存储资源进行动态匹配。借助 Virtual SAN,许多手动存储任务都可以实现自动化,从而提供更加高效和经济实惠的运维模式。对比 ScaleIO,它是仅限于VMware虚拟化平台的。
参考链接:Virtual SAN:软件定义的共享存储 | VMware 中国
MFS 是分布式文件系统,可参考:分布式存储系统MFS -
Ceph是一个 Linux PB 级分布式文件系统。

3. ceph(第一步) 基础架构

ceph 是什么?
ceph 是一种开源存储软件。底层实现了对象存储,并以此为基础对外提供对象存储接口、块存储接口、文件级存储接口。

ceph 结构包含两个部分:

ceph 版本:Nautilus

官网的一张架构图:

对于这张图,一开始没有看懂它想表达什么,后来明白了。如下图:

相关名词解释:

ceph 组件分为两部分:

此部分介绍构成 ceph 集群的基础组件。
其中包含 OSD、Manager、MDS、Monitor。

此部分介绍 ceph 对外提供各种功能的组件。
其中包含:Block Device、Object Storage、Filesystem。

前面两个部分主要介绍了 ceph 的一些组件及对外提供的功能。
这部分主要介绍 ceph 的存储逻辑。

首先,在对象存储中,一切都是扁平化的,并且存储的最小单元为对象(obj)。存储 obj 如下图:

ceph 在对象存储的基础上提供了更加高级的思想。

当对象数量达到了百万级以上,原生的对象存储在索引对象时消耗的性能非常大。ceph 因此引入了 placement group (pg)的概念。一个 pg 就是一组对象的集合。如下图:

obj 和 pg 之间的映射由 ceph client 计算得出。

讨论 pg 时,不得不提的另外一个名词:pgp。
pgp 决定了 pg 和 osd 之间的映射关系。一般将 pgp_num 设置成和 pg_num 一样大小。

这里还有一个名词需要提一下,在 ceph 中会经常见到 crush 算法。简单来说,crush 算法就是指 ceph 中数据如何存储、读取的过程。

由于 ceph 集群面对许多的独立项目,因此 ceph 还引入了 ceph pool 的概念用于划分不同的项目。
ceph pool 是对 ceph 对象的逻辑划分,并不是物理划分。

pg 和 ceph pool 的区别:

像大多数集群软件一样,ceph 也提供了缓存的概念。称之为 Cache Tier(缓存层,在具体使用时有时会称之为缓存池)。
缓存池对用户来说是透明的,因此不会改变用户的原有使用逻辑。以下缓存池的介绍,均为底层逻辑。
在没有缓存池时,ceph client 直接指向存储池。
在添加缓存池后,ceph client 指向缓存池,缓存池再指向存储池。

官方原话:
When pg_num is increased for any pool, every PG of this pool splits into half, but they all remain mapped to their parent OSD.
Until this time, Ceph does not start rebalancing. Now, when you increase the pgp_num value for the same pool, PGs start to migrate from the parent to some other OSD, and cluster rebalancing starts. This is how PGP plays an important role.
By Karan Singh
个人翻译:
当一个池增加 pg 数量时,这个池中的所有 pg 都会变化。但是原 pg 的实际物理存储位置不会改变。
当一个池增加 pgp 的数量时,pg 的实际物理存储位置会发生改变。

首先,截至目前,没有具体查到资料证明以下观点。(基于一致性hash的猜想)

图中出现了一个新词: vosd ,这个是指虚拟 osd。它的数量等于 pgp 的数量,而 pgp 一般又等于 pg。

pgp 的数量就是 vosd 的数量。

引入 pg 可以实现 pool 概念,以及优化碎片管理(这一点十分不确定)。

引入 pgp(vosd),是为了在增加 osd 时可以让数据更加均衡的分布。

如猜想图:
当我们增加池的 pg 数量时,不会改变 vosd,因此原 pg 与 vosd 之间的映射未变,原 pg 的实际物理位置也不会发生变化。只是会影响同一个池中 obj 的分布。
当我们增加池的 pgp 数量时,相当于改变了 vosd,通过 hash 计算出的部分 pg 与 vosd 之间的映射就要发生改变,从而导致 pg 的实际物理位置发生改变。

与一致性hash不同的地方:
一般情况下,一致性hash只有一层虚拟化层,并且虚拟化层是根据物理硬件而变化的。但是ceph却是一种反着来的意思。

当 ceph 增加一个 osd 时,pg 的物理位置也会发生改变。
在该猜想下:
当增加 osd 时,并不会增加 vosd 的数量,原部分 vosd 会映射到新的 osd 上,因此产生一种部分 pg 的实际物理位置发生变化的情况。

创建池时,会分配固定的 pg,以及设置与 pg 一样大小的 pgp。
注意,一般 pg 数量都设置为 2 的次方。

严格意义上,我们无论为池分配多少个 pg 都没有问题。但有时候 pg num 配置小了会报错,配置大了也会报错。这不是因为这么配置不对,是因为有其它的参数在限制我们随意配置 pg num。

比如:
osd 有两个配置,当每个 osd 的 pg num 过少(默认30)时会告警,当每个 osd 的 pg num 过多(默认300)也会告警。

所以,想要入门使用 ceph,还是需要了解许多基础知识才可以。否则,各种意外。

https://docs.ceph.com/docs/master/architecture/

https://ceph.com/pgcalc/

4. 云计算分布式存储是用ceph还是hadoop

云计算的开发需要多种语言共同参与,HADOOP在云计算产品中只是一个底层框架,适合做云盘、分布式计算等底层业务。很少有一种云产品只用一种开发语言解决所有问题的,袜缓语言只是工具,关键是要学会在不同的应用场景下,如何正确选择合适的工具。云产品的框架有很多,比如OpenStack是用Python写的,Hadoop是用Java写的。

Ceph架构简介及其特点

Ceph简介

Ceph是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性。

Ceph项目最早起源于Sage就读博士期间的工作(最早的成果于2004年发表),并随后贡献给开源社区。在经过了数年的发展之后,目前已得到众多云计算厂商的支持并被广泛应用。RedHat及OpenStack都可与Ceph整合以支持虚拟机镜像的后端存储。

Ceph特点

高性能

a.摒弃了传统的集中式存储元数据寻址的方案,采用CRUSH算法,数据分布均衡,并行度高。

b.考虑茄好祥了容灾域的隔离,能够实现各类负载的副本放置规则,例如跨机房、机架感知等。

c.能够支持上千个存储节点的规模,支持TB到PB级的数据。

高可用性

a.副本数可以灵活控制颤搏。

b.支持故障域分隔,数据强一致性。

c.多种故障场景自动进行修复自愈。

d.没有单点故障,自动管理。

高可扩展性

a.去中心化。

b.扩展灵活。

c.随着节点增加而线性增长。

特性丰富

a.支持三种存储接口:块存储、文件存储、对象存储。

b.支持自定义接口,支持多种语言驱动。

Hadoop简介及其特点

Hadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布式底层细节的情况下,开发分布式程序。充分利用集群的威力进行高速运算和存储。Hadoop实现了一个分布式文件系统(HadoopDistributedFileSystem),简称HDFS。

HDFS有高容错性的特点,并且设计用来部署在低廉的(low-cost)硬件上;而且它提供高吞吐量(highthroughput)来访问应用程序的数据,适合那些有着超大数据集(largedataset)的应用程序。HDFS放宽了(relax)POSIX的要求,可以以流的形式访问(streamingaccess)文件系统中的数据。Hadoop的框架最核心的设计就是:HDFS和MapRece。HDFS为海量的数据提供了存储,而MapRece则为海量的数据提供了计算。

云计算的开发语言多样

hadoop和云计算是两回事,HADOOP开发首选JAVA,次选C/C++或者Python云计算就复杂了,不同的应用又不同额选择。很少有一种云产品只用一种开发语言解决所有问题的语言只是工具,关键是要学会在不同的应用场景下,如何正确选择合适的工具。云产品的框架有很多,比如OpenStack是用Python写的,Hadoop是用Java写的。

HADOOP在云计算产品中只是一个底层框架,适合做云盘、分布式计算等底层业务。中间层和上层用什么语言开发取决产品的特性和技术人员的技术特点。

5. CentOS 7部署 Ceph分布式存储架构

随着OpenStack日渐成为开源云计算的标准软件栈,Ceph也已经成为OpenStack的首选后端存储。Ceph是一种为优秀的性能、可靠性和可扩展性而设计的统一的、分布式文件系统。

Ceph是一个开源的分布式文件系统。因为它还支持块存储、对象存储,所以很自然的被用做云计算框架openstack或cloudstack整个存储后端。当然也可以单独作为存储,例如部署一套集群作为对象存储、SAN存储、NAS存储等。

前三台服务器增加一块硬盘/dev/sdb实验, 创建目录并挂载到/var/local/osd{1,2,3};

规范系统主机名添加hosts文件实现集群主机名与主机名之间相互能够解析(host 文件添加主机名不要使用fqdn方式)可用 hostnamectl set-hostname [name] 设置分别打开各节点的 /etc/hosts 文件,加入这四个节点ip与名称的对应关系:

在管理节点使用ssh-keygen 生成ssh keys 发布到各节点

第一步:增加 yum配置文件(各个节点都需要增加yum源) vim /etc/yum.repos.d/ceph.repo

或阿里的ceph源

复制配置文件到其它节点和客户端

在ceph1更新软件源并安装ceph-deploy 管理工具

配置文件的默认副本数从3改成2,这样只有两个osd也能达到 active+clean 状态,添加行 osd_pool_default_size = 2

(如果网络源安装失败,手工安装epel-release 然后安装yum –yinstall cep-release再yum –y install ceph ceph-radosgw)
错误参考: https://blog.csdn.net/yenai2008/article/details/72457463

添加osd节点 (所有osd节点执行)
我们实验准备时已经创建目录/var/local/osd{id}

(用ceph-deploy把配置文件和admin密钥拷贝到所有节点,这样每次执行Ceph命令行时就无需指定monitor地址和ceph.client.admin.keyring了)

以上基本上完成了ceph存储集群的搭建。

其中: <pg_num> = 128 ,
关于创建存储池
确定 pg_num 取值是强制性的,因为不能自动计算。下面是几个常用的值:

随着 OSD 数量的增加,正确的 pg_num 取值变得更加重要,因为它显着地影响着集群的行为、以及出错时的数据持久性(即灾难性事件导致数据丢失的概率)。

创建好存储池后,你就可以用 fs new 命令创建文件系统了
ceph fs new <fs_name> cephfs_metadata cephfs_data
其中: <fs_name> = cephfs 可自定义

在这里想起没在/etc/fstab配置ceph1、ceph2、ceph3的sdb自动挂载。

ceph在开源社区还是比较热门的,但是更多的是应用于云计算的后端存储。所以大多数在生产环境中使用ceph的公司都会有专门的团队对ceph进行二次开发,ceph的运维难度也比较大。但是经过合理的优化之后,ceph的性能和稳定性都是值得期待的。

清理机器上的ceph相关配置

可以参考内容: http://blog.51cto.com/12270625/1887648

6. ceph(第二步) 三节点部署(ceph-deploy)

使用 ceph-deploy 工具部署 ceph 存储集群。

使用虚拟机构建三节点 ceph 存储集群。

全篇使用 root 权限。

虚拟化软件:vmware
虚拟机操作系统:centos 7.6
每台虚拟机配置:2G内存,1块系统盘(50G),2块ceph将使用的硬盘(每块20G)
虚拟机网络:一条虚拟机间互通,并且可以上网的网络即可(NAT)。
总共三台虚拟机:ceph01、ceph02、ceph03

ceph 版本:nautilus
ceph-deploy 版本:2.0.1

当前时间: 2019.10

部署过程整体描述:
首先选出一台机器作为部族神署节点,部署节点负责为机器部署 ceph 软件。这里直接选择 ceph01 作为部署节点。

我这里 ceph01、ceph02、ceph03 对应的地址分别为:
10.10.10.31、10.10.10.32、10.10.10.33

所有机器均关闭掉防火墙。

所有机器均配置 yum 国内加速源:

所有机器均配置 pip 国内加速源:

这里配置的是部署节点到其它机器间的主机解析。

vim /etc/hosts 添加如下内容:

这里配置的是部署节点到其它机器间的免密登录。

注意:以下每行命令执行后都需要输入密码,不能直接全部复制粘贴。

命令参考如下,尽量每个节点都测试一兆拿亏下

所有机器执行如下命令:

注意!当前步骤十分重要。

在 ceph 中读取了 hostname 命令产生的结果。
因此在每个节点上均需修改自己的 hostname。命令参考:

进入到 ceph01 节点上:

按照此方法修改其它节点的 hostname。

主要分两步:
第一步,安装 ceph-deploy
第二步,使用 ceph-deploy 安装 ceph 组件。

该步骤所有命令均在部署节点上执行。

安装 ceph-deploy:

该步骤所有命令均在部署节点上执行。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加:

当前命令执行以后,可以在当前目录下发现许多的 keyring 文件,这是连接其它节点的凭据。以后的 ceph-deploy 命令均在当前目录下执行才可正常使用。

将当前临时文件夹下的配置文件同步到所有节点的 /etc/ceph/ 下

我这个环境有三台虚拟机,每台虚拟机敏橘上有额外2块硬盘用于 ceph 集群,它们是 sdb、sdc。这个要根据自己的环境找到正确的硬盘。

命令参考如下:

其中 /dev/sdb ceph01 ,表示 ceph01 节点上的 /dev/sdb 硬盘。

命令执行完以后,基础的环境就算搭建完成了。可以执行如下命令查看集群的状态:
ceph 健康: ceph health
ceph 集群详细状态:ceph -s
ceph 集群 osd 状态:ceph osd tree

至此,该集群还处于一个基础的状态,并不能正常使用。

接下来需要配置 ceph pool 相关信息,以及安装配置 rgw 从而使用对象存储功能。

vim /opt/ceph-deploy/ceph.conf
在 global 中增加如下:

其中 pg num 需要计算得出,pgp num 与 pg num 保持一致。

粗略的计算方法:
( osd 数量 * 100 ) / 池副本数。

同步配置文件:

vim /opt/ceph-deploy/ceph.conf
增加如下内容:

整体配置如下:

安装 rgw:

至此,我们可以去创建一个 pool,并上传文件测试集群了。

这个时候执行 ceph -s
可以看到集群报了 warn 信息,如下:

这不是因为我们哪里配置有问题,这是 ceph 的某个告警配置。当某个 osd 的 pg 小于 30 时会发出告警。现在可以忽略这个问题。ceph 提供这个配置,可能是担心集群在未来使用中出现 pg 分布不均匀的情况。
参考:
https://docs.ceph.com/docs/master/rados/configuration/pool-pg-config-ref/

查看池列表:ceph osd lspools

ceph 默认的池已经创建一些 pg。为了解决前面的告警,我们需要满足每个 osd 都有超过30个 pg,因此创建一个具有80个 pg 的池。

(此时用 ceph -s 可以看到集群状态又是 HEALTH_OK 了)

命令参考:

可以看到文件已经上传上去了,并且叫 test-object-1

rados get test-object-1 /tmp/test-object-1 -p mytest

可以看到两个文件的内容是一样的,到此,基本的部署及使用均正常了。

在 ceph 中,hostname 是一个非常重要的属性。

hostname 命令只可以临时改变当前主机的主机名,并不会永久生效。

目前已知两种方式会永久影响主机名。

第一种情况,很直观,不再多做介绍。

第二种情况时:

这样的配置,会让通过 10.10.10.31 地址访问进来的连接所识别到的主机名改为 ceph01。

在本环境中,不同的 ceph 节点之间通过 10.10.10.0/24 地址进行通信,所以只需要为该地址配置主机名。

在 ceph 中,如果主机名混乱,会发生什么?
ceph osd tree 这个命令可以让你看到主机名混乱带来的后果:

如果糟糕的事情已经发生了,我们只需要修改好主机名,然后重启机器,一切都会恢复正常:

第一种方式的优先级高于第二种。
因此只需要更改 /etc/hostname 即可。文件内容参考如下:

7. Ceph为什么越来越火国内使用ceph较为成功的存储厂商有哪些

Ceph是当前非常流行的开源分布式存储系统,具有高扩展性、高性能、高可靠性等优点,同时提供块存储服务(rbd)、对象存储服务(rgw)以及文件系统存储服务(cephfs)。目前也是OpenStack的主流后端存储,随着OpenStack在云计算领域的广泛使用,ceph也变得更加炙手可热。国内目前使用ceph搭建分布式存储系统较为成功的企业有x-sky,深圳元核云,上海UCloud等三家企业。

热点内容
滑板鞋脚本视频 发布:2025-02-02 09:48:54 浏览:427
群晖怎么玩安卓模拟器 发布:2025-02-02 09:45:23 浏览:552
三星安卓12彩蛋怎么玩 发布:2025-02-02 09:44:39 浏览:738
电脑显示连接服务器错误 发布:2025-02-02 09:24:10 浏览:531
瑞芯微开发板编译 发布:2025-02-02 09:22:54 浏览:141
linux虚拟机用gcc编译时显示错误 发布:2025-02-02 09:14:01 浏览:227
java驼峰 发布:2025-02-02 09:13:26 浏览:646
魔兽脚本怎么用 发布:2025-02-02 09:10:28 浏览:527
linuxadobe 发布:2025-02-02 09:09:43 浏览:207
sql2000数据库连接 发布:2025-02-02 09:09:43 浏览:721