部署超融合Ceph集群
Proxmox VE统一了您的计算和存储系统,即,您可以将群集中的相同物理节点用于计算(处理VM和容器)和复制存储。可以将传统的计算和存储资源孤岛包装到单个超融合设备中。单独的存储网络(SAN)和通过网络附加存储(NAS)的连接消失了。通过集成开源软件定义的存储平台Ceph,Proxmox VE能够直接在管理程序节点上运行和管理Ceph存储。
Ceph是一个分布式对象存储和文件系统,旨在提供出色的性能,可靠性和可伸缩性。
Ceph在Proxmox VE上的一些优点是:
- 列表项目
- 通过CLI和GUI支持轻松设置和管理
- 精简配置
- 快照支持
- 自愈
- 可扩展到EB级
- 具有不同性能和冗余特性的设置池
- 复制数据,使其具有容错能力
- 在经济的商品硬件上运行
- 无需硬件RAID控制器
- 开源的
对于中小型部署,可以在Proxmox VE群集节点上直接为RADOS块设备(RBD)安装Ceph服务器,请参阅 Ceph RADOS块设备(RBD)。最新的硬件具有大量的CPU能力和RAM,因此可以在同一节点上运行存储服务和VM。
为了简化管理,我们提供了pveceph-一种在Proxmox VE节点上安装和管理Ceph服务的工具。
Ceph由几个守护程序组成,用作RBD存储:
- Ceph监控器(ceph-mon)
- Ceph管理器(ceph-mgr)
- Ceph OSD(ceph-osd;对象存储守护程序)
小提示
我们强烈建议您熟悉Ceph [ 1 ],其体系结构 [ 2 ] 和词汇表 [ 3 ]。
前提
要构建超融合的Proxmox + Ceph群集,应至少有三台(最好是)相同的服务器进行设置。
另请参阅Ceph网站上的建议 。
中央处理器
较高的CPU核心频率可减少延迟,因此应优先考虑。作为一条简单的经验法则,您应该为每个Ceph服务分配一个CPU内核(或线程),以提供足够的资源来实现稳定和持久的Ceph性能。
内存
尤其是在超融合设置中,需要仔细监视内存消耗。除了虚拟机和容器的预期工作负荷之外,Ceph还需要足够的可用内存来提供出色且稳定的性能。
根据经验,对于大约1 TiB的数据, OSD将使用1 GiB的内存。特别是在恢复,重新平衡或回填期间。
守护程序本身将使用额外的内存。守护程序的Bluestore后端默认需要3-5 GiB的内存(可调)。相反,旧式Filestore后端使用OS页面缓存,并且内存消耗通常与OSD守护程序的PG有关。
网络
我们建议至少将10 GbE或更高的网络带宽专用于Ceph。 如果没有可用的10 GbE交换机,则也可以选择网状网络设置 [ 4 ]。
通信量,特别是在恢复过程中,将干扰同一网络上的其他服务,甚至可能破坏Proxmox VE群集堆栈。
此外,估计您的带宽需求。尽管一个HDD可能不会使1 Gb链路饱和,但每个节点可以有多个HDD OSD,而现代的NVMe SSD甚至会迅速使10 Gbps带宽饱和。部署具有更大带宽的网络将确保它不是您的瓶颈,而且不会很快出现,可能会达到25、40甚至100 GBps。
磁碟
在规划Ceph集群的大小时,重要的是要考虑恢复时间。特别是对于小型群集,恢复可能需要很长时间。建议您在小型设置中使用SSD代替HDD,以减少恢复时间,从而最大程度地减少恢复过程中发生后续故障事件的可能性。
通常,与旋转磁盘相比,SSD将提供更多的IOP。这个事实和较高的成本可能会使基于类的池分离更具吸引力。另一种可能的OSD加速是使用速度更快的磁盘如轴颈或DB / w ^ rite-甲头戴式大号OG设备,请参阅 创建头孢的OSD。如果将更快的磁盘用于多个OSD,则必须在OSD和WAL / DB(或日志)磁盘之间选择适当的平衡,否则,更快的磁盘将成为所有链接的OSD的瓶颈。
除了磁盘类型外,Ceph的最佳性能是每个节点的磁盘大小均匀且分布均匀。例如,每个节点中都有4 x 500 GB磁盘要比具有单个1 TB和三个250 GB磁盘的混合设置更好。
还需要平衡OSD数量和单个OSD容量。更大的容量可以提高存储密度,但这也意味着单个OSD故障会迫使ceph立即恢复更多数据。
避免RAID
由于Ceph自身处理数据对象冗余和多次并行写入磁盘(OSD),因此使用RAID控制器通常不会提高性能或可用性。相反,Ceph被设计为自己处理整个磁盘,而中间没有任何抽象。RAID控制器不是为Ceph用例设计的,可能会使事情变得复杂,有时甚至会降低性能,因为它们的写入和缓存算法可能会干扰Ceph的算法。
警告
避免使用RAID控制器,请改用主机总线适配器(HBA)。
注意
以上建议应被视为选择硬件的粗略指导。因此,仍然必须使它适应您的特定需求,测试设置并持续监控运行状况和性能。初始Ceph安装和配置
借助Proxmox VE,您可以受益于Ceph易于使用的安装向导。单击您的一个群集节点,然后导航到菜单树中的Ceph部分。如果尚未安装Ceph,现在将提示您安装。
该向导分为不同的部分,每个部分都需要成功完成才能使用Ceph。开始安装后,向导将从Proxmox VE的ceph存储库中下载并安装所有必需的软件包。
完成第一步后,您将需要创建一个配置。每个群集只需要执行一次此步骤,因为此配置通过Proxmox VE的群集配置文件系统(pmxcfs)自动分配给所有剩余的群集成员 。
配置步骤包括以下设置:
- 公用网络:您应该为Ceph设置专用网络,此设置是必需的。强烈建议分离您的Ceph流量,因为它可能导致其他依赖于延迟的服务出现问题,例如,集群通信可能会降低Ceph的性能(如果不这样做)。
群集网络:作为可选步骤,您可以走得更远,也可以分离OSD复制和心跳流量。这将减轻公共网络的负担,并可能导致显着的性能改进,尤其是在大型集群中。
您还有两个被认为是高级的选项,因此只有在您是专家的情况下才应更改。
- 副本数:定义对象复制的频率
- 最小副本数:定义要标记为完整的I / O所需的最小副本数。
另外,您需要选择第一个监视节点,这是必需的。
就是这样,您应该将成功页面作为最后一步,并包含有关如何进行操作的进一步说明。现在,您将准备开始使用Ceph,即使您需要创建其他监视器,创建一些OSD和至少一个池。
本章的其余部分将指导您如何充分利用基于Proxmox VE的Ceph设置,其中包括上述内容,更像是CephFS,它是对新Ceph群集的非常方便的补充。
安装Ceph软件包
使用Proxmox VE Ceph安装向导(推荐)或在每个节点上运行以下命令:
pveceph install
这将在/etc/apt/sources.list.d/ceph.list中建立一个apt软件包系统信息库 并安装所需的软件。
创建初始Ceph配置
使用Proxmox VE Ceph安装向导(推荐)或在一个节点上运行以下命令:
pveceph init --network 10.10.10.0/24
这会在/etc/pve/ceph.conf中创建一个带有ceph专用网络的初始配置。使用pmxcfs将该文件自动分发到所有Proxmox VE节点。该命令还从/etc/ceph/ceph.conf创建指向该文件的符号链接。因此,您只需运行Ceph命令即可,而无需指定配置文件。
Ceph监控器
Ceph监视器(MON) [ 5 ] 维护群集映射的主副本。为了获得高可用性,您至少需要3台显示器。如果使用安装向导,将已经安装了一台监视器。只要您的集群是小型到中型,就不需要3个以上的显示器,只有真正的大型集群才需要更多。
创建监视器
在要放置监视器的每个节点上(建议使用三个监视器),使用GUI中的Ceph→Monitor选项卡创建它或运行它。
pveceph mon create
删除Ceph Monitor
要通过GUI删除Ceph Monitor,请首先在树形视图中选择一个节点,然后转到Ceph→Monitor面板。选择MON,然后单击销毁 按钮。
要通过CLI删除Ceph Monitor,请首先连接到运行MON的节点。然后执行以下命令:
pveceph mon destroy
注意
仲裁至少需要三台Monitor。
Ceph Manager
Manager守护程序与监视器一起运行。它提供了一个监视群集的界面。由于Ceph发光版本至少需要一个ceph-mgr [ 6 ]守护程序。
创建Ceph Manager
可以安装多个Manager,但是在任何时候,只有一个Manager是活动的。
pveceph mgr create
注意
建议在监视节点上安装Ceph Manager。为了获得高可用性,请安装多个管理器。
销毁Ceph Manager
要通过GUI删除Ceph管理器,首先在树形视图中选择一个节点,然后转到Ceph→Monitor面板。选择管理器,然后单击 销毁按钮。
要通过CLI删除Ceph监视器,请首先连接到运行Manager的节点。然后执行以下命令:
pveceph mgr destroy
注意
Ceph集群可以在没有管理器的情况下运行,但是某些功能(例如集群状态或使用情况)需要运行的管理器。
Ceph OSDs
CEPH对象存储通过网络进行数据交互。建议每个物理磁盘使用一个OSD。
注意
默认情况下,一个对象的大小为4 MiB。
创建OSDs
通过GUI或CLI,如下所示:
pveceph osd create /dev/sd[X]
小提示
我们建议使用Ceph群集大小,从12个OSD开始,并在至少三个节点(每个节点上有4个OSD)之间平均分配。
如果以前使用过磁盘(例如ZFS / RAID / OSD),则要删除分区表,引导扇区和剩余的任何OSD,以下命令就足够了。
ceph-volume lvm zap /dev/sd[X] --destroy
警告
上面的命令将破坏磁盘上的数据!
Ceph Bluestore
从Ceph Kraken版本开始,引入了一种新的Ceph OSD存储类型,即所谓的Bluestore [ 7 ]。由于Ceph Luminous,这是创建OSD时的默认设置。
pveceph osd create /dev/sd[X]
Block.db和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参数直接为它们选择大小。如果未给它们,将使用以下值(按顺序):
来自ceph配置的bluestore_block_ {db,wal} _size ...
…数据库,osd部分
…数据库,全局部分
…文件,osd部分
…文件,全局部分
OSD大小的10%(DB)/ 1%(WAL)
注意
数据库存储BlueStore的内部元数据,而WAL是BlueStore的内部日志或预写日志。建议使用快速SSD或NVRAM以获得更好的性能。
Ceph文件存储
在Ceph Luminous之前,文件存储被用作Ceph OSD的默认存储类型。从Ceph Nautilus开始,Proxmox VE不再支持使用pveceph创建此类OSD 。如果仍要创建文件存储OSD,请直接使用 ceph-volume。
ceph-volume lvm create --filestore --data /dev/sd[X] --journal /dev/sd[Y]
销毁OSD
要通过GUI删除OSD,请首先在树视图中选择Proxmox VE节点,然后转到Ceph→OSD面板。选择要销毁的OSD。接下来单击OUT 按钮。OSD状态从入到出更改后,单击停止 按钮。一旦状态从上更改为下,请 从“更多”下拉菜单中选择“销毁” 。
要通过CLI删除OSD,请运行以下命令。
ceph osd out <ID>
systemctl stop ceph-osd@<ID>.service
注意
第一条命令指示Ceph不要在数据分发中包含OSD。第二个命令停止OSD服务。在此之前,没有数据丢失。
以下命令销毁OSD。指定-cleanup选项以另外破坏分区表。
pveceph osd destroy < ID >
警告
上面的命令将破坏磁盘上的数据!
CEPH池
池是用于存储对象的逻辑组。它拥有P lacement ģ roups(PG,pg_num)对象的集合。
创建池
如果未提供任何选项,则为服务于降级状态的对象设置默认的128个PG,3个副本的大小和2个副本的min_size。
注意
PG的默认数量适用于2-5个磁盘。如果集群中的PG太少或太多,Ceph都会抛出 HEALTH_WARNING。
警告
不要将min_size设置为1。当min_size为1的复制池只有一个副本时,它允许在对象上进行I / O操作,这可能导致数据丢失,PG不完整或找不到对象。
建议根据您的设置计算PG编号,您可以在线找到公式和PG计算器[ 8 ]。从Ceph Nautilus开始,以后在[ 9 ]中可以增加和减少PG的数量。
您可以通过命令行或在Ceph→Pools下的每个PVE主机上的GUI上创建 池。
pveceph pool create <name>
如果您还希望自动获取池的存储定义,请在GUI中选中“添加存储”复选框,或在创建池时使用命令行选项 --add_storages。
有关Ceph池处理的更多信息,请参见Ceph池操作[ 10 ] 手册。
销毁池
要通过GUI破坏池,请在树视图中选择一个节点,然后转到 Ceph→池面板。选择要销毁的池,然后单击销毁 按钮。要确认销毁池,您需要输入池名称。
运行以下命令以销毁池。指定-remove_storages还可以删除关联的存储。
pveceph pool destroy <name>
注意
删除池中的数据是一项后台任务,可能需要一些时间。您会注意到集群中的数据使用量正在减少。
Ceph CRUSH和设备类
Ceph的的基础是其算法,Ç ontrolled ř eplication ù的nDer小号calable ħ灰化(CRUSH [ 11 ])。
CRUSH计算存储位置和从中检索数据的位置,其优点是不需要中央索引服务。CRUSH使用OSD映射,存储区的存储桶(设备位置)和规则集(数据复制)。
注意
可以在Ceph文档的CRUSH map [ 12 ]下找到更多信息。
可以更改此映射以反映不同的复制层次结构。在保持所需分布的同时,可以将对象副本分离(例如,故障域)。
一个常见的用例是对不同的Ceph池使用不同类别的磁盘。因此,Ceph引入了具有发光功能的设备类,以适应轻松生成规则集的需求。
设备类可以在ceph osd树输出中看到。这些类代表它们自己的根存储桶,可以通过以下命令看到。
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
要让池仅在特定设备类上分发其对象,您需要首先使用该特定类创建一个规则集。
ceph osd crush rule create-replicated <rule-name> <root> <failure-domain> <class>
规则名称,用于连接池(在GUI和CLI中可见)
它应该属于哪个粉碎根(默认ceph根“默认”)
对象应分配在哪个故障域(通常是主机)
使用哪种类型的OSD后备存储(例如nvme,ssd,hdd)
一旦规则在CRUSH映射中,您就可以告诉池使用规则集。
ceph osd pool set <pool-name> crush_rule <rule-name>
小提示
如果池中已经包含对象,则必须相应地移动所有这些对象。根据您的设置,这可能会给群集带来巨大的性能影响。或者,您可以创建一个新池并分别移动磁盘。
Ceph Client
然后,您可以将Proxmox VE配置为使用此类池来存储VM或容器映像。只需使用GUI即可添加新的RBD存储(请参阅“ Ceph RADOS块设备(RBD)”部分)。
您还需要将密钥环复制到外部Ceph集群的预定义位置。如果在Proxmox节点本身上安装了Ceph,则将自动完成。
注意
文件名需要是<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
CephFS
Ceph还提供了与RADOS块设备在同一对象存储之上运行的文件系统。甲中号ETA d ATA小号erver(MDS)是用于映射RADOS备份对象的文件和目录,允许提供一种符合POSIX的复制文件系统。如果已经使用ceph,这将使人们能够以一种简单的方式拥有一个集群化的高可用性共享文件系统。它的元数据服务器可确保文件在整个Ceph群集上保持平衡,这样即使是高负载也不会使单个主机过载,这对于传统的共享文件系统方法(例如NFS)可能是一个问题。
Proxmox VE支持这两种方式,即使用现有的CephFS作为存储 来保存备份,ISO文件或容器模板,以及创建超融合的CephFS本身。
元数据服务器(MDS)
CephFS需要配置和运行至少一台Metadata Server才能正常工作。您可以通过Proxmox VE Web GUI的Node-> CephFS面板或在命令行上简单地创建一个:
pveceph mds create
可以在一个群集中创建多个元数据服务器。但是使用默认设置时,任何时候都只能激活一个。如果MDS或其节点无响应(或崩溃),则另一个备用MDS将升级为active。使用create上的hotstandby参数选项可以加快主MDS和备用MDS之间的切换速度,或者如果已经创建,则可以设置/添加:
mds standby replay = true
在ceph.conf各自的MDS部分中。启用此功能后,此特定的MDS将始终轮询活动的MDS,以便在处于热状态时可以更快地接管 。但是自然地,主动轮询会对系统和主动MDS造成一些额外的性能影响。
多个活动MDS
由于Luminous(12.2.x),您还可以运行多个活动的元数据服务器,但这通常仅对大量并行客户端有用,否则MDS很少成为瓶颈。如果要设置此设置,请参阅ceph文档。[ 13 ]
创建CephFS
借助Proxmox VE的CephFS集成,您可以通过Web GUI,CLI或外部API接口轻松创建CephFS。为此,需要一些先决条件:
成功安装CephFS的前提条件:
- 安装Ceph软件包,如果前一段时间已经完成,则可能需要在最新的系统上重新运行它,以确保也安装了所有与CephFS相关的软件包。
- 设置监视器
- 设置OSD 设置至少一个MDS
完成所有检查并完成之后,您可以简单地通过Web GUI的Node-> CephFS面板或命令行工具pveceph创建CephFS,例如:
pveceph fs create --pg_num 128 --add-storage
这将创建一个名为`cephfs''的CephFS,使用一个具有128个放置组的名为'cephfs_data'的数据池和一个具有四分之一数据池放置组的名为'cephfs_metadata'的元 数据池( 32)。查看Proxmox VE管理的Ceph池章节,或访问Ceph文档以获取有关针对您的设置的配件放置组号(pg_num)的更多信息[ 14 ]。另外,
--add-storage '参数将在创建成功后将CephFS添加到Proxmox VE存储配置中。
销毁CephFS
警告
销毁CephFS将使其所有数据无法使用,无法撤消!
如果您确实要销毁现有的CephFS,则首先需要停止或销毁所有元数据服务器(M̀DS)。您可以通过Web GUI或命令行界面使用以下命令销毁它们:
pveceph mds destroy NAME
在承载MDS守护程序的每个Proxmox VE节点上。
然后,您可以通过发出以下命令来删除(销毁)CephFS:
ceph fs rm NAME --yes-i-really-mean-it
在托管Ceph的单个节点上。之后,您可能要删除创建的数据和元数据池,可以通过Web GUI或CLI使用以下方法完成:
pveceph pool destroy NAME
Ceph维护
更换OSD
Ceph中的常见维护任务之一是替换OSD的磁盘。如果磁盘已经处于故障状态,则可以继续执行销毁OSD中的步骤。如果可能,Ceph将在其余OSD上重新创建这些副本。一旦检测到OSD故障或OSD被主动停止,此平衡将立即开始。
注意
使用池的默认大小/ min_size(3/2),仅在'size + 1'个节点可用时才开始恢复。这是因为Ceph对象平衡器CRUSH默认为“故障域”的完整节点。
要更换仍在运行的磁盘,请在GUI上执行销毁OSD中的步骤 。唯一的增加是要等到群集显示HEALTH_OK之后,再停止OSD销毁它。
在命令行上,使用以下命令。
ceph osd out osd。<id>
您可以使用以下命令检查是否可以安全删除OSD。
ceph osd safe-to-destroy osd.<id>
一旦以上检查告诉您已保存删除OSD,则可以继续以下命令。
systemctl stop ceph-osd@
pveceph osd destroy
用新磁盘替换旧磁盘,并按照创建OSD中所述的相同步骤进行操作。
Trim/Discard
最好在VM或容器上定期运行fstrim(丢弃)。这将释放文件系统不再使用的数据块。它减少了数据使用量和资源负载。大多数现代操作系统都会定期向其磁盘发出此类丢弃命令。您只需要确保虚拟机启用了磁盘丢弃选项。
Scrub & Deep Scrub
Ceph通过清理放置组来确保数据完整性。Ceph检查PG中每个对象的健康状况。清理有两种形式:每日便宜的元数据检查和每周深度数据检查。每周一次的深度清理会读取对象并使用校验和来确保数据完整性。如果运行中的清理干扰了业务(性能)需求,则可以调整 执行清理[ 15 ]的时间。
Ceph监控和故障排除
一个好的开始是从初始部署开始就连续监视ceph的运行状况。既可以通过ceph工具本身,也可以通过Proxmox VE 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 /下都有一个日志文件 ,如果没有足够的详细信息,则可以调整日志级别[ 16 ]。
您可以 在官方网站上找到有关Ceph群集故障排除的更多信息 [ 17 ]。
- Ceph intro https://docs.ceph.com/en/nautilus/start/intro/
- Ceph architecture https://docs.ceph.com/en/nautilus/architecture/
- Ceph glossary https://docs.ceph.com/en/nautilus/glossary
- Full Mesh Network for Ceph https://pve.proxmox.com/wiki/Full_Mesh_Network_for_Ceph_Server
- Ceph Monitor https://docs.ceph.com/en/nautilus/start/intro/
- Ceph Manager https://docs.ceph.com/en/nautilus/mgr/
- Ceph Bluestore https://ceph.com/community/new-luminous-bluestore/
- PG calculator https://ceph.com/pgcalc/
- Placement Groups https://docs.ceph.com/en/nautilus/rados/operations/placement-groups/
- 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
- CRUSH map https://docs.ceph.com/en/nautilus/rados/operations/crush-map/
- 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/
- 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/