image.png
Proxmox VE统一了您的计算和存储系统,也就是说,您可以在一个集群中使用相同的物理节点进行计算(处理虚拟机和容器)和复制存储。计算和存储资源的传统筒仓可以打包成一个单一的超融合设备。独立存储网络(san)和通过网络连接存储(NAS)的连接消失了。通过集成开源软件定义的存储平台Ceph, Proxmox VE能够在hypervisor节点上直接运行和管理Ceph存储。

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

CEPH在PROXMOX VE上的一些优点是:

  • 简单的设置和管理与CLI和GUI支持

  • 自动精简配置

  • 支持快照

  • 自我疗愈

  • 可扩展到eb级别

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

  • 数据复制,容错

  • 在经济的商品硬件上运行

  • 不需要硬件RAID控制器

  • 开放源码

对于中小型部署,可以直接在您的Proxmox VE集群节点上安装用于RADOS块设备(RBD)的Ceph服务器,参见Ceph RADOS块设备(RBD) 7.15节。最新的硬件有足够的CPU能力和RAM,因此可以在同一个节点上运行存储服务和虚拟机。

为了简化管理,我们提供了pveceph -一个在Proxmox VE节点上安装和管理Ceph服务的工具。

CEPH由两个守护进程组成,用于RBD存储:

要构建超融合的Proxmox + Ceph集群,应该至少有3台(最好是)相同的服务器。

也可以查看Ceph网站上的推荐。

CPU
**
较高的CPU核心频率可以减少延迟,应该是首选。作为一个简单的经验法则,您应该为每个Ceph服务分配一个CPU内核(或线程),以便为稳定和持久的Ceph性能提供足够的资源。

内存
**
特别是在超融合设置中,需要仔细监视内存消耗。除了来自虚拟机和容器的预期工作负载之外,Ceph还需要足够的可用内存来提供优秀和稳定的性能。

根据经验,对于大约1 TiB的数据,一个OSD将使用1 GiB的内存。特别是在恢复、再平衡或回填期间。

守护进程本身将使用额外的内存。守护进程的Bluestore后端默认需要3-5 GiB内存(可调)。相比之下,遗留的Filestore后端使用OS页面缓存,内存消耗通常与OSD守护进程的PGs相关。

网络
**
我们建议网络带宽至少为10gbe或更多,这是Ceph专用的。如果没有可用的10gbe交换机,网状网络设置也是一个选项。

通信量(特别是在恢复期间)将干扰同一网络上的其他服务,甚至可能破坏Proxmox VE集群堆栈。

进一步,估计您的带宽需求。虽然一个硬盘可能不会使1gb的链路饱和,但每个节点的多个硬盘osd可以,而现代NVMe ssd甚至会很快使10gbps的带宽饱和。部署一个带宽更高的网络将确保它不会成为你的瓶颈,也不会很快成为瓶颈,25gbps、40gbps甚至100gbps都是可能的。

磁盘

在规划Ceph集群的大小时,考虑恢复时间是很重要的。特别是小型集群,复苏可能需要很长时间。建议在小型设置中使用ssd而不是hdd,以减少恢复时间,最大限度地减少恢复期间发生后续故障事件的可能性。

一般来说,ssd会比旋转磁盘提供更多的IOPs。这一事实和较高的成本可能使基于类的第8.9节池的分离具有吸引力。加速OSDs的另一种可能性是使用更快的磁盘作为日志或DB/ write - advance - log设备,请参见创建Ceph OSDs第8.7节。如果有多个OSD使用较快的磁盘,需要在OSD和WAL / DB(或journal)磁盘之间选择合适的平衡点,否则较快的磁盘将成为所有链接OSD的瓶颈。

除了磁盘类型,Ceph在每个节点的磁盘大小和分布数量都是均匀的情况下性能最好。例如,每个节点都有4×500gb磁盘,这比混合设置单个1tb和3个250gb磁盘要好。

