引言

{pve}统一了您的计算和存储系统,也就是说,您可以使用集群中的相同物理节点同时进行计算(处理虚拟机和容器)和复制存储。传统的计算和存储资源独立存储可以整合到一个单一的超融合设备中。单独的存储网络(SANs)和通过网络附加存储(NAS)的连接将不复存在。通过集成Ceph,一个开源的软件定义存储平台,{pve}具有直接在虚拟机管理程序节点上运行和管理Ceph存储的能力。

Ceph是一个分布式对象存储和文件系统,旨在提供卓越的性能、可靠性和可扩展性。

Ceph在{pve}上的一些优势是:
  • 通过CLI和GUI轻松设置和管理

  • 细粒度配置

  • 快照支持

  • 自愈

  • 可扩展至EB(艾字节)级别

  • 提供块存储、文件系统和对象存储

  • 设置具有不同性能和冗余特性的池化

  • 数据被复制,使其具有容错能力。

  • 运行在普通硬件上

  • 不需要硬件RAID控制器

  • 开源

对于小到中型的部署,可以在你的 {pve} 集群节点上直接安装 Ceph 服务器,以使用 RADOS 块设备(RBD)或 CephFS(见 Ceph RADOS 块设备(RBD))。近期的硬件具备大量的 CPU 功能和 RAM,因此在同一个节点上运行存储服务和虚拟客户端是可行的。

为了简化管理,{pve} 为您提供了本地集成,以便通过内置的网络界面或使用 pveceph 命令行工具,在 {pve} 节点上安装和管理 {ceph} 服务。

术语

Ceph 由多个守护进程组成,用于作为 RBD 存储使用。
  • Ceph监视器(ceph-mon,或MON)

  • Ceph管理器(ceph-mgr或MGS)

  • Ceph元数据服务(ceph-mds,或MDS)

  • Ceph对象存储守护进程(ceph-osd,或OSD)

Tip
我们强烈建议熟悉Ceph脚注:[Ceph简介 {cephdocs-url}/start/intro/],它的架构脚注:[Ceph架构 {cephdocs-url}/architecture/] 和词汇脚注:[Ceph词汇表 {cephdocs-url}/glossary]。

健康Ceph集群的建议

为了构建一个超融合的Proxmox + Ceph集群,你必须至少使用三台(最好是)相同配置的服务器来进行设置。

请同时查阅{cephdocs-url}/start/hardware-recommendations/[Ceph官网]的建议。

Note
下面的推荐应被视为选择硬件的大致指南。因此,根据您的具体需求进行调整仍然至关重要。您应该测试您的设置并持续监控健康状况和性能。
中央处理器

Ceph服务可以分为两类: * 密集的CPU使用,受益于高CPU基本频率和多核心。该类别包括: 对象存储守护进程(OSD)服务 Meta Data Service (MDS) 用于 CephFS * 适中的CPU使用量,不需要多个CPU核心。这些是: 监视(MON)服务 经理(MGR)服务

作为一个简单的经验法则,你应该至少分配一个CPU核心(或线程)给每个Ceph服务,以提供稳定且持久的Ceph性能所需的最低资源。

例如,如果您计划在一个节点上运行一个Ceph监视器、一个Ceph管理器和6个Ceph OSD服务,那么您应该为Ceph保留8个CPU核心,以达到基本和稳定的性能。

请注意,OSD(对象存储守护进程)的CPU使用情况主要取决于磁盘的性能。磁盘可能的IOPS(每秒输入/输出操作次数)越高,OSD服务就能使用越多的CPU资源。对于像NVMe这样的现代企业级SSD磁盘,它们能够持续承受超过100,000的高IOPS负载并保持毫秒级以下的延迟,每个OSD可以使用多个CPU线程,例如,对于性能非常高的磁盘,每个以NVMe为后端的OSD可能会使用四到六个CPU线程。

记忆

尤其是在一个超融合的配置中,内存使用需要仔细规划和监控。除了预测虚拟机和容器的内存使用外,您还必须确保有足够的内存可供Ceph使用,以提供出色和稳定的性能。

作为经验法则,大约 1 TiB 的数据,OSD 会使用 1 GiB 的内存。虽然在正常条件下可能会使用更少,但在恢复、重新平衡或回填等关键操作期间会使用最多。这意味着你应该避免在正常操作时就已经耗尽可用内存,而是应该留有余地以应对故障。

