2025年ceph 部署(ceph部署)

ceph 部署(ceph部署)svg xmlns http www w3 org 2000 svg style display none svg

大家好,我是讯享网,很高兴认识大家。



 <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <path stroke-linecap="round" d="M5,0 0,2.5 5,5z" id="raphael-marker-block" style="-webkit-tap-highlight-color: rgba(0, 0, 0, 0);"></path> </svg> <p><img src="https://i-blog.csdnimg.cn/blog_migrate/80c18bc500a4240c73c4b89061e4c987.png" alt="" /></p> 

讯享网

在之前的章节中,我们介绍了Ceph集群的组件,一个最小的Ceph集群包括Mon、Mgr和Osd三个部分。为了更好地理解Ceph,我建议在进行部署时采取手动方式,这样方便我们深入了解Ceph的底层。今天我们将进行较长的章节讲解,希望您能耐心阅读完(个人建议可以动手实践一次,效果更佳)。因为Ceph官方文档中对该过程进行了过于简单的描述,许多细节都被隐藏了,然而这些细节对于理解Ceph概念至关重要。

在部署之前我们先介绍下Ceph的网络,Ceph集群是划分了两种网络(集群网络)Cluster Network、(公共网络)Public Network

  • Cluster Network: 就是Ceph 集群组件内部通信时使用的网络,也称为存储内网。如mon之间相互通信,osd向mon上报其状态信息,主osd向从osd 复制数据等内部操作。
  • Public Network: Ceph集群中用于客户端访问和管理的网络。它是集群与外部世界(客户端、管理员等)通信的主要通道。也称为存储外网。说简单点就是集群外部客户端访问集群内部时的网络。

总结:集群内部访问走Cluster Network ,集群外访问集群内时走Public Network,集群内外怎么区分了? 集群内部组件有 Mon Mgr OSD Mds 等这些内部组件自身通信就是走Cluster Network ,客户或者运维人员使用ceph命令与集群通信,此时走的就是Public Network

思考1OpenStackCeph作为后端存储时,对Ceph的访问是走哪个网络了? 当我们上传镜像到Ceph存储池时走的是哪个网络了?

做过OpenStack运维的小伙伴们,一定少不了镜像制作和上传,如果后端存储是Ceph时,该网络的流量是怎么走了的呢?

讯享网

此时的流量是先是走了OpenStack的管理网,访问了Glance镜像服务,然后Glance作为客户端走Public 网络访问Ceph集群,将数据存储在后端Ceph集群中。(管理网一般是千兆网络,而Ceph 无论是Public 还是 Cluster 网络一般都是万兆及以上高速网络。)

window镜像动辄10GB的大小,上传一个镜像少则几分钟,多则1个小时,那镜像上传的过程可以发现,瓶颈是在OpenStack管理网上,如果我们传文件时不走OpenStack管理网,就能解决该问题。

  1. 命令创建一个空镜像并记录其uuid .
  2. 通过rbd命令直接将镜像文件传到Ceph后端,然后给其做快照,并打上快照保护的标记.
  3. 设置glance镜像location url 为rbd的路径。

此过程只是在第一步,创建空镜像时使用了OpenStack管理网,后面所有的操作都是走Public 网络。其效率提高了至少10倍。

思考2: Ceph两个网段是必须的吗?

测试环境中是可以将两个网络合并为一个网络,但是生产环境中是强烈不建议这样使用的。

  1. 从隔离角度来说会造成Public 网络流量过高时,影响集群的稳定性,
  2. 从安全的角度,Public网络是非安全网络,而Cluster网络是安全的网络。

此时我们是一个测试环境就简单规划为一个网络