还需要平衡OSD数量和单个OSD容量。更大的容量允许增加存储密度,但这也意味着单个OSD故障会迫使ceph一次恢复更多数据。


1、Full Mesh Network for Ceph https://pve.proxmox.com/wiki/Full_Mesh_Network_for_Ceph_Server

避免RAID

由于Ceph自己处理数据对象冗余和多个磁盘并行写(osd),使用RAID控制器通常不会提高性能或可用性。相反,Ceph被设计成单独处理整个磁盘,中间没有任何抽象。RAID控制器不是为Ceph设计的,可能会使事情变得复杂,有时甚至会降低性能,因为它们的写和缓存算法可能会干扰来自Ceph的算法。

  1. 警告
  2. 避免使用RAID控制器,使用HBA (host bus adapter)代替。
  3. Note
  4. 以上建议可以作为选择硬件的粗略指南。因此,仍然有必要对其进行调整,以适应您的特定需求、测试您的设置并持续监视运行状况和性能。

8.2、初始化Ceph安装和配置

image.png
使用Proxmox VE,您将拥有一个易于使用的Ceph安装向导。单击一个集群节点并导航到菜单树中的Ceph部分。如果Ceph尚未安装,您将提供这样做,现在。

向导被分为不同的部分,每个部分都需要成功完成才能使用Ceph。启动安装后,向导将从Proxmox VE的ceph存储库下载并安装所有需要的包。

完成第一步后,您将需要创建一个配置。对于每个集群,这个步骤只需要执行一次,因为这个配置会通过Proxmox VE的集群配置文件系统(pmxcfs)第6章自动分发给所有剩余的集群成员。

配置步骤包括以下设置:

  • 公共网络: 你应该为Ceph设置一个专用网络,这个设置是必需的。强烈建议分离Ceph流量,因为这可能会导致其他依赖延迟的服务出现问题,例如,如果不这样做,集群通信可能会降低Ceph的性能。

  • 集群网络: 作为一个可选步骤,你可以进一步分离OSD节8.7复制和心跳流量。这将减轻公共网络的负担,并可能导致显著的性能改进,特别是在大型集群中。

image.png
您还有两个被认为是高级的选项,因此只有在您是专家的情况下才应该更改。

  • 副本数:定义对象复制的频率

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

另外,您需要选择第一个监控节点,这是必需的。

就是这样,您应该看到一个成功页面作为最后一步,并进一步说明如何继续。现在可以开始使用Ceph了,尽管您需要创建额外的监视器第8.5节,创建一些OSDs第8.7节和至少一个池第8.8节。

本章的其余部分将指导您如何充分利用基于Proxmox VE的Ceph设置,这将包括前面提到的,更像Ceph 8.11节,这是一个非常方便的添加到您的新Ceph集群。

8.3、Ceph包的安装

使用Proxmox VE Ceph安装向导(推荐)或在各节点上执行如下命令:

pveceph install

这会在/etc/apt/sources.list.d/ceph.list中建立一个apt包存储库。并安装所需的软件。

8.4、创建初始Ceph配置

image.png
在单个节点上使用Proxmox VE Ceph安装向导(推荐使用)或执行以下命令:

pveceph init --network 10.10.10.0/24

这将在/etc/pve/ceph.conf中创建一个初始配置,并为ceph创建一个专用网络。该文件通过使用pmxcfs第6章自动分发到所有Proxmox VE节点。该命令还从/etc/ceph/ceph.conf中创建指向该文件的符号链接。因此,您可以简单地运行Ceph命令,而不需要指定配置文件。

8.5、Ceph Monitor

Ceph Monitor (MON) 维护集群映射的主副本。对于高可用性,你需要至少3个显示器。如果使用安装向导,将已经安装一个监视器。只要您的集群是小型到中型的,您就不需要超过3个监视器,只有真正大的集群才需要更多。

1、Ceph Monitor https://docs.ceph.com/en/nautilus/start/intro/

8.5.1、创建 Monitors

image.png
在希望放置监视器的每个节点上(建议放置三个监视器),通过在GUI中使用Ceph→monitor选项卡或运行来创建它。