OSD服务本身将使用额外的内存。守护进程的Ceph BlueStore后端默认要求使用3-5 GiB的内存(可调)。

网络

我们推荐至少使用10 Gbps或更高的网络带宽,专门用于Ceph流量。如果没有可用的10+ Gbps交换机,对于三到五个节点的集群来说,一个网状网络设置脚注:[Ceph完全网状网络 {webwiki-url}Full_Mesh_Network_for_Ceph_Server] 也是一个选项。

Important
交通量特别是在恢复期间会干扰同一网络上的其他服务,尤其是对延迟敏感的{pve} corosync集群栈可能会受到影响,导致可能失去集群法定人数。将Ceph流量移至专用且物理隔离的网络,不仅可以避免对corosync的干扰,还可以避免对任何虚拟客户端提供的网络服务的干扰。

为了估算你的带宽需求,你需要考虑到你的磁盘性能。尽管单个HDD可能不会饱和1Gb的连接,但每个节点上的多个HDD OSDs已经可以饱和10Gbps了。如果使用现代NVMe连接的SSD,单个就能饱和10Gbps或更高的带宽。对于这种高性能设置,我们推荐至少使用25Gbps的带宽,甚至可能需要40Gbps或100+Gbps来充分利用底层磁盘的全部性能潜力。

如果不确定,我们推荐对于高性能设置使用三个(物理)独立网络: * 一个非常高带宽(25+ Gbps)的网络,用于Ceph(内部)集群流量。 * 一个高带宽(10+ Gbps)的网络,用于Ceph(公共)服务器和Ceph客户端之间的存储流量。根据您的需要,这也可以用来承载虚拟客户端流量和VM实时迁移流量。 * 一个中等带宽(1 Gbps)专用于对延迟敏感的corosync集群通信。

磁盘

在规划Ceph集群的大小时,考虑恢复时间是非常重要的。特别是在小型集群中,恢复可能需要很长时间。建议您在小型配置中使用SSD而不是HDD以减少恢复时间,从而最小化在恢复期间发生后续故障事件的可能性。

一般来说,相比旋转盘,固态盘将提供更多的IOPS。考虑到成本较高,基于此可能有理由实施基于类的池子分离,见基于类的。加速OSDs的另一种方式是使用更快的磁盘作为日志或DB/写前日志(WAL)设备,参见创建Ceph OSDs。如果一个更快的磁盘被用于多个OSDs,必须选择适当的OSD与WAL / DB(或日志)磁盘之间的平衡,否则更快的磁盘会成为所有链接的OSDs的瓶颈。

除了磁盘类型,Ceph在每个节点拥有均匀大小且均匀分布的磁盘数量时表现最佳。例如,每个节点内配备4块500 GB的磁盘比混合配置一个1 TB和三个250 GB的磁盘更好。

您还需要平衡OSD数量和单个OSD的容量。更大的容量允许您提高存储密度,但这也意味着单个OSD故障时,Ceph需要一次性恢复更多的数据。

避免使用RAID

由于Ceph自行处理数据对象冗余和对磁盘(OSDs)的多重并行写入,通常使用RAID控制器不会提高性能或可用性。相反,Ceph旨在自行处理整个磁盘,中间没有任何抽象层。RAID控制器并不是为Ceph的工作负载设计的,可能会使事情变得复杂,有时甚至会降低性能,因为它们的写入和缓存算法可能会与Ceph的算法相互干扰。

Warning
避免使用RAID控制器。请改用主机总线适配器(HBA)。

初始Ceph安装与配置

使用基于Web的向导

通过使用{pve},您可以享受到一个易于使用的Ceph安装向导的好处。点击您的集群节点之一,并在菜单树中导航至Ceph部分。如果Ceph尚未安装,您将看到一个提示,提供安装服务。

巫师被分成多个部分,每个部分都需要成功完成,才能使用Ceph。

首先,你需要选择你要安装的Ceph版本。优先选择其他节点上的版本,或者如果这是你安装Ceph的第一个节点,则选择最新的版本。

开始安装后,向导程序将从{pve}的Ceph存储库下载并安装所有必需的软件包。

完成安装步骤后,您将需要创建一个配置。这个步骤每个集群只需要进行一次,因为这个配置会通过 {pve} 的集群式配置文件系统 (pmxcfs)自动分发给集群中的所有其他成员。