一个Ceph集群至少需要一个Mon和少量OSD,部署一个Mon 需要提前先了解下如下几个概念

  • Unique Identifier: 集群唯一标识符,在集群中显示为fsid, (由于最初的ceph集群主要支持文件系统,所以最初fsid代表文件系统ID,现在ceph集群也支持了块存储和对象存储,但是这个名字确保留下来。文件存储是最先被规划的,相对对象存储和块存储,却是最后生产可用的。)

    讯享网
  • Cluster Name 集群名字,如果不指定默认为ceph,注意如果是多个ceph集群的环境需要指定。
    当一个节点做为客户端要访问两个Ceph集群 cluster1 和 cluster2 时,需要在ceph 命令指定参数
 
  • Monitor Name: Mon名字,默认mon使用主机名为自Mon节点的名字,因此需要做好域名解析。
  • Monitor Map:启动初始monitor需要生成monitor map。monitor映射需要fsid,集群的名字以及一个主机名或IP地址。( 在生活中我们去一个陌生地方会先查地图(map),同理mon第一次初始化和查找同伴时也需要Mon Map)
  • Keyring :Ceph 认证密钥环,用于集群身份认证。Cephx认证的不仅有客户端用户(比如某客户端要想执行命令来操作集群,就要有登录Ceph的密钥),也有Ceph集群的服务器,这是一种特殊的用户类型MON/OSD/MDS。也就是说,Monitor、OSD、MDS都需要账号和密码来登录Ceph系统。因此这里的Keyring既有集群内组件的,也有用于管理的Keyring 。(这一点和K8s集群的认证很类似,都是采用双向认证)

了解上述这些是为了能看懂Ceph的配置文件,但是我们在部署时可以不写配置文件,但是在生产环境中强烈建议是手动编写配置文件

讯享网
ip主机名角色磁盘192.168.200.11mon01mon mgr osdsdb,sdc,sde,sdf
 

检查安装包

检查ceph客户端的版本

讯享网

【注意】安装了ceph 的基础组件包之后,系统默认在目录下生成了一系列的目录如下

而且其属主和属组都是ceph用户。为什么强调这个,在很多利旧的环境中,在清理集群时清理目录要清理这些目录下的文件。如果不清理,或者清理不干净,在ceph多次部署时会产生各种问题,本人在生产环境中就遇见过多次。文件清理不彻底,文件权限不正确的问题。

这里提供一个生产环境中清理ceph集群的命令

 

讯享网
  • fsid 对应集群id
  • mon_initial_member 对应初始化的mon主机名,
  • mon_host 对应其IP地址
  • public_network 和cluster_network 则对应了之前介绍的公共网络和集群网络。

3、生成mon的私钥文件,进行身份验证

上文中提到集群内的组件访问也是需要认证的,Ceph 默认是使用Cephx 协议进行认证,此时分别给monbootstrap-osdclient.admin 来生成私钥文件

  • mon mon 私钥文件,用于mon进行身份认证
  • bootstrap-osd 是当你添加一个新的 OSD 到 Ceph 集群时,需要向集群引导这个 OSD。这个引导过程涉及到向 OSD 分配一个独特的标识符,并为其生成一个密钥以便在集群内进行身份验证。
  • client.admin 用于集群管理员进行管理使用的身份认证。
 

cat /etc/ceph/ceph.client.admin.keyring
查看其结构也很容易理解,key 表示其私钥文件,,表示对mds 拥有了所有的权限,其他同理。

讯享网

4、导入key到mon.keyring 文件中

将client.admin 和bootstrap-osd key,导入到mon的 keyring 文件中。并将keyring 文件复制到/etc/ceph/目录下

 

查看mon此时的keyring 文件,验证client.admin和client.bootstrap-osd keyring 已经导入

讯享网

5 修改权限为ceph

 

6、创建monmap

讯享网

6.1、什么是monmap? monmap是做什么用的?

  • Monitor Map: Ceph 集群中的 Monitors 负责维护集群的状态信息、监控数据等。monmap 包含了 Monitors 的信息,包括它们的主机名、IP地址以及集群的唯一标识(FSID)等。
  • 启动 Monitors: 在 Ceph 集群的启动过程中,Monitors 首先需要从 monmap 中获取集群的初始信息。monmaptool 的这个命令就是为了生成一个初始化的 monmap 文件,以供 Monitors 使用。这个文件会在 Monitors 启动时被加载。
  • 维护集群状态: 一旦 Monitors 启动,它们会使用 monmap 文件来维护集群的状态。Monitors 之间会相互通信,共享集群的状态信息。monmap 中包含的信息帮助 Monitors 确定其他 Monitor 节点的位置,从而进行集群管理和数据的一致性。
  • Monitor 选举: 当一个 Monitor 节点发生故障或新的 Monitor 节点加入集群时,集群需要进行 Monitor 的选举。monmap 包含的信息有助于集群中的 OSD(Object Storage Daemon)和客户端找到 Monitor 节点,并确保选举过程正确进行。