pveceph mon create

8.5.2、销毁 Monitors

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

要通过CLI删除Ceph监视器,首先连接到正在运行MON的节点。然后执行如下命令:

pveceph mon destroy

  1. Note
  2. 法定人数至少需要三个监视器。

8.6、Ceph Manager

管理器守护进程与监视器一起运行。它提供了一个监视集群的接口。因为Ceph luminous release至少需要一个Ceph -mgr 守护进程。

Ceph Manager https://docs.ceph.com/en/nautilus/mgr/

8.6.1、创建 Manager

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

pveceph mgr create

  1. Note
  2. 建议在监控节点上安装Ceph管理器。要获得高可用性,请安装多个管理器。

8.6.2、销毁 Manager

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

要通过CLI删除Ceph监视器,首先要连接到运行管理器的节点。然后执行如下命令:

pveceph mgr destroy

  1. 请注意
  2. Ceph集群可以在没有管理器的情况下运行,但某些功能(如集群状态或使用情况)需要运行管理器。

8.7、Ceph OSDs

Ceph对象存储守护进程通过网络为Ceph存储对象。建议每个物理磁盘使用一个OSD。

  1. 请注意
  2. 缺省情况下,一个节点的大小是4M

Ceph Bluestore https://ceph.com/community/new-luminous-bluestore/

8.7.1、创建 OSDs

image.png
通过GUI或CLI如下:

pveceph osd create /dev/sd[X]

  1. 提示
  2. 我们建议使用Ceph集群大小,从12osd开始,平均分布在至少3个节点(每个节点上4osd)中。

如果磁盘以前使用过(例如。ZFS/RAID/OSD),要删除分区表、引导扇区和所有剩余OSD,下面的命令应该足够了。

ceph-volume lvm zap /dev/sd[X] --destroy

  1. 警告
  2. 上面的命令将破坏磁盘上的数据!

Ceph Bluestore

从Ceph Kraken发布开始,引入了一种新的Ceph OSD存储类型,即所谓的Bluestore。这是自Ceph Luminous以来创建OSD时的默认存储类型。

pveceph osd create /dev/sd[X]

Block.db and block.wal

如果您想为您的osd使用一个单独的DB/WAL设备,您可以通过-db_dev和-wal_dev选项指定它。如果没有单独指定,WAL将与DB一起放置。

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

您可以分别为使用-db_size和-wal_size参数的对象直接选择大小。如果没有给出它们,将使用以下值(按顺序):

  • bluestoreblock{db,wal}_size from ceph configuration…

    • …数据库,osd标签

    • …数据库,global标签

    • …文件,osd标签

    • …文件,global标签

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

    1. 请注意
    2. DB存储BlueStore的内部元数据,WALBlueStore的内部日志或预写日志。建议使用快速SSDNVRAM,以获得更好的性能。

    Ceph Filestore
    **
    在Ceph Luminous 之前,Filestore被用作Ceph OSDs的默认存储类型。从Ceph Nautilus开始,Proxmox VE不再支持使用pveceph创建这样的osd。如果您仍然希望创建文件存储OSDs,请直接使用ceph-volume。

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

8.7.2、销毁 OSDs

通过图形界面删除OSD首先在树视图中选择一个Proxmox VE节点,进入Ceph→OSD面板。选择要销毁的OSD。下一步单击OUT按钮。当OSD的状态从“in”变为“out”时,点击停止按钮。当状态从up到down改变时,从更多下拉菜单中选择销毁。

通过CLI命令移除OSD。

ceph osd out <ID>
systemctl stop ceph-osd@<ID>.service

  1. 请注意
  2. 第一个命令指示Ceph不要在数据分布中包含OSD。第二条命令停止OSD服务。在此之前,没有数据丢失。

下面的命令破坏OSD。指定-cleanup选项来另外销毁分区表。

pveceph osd destroy <ID>

  1. 警告
  2. 上面的命令将破坏磁盘上的数据!