配置步骤包括以下设置:

  • 公共网络:此网络将用于公共存储通信(例如,对于使用Ceph RBD后端磁盘或CephFS挂载的虚拟机),以及不同Ceph服务之间的通信。这个设置是必需的。+ 强烈建议将您的Ceph流量与{pve}集群通信(corosync)分开,可能还包括您虚拟客户端的前端(公共)网络。否则,Ceph的高带宽IO流量可能会与其他依赖低延迟的服务产生干扰。

  • 集群网络: 指定也分离OSD的复制和心跳流量。此设置是可选的。使用物理分离的网络是推荐的,因为它将减轻Ceph公共网络和虚拟客户机网络的负担,同时也能显著提升Ceph的性能。Ceph集群网络可以在以后配置并移至另一个物理分离的网络。

你还有两个选项被认为是高级的,因此只有在你知道自己在做什么的情况下才应该更改。

  • 副本数量:定义了一个对象被复制的频次。

  • 最小副本数:定义了完成I/O标记所需的最小副本数量。

此外,您需要选择您的第一个监视器节点。这个步骤是必需的。

就这样了。您现在应该在最后一步看到一个成功页面,并获得关于如何继续操作的进一步指导。您的系统现在已经准备好开始使用Ceph了。要开始使用,您需要创建一些额外的监视器OSDs以及至少一个

本章的其余部分将指导您充分利用基于{pve}的Ceph设置。这包括前述的技巧等更多内容,例如CephFS,这是对您的新Ceph集群的有益补充。

命令行界面安装Ceph包

作为网页界面中推荐的{pve} Ceph安装向导的另一种选择,你可以在每个节点上使用以下CLI命令:

pveceph 安装

这将在 /etc/apt/sources.list.d/ceph.list 中设置一个 apt 软件包仓库,并安装所需的软件。

通过CLI初始化Ceph配置

使用 {pve} Ceph 安装向导(推荐)或在一个节点上运行以下命令:

pveceph init --network 10.10.10.0/24

这会在 /etc/pve/ceph.conf 创建一个初始配置,其中为Ceph专用了一个网络。该文件会自动分发到所有的{pve}节点,使用pmxcfs来实现。该命令还会在 /etc/ceph/ceph.conf 创建一个指向该文件的符号链接。因此,您可以简单地运行Ceph命令,无需指定配置文件。

Ceph 监控器

Ceph Monitor (MON) 脚注:[Ceph Monitor {cephdocs-url}/start/intro/] 维护着集群映射的主副本。为了高可用性,你至少需要3个监控节点。如果你使用了安装向导,那么将已经安装了一个监控节点。只要你的集群是小到中等规模的,你就不需要超过3个监控节点。只有真正大型的集群才需要超过这个数量的监控节点。

创建监视器

在每个你想要放置监控器的节点上(推荐三个监控器),通过使用GUI中的’Ceph → Monitor’标签页或运行以下命令来创建一个监控器:

pveceph mon create

摧毁显示器

要通过GUI删除一个Ceph监视器,首先在树视图中选择一个节点,然后转到Ceph → Monitor面板。选择MON并点击Destroy按钮。

要通过CLI移除一个Ceph Monitor,首先连接到运行MON的节点上。然后执行以下命令:

pveceph mon destroy
Note
至少需要三个监视器才能形成法定人数。

Ceph 管理器

管理器守护进程与监视器并行运行。它提供了一个监视集群的接口。自从Ceph luminous版本发布以来,至少需要一个ceph-mgr脚注:[Ceph 管理器 {cephdocs-url}/mgr/] 守护进程。

创建管理者

可以安装多个管理器,但任何给定时间内只有一个管理器处于活动状态。

pveceph mgr create
Note
建议在监视节点上安装Ceph Manager。为了高可用性,请安装多个管理器。

销毁管理器

要通过图形界面删除一个Ceph管理器,首先在树状视图中选择一个节点,然后转到Ceph → Monitor面板。选择管理器,然后点击Destroy按钮。

通过CLI移除一个Ceph监控器时,首先连接到运行管理器的节点。然后执行以下命令:

pveceph mgr destroy
Note
虽然管理器不是硬性依赖,但对于Ceph集群来说至关重要,因为它处理了如PG自动扩展、设备健康监控、遥测等重要功能。

Ceph OSDs

Ceph 对象存储守护进程(Object Storage Daemons, OSD)通过网络存储对象。建议每个物理磁盘使用一个OSD。

创建OSDs

您可以通过{pve}网页界面或使用`pveceph`命令行界面来创建一个OSD。例如:

pveceph osd create /dev/sd[X]
Tip
我们建议配置一个至少包含三个节点和至少12个OSD的Ceph集群,OSD在节点间均匀分布。

如果磁盘之前已经被使用过(例如,用作ZFS或作为OSD),你首先需要清除所有这些用途的痕迹。要移除分区表、引导扇区以及任何其他OSD遗留的内容,你可以使用以下命令:

ceph-volume lvm zap /dev/sd[X] --destroy
Warning
上述命令将销毁磁盘上的所有数据!
Ceph Bluestore

从Ceph Kraken版本开始,引入了一种新的Ceph OSD存储类型,名为Bluestore [1]。从Ceph Luminous版本开始,创建OSDs时这是默认设置。

pveceph osd create /dev/sd[X]
Block.db 和 block.wal

如果你想为你的OSD使用独立的数据库/写前日志设备,你可以通过'-db_dev’和'-wal_dev’选项来指定它。如果不单独指定,写前日志将和数据库放置在一起。

pveceph osd create /dev/sd[X] -db_dev /dev/sd[Y] -wal_dev /dev/sd[Z]

您可以分别使用'-db_size’和'-wal_size’参数直接选择它们的大小。如果没有提供这些参数,将按顺序使用以下值:

  • ''bluestore_block_{db,wal}_size 来自 Ceph 配置…​''

    • …​ 数据库,部分 osd

    • …​ 数据库,部分 global

    • …​ 文件,部分 osd

    • …​ 文件,部分 global

  • OSD大小的10%(DB)/1%(WAL)

Note
DB存储了BlueStore的内部元数据,而WAL是BlueStore的内部日志或预写日志。建议使用快速的SSD或NVRAM以获得更好的性能。
Ceph 文件存储

在Ceph Luminous之前,Filestore被用作Ceph OSD的默认存储类型。从Ceph Nautilus开始,{pve}不再支持使用’pveceph’创建这样的OSD。如果您仍然想要创建filestore OSD,请直接使用’ceph-volume'。

ceph-volume lvm create --filestore --data /dev/sd[X] --journal /dev/sd[Y]

销毁OSDs

通过图形界面删除一个OSD,首先在树状视图中选择一个{PVE}节点,然后前往Ceph → OSD面板。接着选择要销毁的OSD并点击OUT按钮。一旦OSD状态从`in`变为`out`,点击STOP按钮。最后,状态从`up`变为`down`后,从`More`下拉菜单中选择Destroy

通过CLI运行以下命令来删除一个OSD。

ceph osd out <ID>
systemctl stop ceph-osd@<ID>.service
Note
第一个命令指示Ceph不要将OSD包含在数据分配中。第二个命令停止OSD服务。在此之前,没有数据丢失。

以下命令将销毁OSD。指定'-cleanup’选项以额外销毁分区表。

pveceph osd destroy <ID>
Warning
上述命令将销毁磁盘上的所有数据!

Ceph 存储池

存储池是用于存储对象的逻辑分组。它容纳了一系列的对象,这些对象被称为放置组PGpg_num)。

创建和编辑池

您可以通过任何{pve}主机的命令行或者Ceph → Pools下的网页界面来创建和编辑存储池。

当没有给出选项时,我们设置了默认值为 128个PGs3副本的大小以及最小2副本的大小,以确保任何OSD失败时不会发生数据丢失。

Warning
不要将 min_size 设置为 1。设置了 min_size 为 1 的副本池允许对象在只有一个副本时进行 I/O 操作,这可能导致数据丢失、不完整的 PGs 或找不到的对象。