6.2 、怎么验证和查看当前集群的monmap ?

 

6.3 、写错了怎么覆盖写?

讯享网

7 修改ceph 权限

 

8 创建mon01 工作目录

讯享网

9 用monitor map和keyring填充monitor守护程序,生mon01的数据库文件

 

验证

讯享网

【提示】mon 完成之后,即使key误删了,但admin keyring还在,可以使用 查看集群所有的keyring

完成第9步之后,在以systemd的方式拉起mon01的守护进场就算完成了mon的安装,但是在拉其服务之前,我们先介绍下两个概念,副本和纠删码

Ceph存储池在配置有两种分别是 副本池(Replicated Pool)纠删码池(Erasure-coded Pool),这两种类型也很好理解,如果是副本池,其存放是以副本的方式存放的,每份副本其数据是完全一致的,相当于1份数据存多份来冗余。

纠删码池一般Ceph是采用前向纠错码(Forward Error Correction,FEC)
FEC代码将K个chunk(以下称为块)数据进行冗余校验处理,得到了N个块数据。这N个块数据既包含原数据,也包括校验数据。这样就能保证K个块中如果有数据丢失,可以通过N个块中包含的校验数据进行恢复。

具体地说,在N=K+M中,变量K是数据块即原始数量变量M代表防止故障的冗余块的数量;变量N是在纠删码之后创建的块的总数。这种方法保证了Ceph可以访问所有原始数据,可以抵抗任意N–K个故障。例如,在K=10、N=16的配置中,Ceph会将6个冗余块添加到10个基本块K中。在M=N–K(即16–10=6)的配置中,Ceph会将16个块分布在16个OSD中,这样即使6个OSD掉线,也可以从10个块中重建原始文件,以确保不会丢失数据,提高容错能力。

【思考3】生产环境中我们是选副本还是纠删码呢?

性能优先选副本池,容量优先选纠删码。(本质上纠删码就是牺牲部分计算性能换存储容量)

在实际的生产环境中我们的数据都是存储在磁盘中的,磁盘对应 ,磁盘是服务器上的一个组件,服务器对应 而服务器是在机架中存放的,一个机柜中有N个机架,而机柜是属于一个房间的,一个大型的数据中心()可能有N个房间,而每个房间可能在同一个地区,也可以在不同地区。

对应其关系为 1Data Center = NRoom = NRACK = NHost = NOSD

总结:Ceph集群中有很多硬件设备,从上到下可能涉及某些逻辑单元,类似数据中心→设备所在机房→机架→行→服务器→OSD盘等的关系。那么,如何描述这些逻辑单元的关系、

Bucket 专门用于描述以上提到的这些逻辑单元属性,以便将来对这些属性按树状结构进行组织。()() () 组成了ceph的.(混个脸熟即可,将来会重点介绍)

在ceph中使用 就可用查看该视图

 

无论是副本池还是纠删码池,数据都是存储在osd中的,如果是副本池,默认3副本,那这3个osd,怎么选取了?

那我们怎么定义数据冗余级别了,osd_crush_chooseleaf_type 参数则可以定义,其值是一个数字 代表了类型。

讯享网

数字0 代表了其故障域是osd级别,虽然这种说法不严谨但是方便理解。后面我们在学习了Crush算法第二步之后就知道其OSD 是如何通过Bucket 和RuleSet 来选取OSD的,这里我们简单理解就是将3副本分散到3个osd就能满足要求。如果是数字1 表示其冗余级别是host 级别。要在不同的节点上,其他同理。

此实验环境中我们osd都在同一个节点上因此我们将其参数值设置为0
最后ceph.conf 文件修该为如下

最后我们启动mon服务

 

如果ceph状态显示如上图,恭喜你,表示第一个mon已经成功部署了.

mon组件可以说是Ceph最重要的组件了,因此本章节对其每一步操作都做了详细说明,剩下的mgr osd的部署则会简单很多,由于篇幅所限,我们将在下一章节继续。

小讯
上一篇 2025-06-08 19:26
下一篇 2025-05-05 22:34

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/153962.html