8.8、Ceph Pools

池是用于存储对象的逻辑组。它保存放置组(PG, pg_num),这是一个对象集合。

8.8.1、创建 Pools

image.png
当没有给出选项时,我们将默认值设置为128 PGs,大小为3个副本,最小大小为2个副本,为服务处于降级状态的对象。

  1. 请注意
  2. PGs的默认数量适用于2-5块磁盘。如果你有太少或太多的pg在你的集群Ceph抛出一个HEALTH_WARNING
  3. 警告
  4. 不要将min_size设置为1。当一个对象只有1个副本时,min_size1的复制池允许对该对象进行I/O,这可能导致数据丢失、PGs不完整或找不到对象。

建议根据您的设置计算PG数,您可以在网上找到公式和PG计算器。从Ceph Nautilus开始,以后可以增加和减少PGs的数量。

1、PG calculator https://ceph.com/pgcalc/
2、Placement Groups https://docs.ceph.com/en/nautilus/rados/operations/placement-groups/

您可以通过命令行创建池,也可以在每个PVE主机的GUI上创建Ceph→池。

pveceph pool create <name>

如果您想自动获取池的存储定义,请在GUI中标记复选框“添加存储”,或者在池创建时使用命令行选项——add_storage。

关于Ceph池处理的更多信息可以在Ceph池操作手册中找到。

8.8.2、销毁 Pools

要通过GUI销毁池,在树视图中选择一个节点,然后转到Ceph→Pools面板。选择要销毁的池,单击“销毁”按钮。为了确认销毁池,需要输入池名称。

运行命令销毁存储池。使用实例指定- remove_stores也删除关联的存储。

pveceph pool destroy <name>

  1. 请注意
  2. 删除数据池属于后台任务,可能会花费一定的时间。您将注意到集群中的数据使用量正在减少。

8.9、Ceph CRUSH & device classes

Ceph的基础是它的算法,可扩展哈希下的控制复制(CRUSH)。

CRUSH计算在哪里存储和检索数据,这有一个优点,不需要中心索引服务。CRUSH为池提供OSDs、桶(设备位置)和规则集(数据复制)的地图。

  1. 请注意
  2. 进一步的信息可以在Ceph文档中找到,在 CRUSH map部分。

CRUSH map https://docs.ceph.com/en/nautilus/rados/operations/crush-map/
_
可以修改此映射,以反映不同的复制层次结构。对象副本可以被分离(例如。故障域),同时维护所需的分布。

一个常见的用例是为不同的Ceph池使用不同类型的磁盘。出于这个原因,Ceph引入了带有luminous的设备类,以适应容易生成规则集的需要。

设备类可以在ceph osd树的输出中看到。这些类代表它们自己的根桶,可以通过下面的命令看到。

Ceph pool operation https://docs.ceph.com/en/nautilus/rados/operations/pools/
CRUSH https://ceph.com/wp-content/uploads/2016/08/weil-crush-sc06.pdf

ceph osd crush tree --show-shadow

上述命令的输出示例:

  1. IDCLASS WEIGHTTYPE NAME
  2. -16nvme 2.18307 root default~nvme
  3. -13nvme 0.72769host sumi1~nvme
  4. 12nvme 0.72769osd.12
  5. -14nvme 0.72769host sumi2~nvme
  6. 13nvme 0.72769osd.13
  7. -15nvme 0.72769host sumi3~nvme
  8. 14nvme 0.72769osd.14
  9. -17.70544 root default
  10. -32.56848host sumi1
  11. 12nvme 0.72769osd.12
  12. -52.56848host sumi2
  13. 13nvme 0.72769osd.13
  14. -72.56848host sumi3
  15. 14nvme 0.72769osd.14

为了让池只在特定的设备类上分发它的对象,您需要首先用特定的类创建一个规则集。

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

连接到池的规则名(见GUI和CLI)

它应该属于碾压根(默认ceph根“default”)

<failure-domain 对象应该分布在故障域(通常是宿主)