建议您启用PG-Autoscaler或根据您的设置计算PG数量。您可以在网上找到公式和PG计算器的脚注:[PG计算器 https://web.archive.org/web/20210301111112/http://ceph.com/pgcalc/]。从Ceph Nautilus版本开始,您可以在设置之后改变PGs的数量,详见脚注:[placement_groups,Placement Groups {cephdocs-url}/rados/operations/placement-groups/]。

PG自动缩放器[2]可以在后台自动调整池的PG数量。设置`目标大小`或`目标比例`高级参数有助于PG自动缩放器做出更好的决策。

通过命令行接口创建资源池的示例
pveceph pool create <pool-name> --add_storages
Tip
如果您还希望为您的存储池自动定义存储,请在web界面中保持“添加为存储”复选框选中,或者在创建存储池时使用命令行选项'--add_storages'。

泳池选项

创建池时以下选项可用,部分选项在编辑池时也可用。

姓名

游泳池的名称。这必须是唯一的,并且之后不能更改。

尺寸

每个对象的副本数量。Ceph 总是尝试拥有这么多个对象的副本。默认值:3

PG自动扩展模式

池的自动PG缩放模式[2]。如果设置为`warn`,当池的PG数量不理想时,它会产生一个警告信息。默认值:warn

作为存储添加

使用新的池配置虚拟机或容器存储。默认值:true(仅在创建时可见)。

高级选项
最小尺寸

每个对象的最小副本数。如果一个PG的副本数少于这个数量,Ceph将拒绝对池的I/O操作。默认值:2

碾压规则

用于映射集群中对象放置的规则。这些规则定义了数据如何在集群内部放置。有关基于设备的规则的信息,请参见Ceph CRUSH & 设备类

PG数量

池(pool)开始时应该具有的放置组(placement groups)[placement_groups]的数量。默认值:128

目标比率

预期在资源池中的数据比例。PG自动伸缩器使用相对于其他比例集的比例。如果同时设置了`目标大小`,则它将优先考虑。

目标尺寸

估计池中预期的数据量。PG自动扩展器使用这个大小来估计最优的PG数量。

最小数量的PGs

放置组的最小数量。此设置用于微调该池的PG(放置组)计数下限。PG自动伸缩器不会将PG数量合并到低于此阈值之下。

有关Ceph池处理的更多信息可以在Ceph池操作脚注中找到:[Ceph池操作 {cephdocs-url}/rados/operations/pools/] 手册。

擦除编码池

擦除编码(EC)是一种“前向错误更正”代码形式,它允许从一定量的数据丢失中恢复。与复制池相比,擦除编码池可以提供更多可用空间,但它们以性能为代价。

为了对比:在传统的复制存储池中,数据的多个副本会被存储(size),而在纠删码存储池中,数据被分割成`k`个数据块和额外的`m`个编码(校验)块。这些编码块可以用于重新创建数据,以防数据块丢失。

编码块的数量,m,定义了可以丢失多少OSD而不丢失任何数据。存储的对象总量是 k + m

创建EC池

Erasure coded (EC) 池可以使用 pveceph CLI 工具创建。规划一个EC池需要考虑到,它们与复制池的工作方式不同。

EC池的默认`min_size`取决于`m`参数。如果`m = 1`,则EC池的`min_size`将是`k`。如果`m > 1`,min_size`将是`k + 1。Ceph文档建议保守设置`min_size`为`k + 2`脚注:[Ceph纠删码池恢复 {cephdocs-url}/rados/operations/erasure-code/#erasure-coded-pool-recovery]。

如果可用的OSD少于`min_size`,则对该池的任何IO操作都将被阻塞,直到再次有足够的OSD可用。

Note
在规划一个擦除编码池时,注意监控`min_size`,因为它定义了需要多少OSDs是可用的。否则,IO将会被阻塞。

例如,一个EC池如果配置了`k = 2`和`m = 1`,那么它的`size = 3`,min_size = 2,并且如果一个OSD失败,它仍然能够保持运行。如果池配置为`k = 2`,m = 2,它将有一个`size = 4`和`min_size = 3`,并且如果失去一个OSD,它仍能保持运行。

要创建一个新的EC池,请运行以下命令:

pveceph pool create <pool-name> --erasure-coding k=2,m=1

可选参数包括`failure-domain`和`device-class`。如果您需要更改池使用的任何EC配置文件设置,您将必须使用新的配置文件创建一个新的池。

这将创建一个新的EC(纠错码)池以及存储RBD(块设备映射)omap和其他元数据所需的复制池。最终,将会有一个`<pool name>-data`和`<pool name>-metadata`池。默认行为是同时创建一个匹配的存储配置。如果不需要这种行为,可以通过提供`--add_storages 0`参数来禁用它。手动配置存储配置时,请记住必须设置`data-pool`参数。只有设置了此参数,EC池才会被用于存储数据对象。例如:

Note
可选参数 --size--min_size--crush_rule 将用于副本元数据池,但不适用于纠删码数据池。如果你需要更改数据池的 min_size,你可以稍后进行。而 sizecrush_rule 参数在纠删码池中无法更改。

如果需要进一步自定义EC配置文件,您可以通过使用Ceph工具直接创建它 [3],并使用`profile`参数来指定使用的配置文件。

例如:

pveceph pool create <pool-name> --erasure-coding profile=<profile-name>

添加EC池作为存储

您可以将已存在的EC(纠删码)池作为存储添加到{pve}。这与添加`RBD`池的方式相同,但需要额外的`data-pool`选项。

pvesm add rbd <storage-name> --pool <replicated-pool> --data-pool <ec-pool>
Tip
不要忘记为任何不由本地 {pve} 集群管理的外部 Ceph 集群添加 keyringmonhost 选项。

摧毁游泳池

通过GUI销毁存储池时,选择树视图中的一个节点并进入 Ceph → Pools 面板。选择要销毁的存储池然后点击 Destroy 按钮。为了确认销毁存储池,你需要输入存储池的名称。

运行以下命令来销毁一个资源池。指定 -remove_storages 以同时移除关联的存储。

pveceph pool destroy <name>
Note
池删除将在后台运行,并且可能需要一些时间。在此过程中,你会注意到集群中的数据使用量逐渐减少。

PG Autoscaler

PG自动扩缩器允许集群考虑每个池中存储的(预期的)数据量,并自动选择合适的pg_num值。它自Ceph Nautilus起就可用了。

您可能需要先激活PG自动调节模块,之后调整才能生效。

ceph mgr module enable pg_autoscaler

自动伸缩器按照每个池进行配置,具有以下模式:

警告

如果建议的`pg_num`值与当前值相差过大,则会发出健康警告。

开 或者 在上

pg_num`会自动调整,无需任何手动干预。

关闭

不会自动调整`pg_num`的数量,如果PG数量不是最优,也不会发出警告。

缩放因子可以通过调整`target_size`、`target_size_ratio`和`pg_num_min`选项来便于未来的数据存储。

Warning
默认情况下,如果池的PG计数偏离因子3,则自动缩放器会考虑调整该池的PG计数。这将导致数据位置的显著变动,并可能对集群引入高负载。

您可以在Ceph的博客上找到关于PG自动伸缩器的更深入的介绍 - Nautilus新功能:PG合并和自动调优

Ceph CRUSH 和设备类别

脚注:[CRUSH https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf](Controlled Replication Under Scalable Hashing,即“可控制复制在可扩展散列下”)算法是Ceph的基础。

CRUSH计算从哪里存储和检索数据。这样做的优势在于不需要中央索引服务。CRUSH通过使用一个包含OSDs(对象存储设备)、桶(设备位置)和规则集(数据复制)的映射来进行工作,用于数据池。

Note
更多信息可以在Ceph文档中找到,具体位于部分CRUSH map脚注:[CRUSH map {cephdocs-url}/rados/operations/crush-map/]。

这张地图可以被修改以反映不同的复制层次结构。对象副本可以被分开(例如,故障域),同时保持所需的分布。

一个常见的配置是将不同类别的磁盘用于不同的Ceph存储池。因此,Ceph在luminous版本中引入了设备类别,以适应生成简易规则集的需求。

设备类别可以在 ceph osd tree 输出中看到。这些类别代表它们自己的根存储桶,可以使用下面的命令查看。

ceph osd crush tree --show-shadow

上述命令的示例输出:

ID CLASS WEIGHT TYPE NAME
-16 nvme 2.18307 root default~nvme
-13 nvme 0.72769 host sumi1~nvme
12 nvme 0.72769 osd.12
-14 nvme 0.72769 host sumi2~nvme
13 nvme 0.72769 osd.13
-15 nvme 0.72769 host sumi3~nvme
14 nvme 0.72769 osd.14
-1 7.70544 root default
-3 2.56848 host sumi1
12 nvme 0.72769 osd.12
-5 2.56848 host sumi2
13 nvme 0.72769 osd.13
-7 2.56848 host sumi3
14 nvme 0.72769 osd.14

为了指导一个池(pool)只在特定的设备类上分配对象,你首先需要为设备类创建一个规则集:

ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>

<rule-name>

规则名称,用于与池连接(在GUI和CLI中可见)

<root>

它应该属于哪个CRUSH根(默认Ceph根“default”)

<failure-domain>

对象应该在哪个故障域分布(通常是主机)

<class>

要使用哪种类型的OSD后端存储(例如,nvme, ssd, hdd)

一旦规则被加入到CRUSH映射中,你就可以指示一个池使用这个规则集。

ceph osd pool set <pool-name> crush_rule <rule-name>
Tip
如果池已经包含了对象,这些对象必须相应地移动。根据你的设置,这可能会对你的集群带来重大的性能影响。作为另一种选择,你可以创建一个新的池,并单独移动磁盘。

Ceph 客户端

根据前几节的设置,您可以配置 {pve} 使用这样的池来存储虚拟机和容器镜像。只需使用GUI添加一个新的 RBD 存储(参见部分 Ceph RADOS块设备 (RBD))。

您还需要将密钥环复制到外部Ceph集群的预定义位置。如果Ceph已经安装在Proxmox节点上,那么这个过程将会自动完成。

Note
文件名需要是 <storage_id> + `.keyring,其中 <storage_id>/etc/pve/storage.cfgrbd: 之后的表达式。在下面的例子中,my-ceph-storage 就是 <storage_id>
mkdir /etc/pve/priv/ceph
cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/my-ceph-storage.keyring

CephFS

Ceph还提供了一种文件系统,它是基于与RADOS块设备相同的对象存储之上运行的。一个元数据服务器(MDS)被用来将RADOS支持的对象映射到文件和目录,允许Ceph提供一个符合POSIX标准的、可复制的文件系统。这使您可以轻松配置一个集群化的、高可用的、共享的文件系统。Ceph的元数据服务器保证文件在整个Ceph集群中均匀分布。因此,即使在高负载的情况下,也不会有单一主机被压垮的情况,这是传统的共享文件系统方法(例如`NFS`)可能遇到的问题。

Proxmox VE支持创建一个超融合的CephFS,并使用现有的CephFS作为存储来保存备份、ISO文件和容器模板。

元数据服务器 (MDS)

CephFS至少需要配置和运行一个元数据服务器(Metadata Server)才能正常工作。你可以通过{pve}web GUI的`节点 → CephFS`面板或者使用命令行来创建一个MDS:

pveceph mds create

在一个集群中可以创建多个元数据服务器(MDS),但是在默认设置下,一次只有一个可以是活跃的。如果一个MDS或其节点变得无响应(或崩溃),另一个`备用`的MDS将被提升为`活跃`状态。您可以在创建时使用’hotstandby’参数选项来加速活跃和备用MDS之间的交接,或者如果您已经创建了,您可以设置/添加:

mds standby replay = true

/etc/pve/ceph.conf 的相应 MDS 部分中。启用此功能后,指定的 MDS 将保持在“温暖”状态,轮询活跃节点,以便在出现任何问题时能够更快地接管。

Note
这种主动轮询将对您的系统和活动的`MDS`产生额外的性能影响。
多个活跃的元数据服务器

自从Luminous (12.2.x)版本以来,你可以同时运行多个活跃的元数据服务器,但这通常只在你有大量并行运行的客户端时才有用。否则,`MDS`很少成为系统的瓶颈。如果你想设置这个,请参考Ceph文档。脚注:[配置多个活跃MDS守护进程 {cephdocs-url}/cephfs/multimds/]

创建CephFS

随着 {pve} 对 CephFS 的集成,您可以轻松地使用 Web 界面、CLI 或外部 API 接口创建一个 CephFS。这需要满足一些先决条件:

成功设置CephFS的先决条件:
  • 安装Ceph包 - 如果这已经在一段时间前完成了,你可能想要在一个更新的系统上重新运行它,以确保所有与CephFS相关的包都被安装。

  • 设置监视器

  • 设置你的OSD设备

  • 设置至少一个MDS

完成此操作后,您可以通过Web GUI的`Node → CephFS`面板或命令行工具`pveceph`来简单创建一个CephFS,例如:

pveceph fs create --pg_num 128 --add-storage

这将创建一个名为 cephfs 的CephFS,使用一个名为 cephfs_data 的池存储其数据,该数据池有 128 个放置组,还会使用一个名为 cephfs_metadata 的池存储其元数据,其放置组数量为数据池的四分之一(32)。检查{pve} 管理的Ceph池章节或访问Ceph文档,以获取更多关于为您的设置选择适当放置组数量 (pg_num) 的信息[placement_groups]。此外,--add-storage 参数将在CephFS成功创建后将其添加到{pve}存储配置中。

销毁CephFS

Warning
销毁一个CephFS将使其所有数据变得不可用。这个操作是不可逆的!

要完全并优雅地删除一个CephFS,需要以下步骤:

  • 断开每个非{PVE}客户端的连接(例如,在客户端中卸载CephFS)。

  • 禁用所有相关的CephFS {PVE} 存储条目(以防止它被自动挂载)。

  • 从您想要销毁的CephFS中移除所有被客户端使用过的资源(比如ISOs)。

  • 手动在所有集群节点上卸载CephFS存储

    umount /mnt/pve/<STORAGE-NAME>

    在这里 <STORAGE-NAME> 是你的 {PVE} 中CephFS存储的名称。

  • 现在确保没有元数据服务器(MDS)正在为那个CephFS运行,可以通过停止或销毁它们来实现。这可以通过网页界面或命令行界面完成,对于后者,你应该执行以下命令:

    pveceph stop --service mds.NAME

    阻止他们,或者

    pveceph mds destroy NAME

    销毁它们。

    请注意,当活动的`MDS`被停止或移除时,待命服务器将自动升级为活动服务器,因此最好先停止所有待命服务器。

  • 现在你可以摧毁CephFS了

    pveceph fs destroy NAME --remove-storages --remove-pools

    这会自动销毁底层的Ceph存储池,并且从pve配置中移除存储。

完成这些步骤后,CephFS 应该完全被删除,如果你有其他 CephFS 实例,已停止的元数据服务器可以再次启动,作为备用服务器。

Ceph 维护

替换OSD

在Ceph中最常见的维护任务之一是替换OSD的磁盘。如果一个磁盘已经处于故障状态,那么你可以继续执行销毁OSDs中的步骤。如果可能的话,Ceph将在其余的OSD上重新创建那些副本。一旦检测到OSD故障或OSD被主动停止,这种重新平衡将立即开始。

Note
使用默认的池大小/最小大小(3/2)时,只有当`size
1`个节点可用时,恢复才会开始。其原因是Ceph对象平衡器CRUSH默认将一个完整节点作为`故障域`。

要通过GUI替换一个功能正常的磁盘,请按照销毁OSD中的步骤操作。唯一的新增步骤是在停止要销毁的OSD之前,等到集群显示’HEALTH_OK’状态。

在命令行中,使用以下命令:

ceph osd out osd.<id>

你可以使用下面的命令来检查OSD是否可以安全移除。

ceph osd safe-to-destroy osd.<id>

一旦上述检查告诉您移除OSD是安全的,您可以继续执行以下命令:

systemctl stop ceph-osd@<id>.service
pveceph osd destroy <id>

将旧硬盘替换为新硬盘,并使用在创建OSD中描述的相同步骤。

修剪/丢弃

定期在虚拟机和容器上运行 fstrim(丢弃)是个好习惯。这将释放文件系统不再使用的数据块。它可以减少数据使用和资源负载。大多数现代操作系统会定期向它们的磁盘发出此类丢弃命令。您只需要确保虚拟机启用了磁盘丢弃选项

清洁与深度清洁

Ceph通过对放置组进行“擦除”来确保数据的完整性。Ceph检查PG中的每个对象的健康状况。擦除有两种形式,每日的廉价元数据检查和每周的深度数据检查。每周深度擦除读取对象并使用校验和来确保数据完整性。如果正在进行的擦除干扰了业务(性能)需求,您可以调整执行擦除的时间 [4]

Ceph 监控与故障排除

从一开始就持续监控Ceph部署的健康状况非常重要,可以通过使用Ceph工具或者通过{pve}链接:api-viewer/index.html[API]访问状态来实现。

以下Ceph命令可以用来检查集群是否健康(HEALTH_OK),是否有警告(HEALTH_WARN),甚至是错误(HEALTH_ERR)。如果集群处于不健康状态,下面的状态命令也会给你一个当前事件的概览以及需要采取的行动。

# single time output
pve# ceph -s
# continuously output status changes (press CTRL+C to stop)
pve# ceph -w

为了获得更详细的视图,每个Ceph服务都有一个位于`/var/log/ceph/`下的日志文件。如果需要更详细的信息,可以调整日志等级[5]

您可以在官方网站上找到更多关于故障排除脚注的信息:[Ceph故障排除 {cephdocs-url}/rados/troubleshooting/]一个Ceph集群。


1. Ceph Bluestore https://ceph.com/community/new-luminous-bluestore/
2. 自动缩放 {cephdocs-url}/rados/operations/placement-groups/#automated-scaling
3. Ceph纠错码配置文件 {cephdocs-url}/rados/operations/erasure-code/#erasure-code-profiles
4. Ceph擦除 {cephdocs-url}/rados/configuration/osd-config-ref/#scrubbing
5. Ceph日志与调试 {cephdocs-url}/rados/troubleshooting/log-and-debug/