要使用哪种类型的OSD后备存储(例如:nvme、ssd硬盘)

一旦规则在CRUSH映射中,您可以告诉一个池使用规则集。

ceph osd pool set <pool-name> crush_rule <rule-name>

  1. 提示
  2. 如果池中已经包含了对象,则必须相应地移动所有这些对象。根据您的设置,这可能会给您的集群带来很大的性能影响。另外,您可以创建一个新的池并单独移动磁盘。

8.10、Ceph 客户端

image.png
然后,您可以配置Proxmox VE来使用这样的池来存储VM或容器映像。简单地使用GUI也添加了一个新的RBD存储(参见Ceph RADOS块设备(RBD) 7.15节)。

您还需要将密匙环复制到外部Ceph集群的预定义位置。如果Ceph安装在Proxmox节点本身,那么这将自动完成。

  1. 请注意
  2. 文件名需要为 <storage_id> + `.keyring - <storage_id>是rbd后面的表达式:在/etc/pve/storage.cfg中是my-ceph-storage示例如下:

mkdir /etc/pve/priv/ceph
cp /etc/ceph/ceph.client.admin.keyring /etc/pve/priv/ceph/my-ceph-storage.keyring

8.11、CephFS

与RADOS块设备一样,Ceph也提供了运行在相同对象存储之上的文件系统。元数据服务器(MDS)用于将RADOS支持的对象映射到文件和目录,从而允许提供符合posix的复制文件系统。如果已经使用了ceph,这允许以一种简单的方式拥有集群的高可用共享文件系统。它的元数据服务器保证文件在整个Ceph集群上得到平衡,这样即使是高负载也不会使单个主机过载,这对于传统的共享文件系统方法(例如NFS)可能是一个问题。
image.png
Proxmox VE支持这两种方法,使用现有的cepfs作为存储章节7.16保存备份、ISO文件或容器模板,并创建超融合的cepfs本身。

8.11.1、MDS (Metadata Server)

cepfs至少需要配置一个元数据服务器并运行,才能正常工作。您可以简单地通过Proxmox VE web GUI的节点-> CephFS面板或命令行创建一个:

pveceph mds create

一个集群中可以创建多个元数据服务器。但是使用默认设置,在任何时候只有一个可以激活。如果一个MDS或其节点变得无响应(或崩溃),另一个standby MDS将被提升为active。你可以通过在create上使用hotstandby参数选项来加快主备MDS之间的切换,或者如果你已经创建了它,你可以设置/添加:

mds standby replay = true

在cepa .conf相应的MDS部分。启用此功能后,这个特定的MDS将始终轮询活动的MDS,以便在它处于热状态时可以更快地接管。但是,活动轮询自然会对系统和主MDS造成一些额外的性能影响。

多个活动MDS

因为Luminous (12.2.x)也可以有多个活动元数据服务器运行,但这通常只对并行客户端的高计数有用,否则MDS很少成为瓶颈。如果你想设置这个,请参考ceph文档。

8.11.2、创建 CephFS

通过与Proxmox VE的cepfs集成,您可以轻松地通过Web GUI、CLI或外部API接口创建cepfs。这需要一些先决条件:

成功设置CEPHFS的先决条件:

  • 安装Ceph包8.3节,如果这已经做了一段时间,你可能想要重新运行它一个最新的系统,以确保所有与cepfs相关的包都被安装。

  • 安装监视器8.5节

  • 安装您的OSDs Section 8.5

  • 设置至少一个MDS 8.11.1节

在这一切都检查和完成后,你可以简单地通过Web GUI的节点-> CephFS面板或命令行工具pveceph创建一个CephFS,例如:

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

这将创建一个名为“CephFS”的CephFS,使用一个为其数据命名为“cephfs_data”的池和一个为其元数据命名为“cephfs_metadata”的池,该池使用四分之一的数据池放置组(‘32’)。检查Proxmox VE管理的Ceph池chapter章节8.8或访问Ceph文档获取更多关于安装程序的拟合安置组编号(pg_num)的信息10。此外,“——add-storage”参数将在成功创建cepfs后将其添加到Proxmox VE存储配置中。

Configuring multiple active MDS daemons https://docs.ceph.com/en/nautilus/cephfs/multimds/
Ceph Placement Groups https://docs.ceph.com/en/nautilus/rados/operations/placement-groups/

8.11.3、销毁 CephFS

  1. 警告
  2. 销毁一个CephFS将导致它的所有数据无法使用,这是无法撤消的!

如果你真的想要销毁一个现有的cepfs,你首先需要停止或销毁所有元数据服务器(mds)。你可以通过Web GUI或命令行界面销毁它们,如下所示:

pveceph mds destroy NAME

在每个Proxmox VE节点上托管一个MDS守护进程。

然后,你可以通过执行以下命令来移除(销毁)cepfs:

ceph fs rm NAME --yes-i-really-mean-it

在托管Ceph的单个节点上。在此之后,你可能想要删除创建的数据和元数据池,这可以通过Web GUI或CLI来完成:

pveceph pool destroy NAME

8.12、Ceph 维护

8.12.1、更换OSDs

Ceph中常见的维护任务之一是更换OSD的磁盘。如果磁盘已经处于失败状态,那么您可以继续执行销毁OSDs第8.7.2节中的步骤。如果可能,Ceph将在剩余的osd上重新创建这些副本。一旦检测到某个OSD故障或某个OSD被主动停止,这个再平衡就会启动。

  1. 请注意
  2. 使用池的默认size/min_size(3/2),只有在“size + 1”节点可用时才开始恢复。原因是Ceph对象平衡器CRUSH章节8.9默认为一个完整的节点作为“故障域”。

要替换仍在运行的磁盘,在GUI上执行销毁OSDs第8.7.2节中的步骤。唯一增加的是等待集群显示HEALTH_OK,然后停止OSD并销毁它。

在命令行中使用以下命令。

ceph osd out osd.<id>

您可以使用下面的命令检查是否可以安全地删除OSD。

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

一旦上面的检查告诉你它被保存以删除OSD,你就可以继续下面的命令。

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

更换新硬盘的操作步骤请参见8.7.1创建OSDs。

8.12.2、除去/丢弃

定期在vm或容器上运行fstrim(丢弃)是一种很好的方法。这将释放文件系统不再使用的数据块。它减少了数据使用和资源负载。大多数现代操作系统都会定期向其磁盘发出这样的丢弃命令。您只需要确保虚拟机启用磁盘丢弃选项Section 10.2.4。

8.12.3、擦除&深层擦除

Ceph通过清除放置组来确保数据完整性。Ceph检查PG中的每个对象的生命值。有两种清洗形式,每日廉价的元数据检查和每周深入的数据检查。每周的深度擦洗读取对象并使用校验和来确保数据完整性。如果正在运行的擦除操作干扰了业务(性能)需求,您可以调整执行擦除操作的时间。

8.13、Ceph监控和故障排除

良好的开端是,从初始部署开始就持续监视ceph运行状况。可以通过ceph工具本身,也可以通过Proxmox VE API访问状态。

下面的ceph命令可以用来查看集群是否健康(HEALTH_OK)、是否有警告(HEALTH_WARN),甚至是否有错误(HEALTH_ERR)。如果集群处于不健康状态,下面的status命令还将向您概述当前事件和要采取的操作。

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

为了获得更详细的视图,每个ceph服务在/var/log/ceph/下都有一个日志文件,如果没有足够的详细信息,可以调整日志级别。

您可以在官方网站上找到更多关于Ceph集群故障诊断的信息。


Ceph scrubbing https://docs.ceph.com/en/nautilus/rados/configuration/osd-config-ref/#scrubbing
Ceph log and debugging https://docs.ceph.com/en/nautilus/rados/troubleshooting/log-and-debug/
Ceph troubleshooting https://docs.ceph.com/en/nautilus/rados/troubleshooting/
_