问题描述
投产 Ceph 之前,需要做好充分的集群规划,才能在后续实践中得到满意的集群性能,同时降低运维难度。如果集群规划不当,将可能给集群扩容、升级、维护等带来很多麻烦;
解决方案
Ch.1 需求确认
Ch.2 版本选择
Ch.3 硬件选型
Ch.4 操作系统
Ch.5 服务规划
Ch.6 配置策略
Ch.1 确认场景
根据存储需求和使用场景,来制定 Ceph 的硬件选型需要;
高性能场景(IOPS)
特征:这种配置的类型亮点在于它在低 TCO(ownership 的总消耗)下每秒拥有最高的 IOPS;
实现:典型的做法是使用包含了更快的 SSD 硬盘、PCIe SSD、NVMe 做数据存储的高性能节点;
场景:通常用于块存储;也可以用在高 IOPS 的工作负载上:随着闪存使用的增加,企业越来越多地将 IOPS 密集型工作负载(例如 MySQL、MariaDB 或 PostgreSQL 等等)托管在 Ceph 集群,以便提高私有云存储解决方案性能,并支持结构化数据;
推荐配置:
CPU:假定主频 2GHz,则每个 NVMe SSD 使用 6vCPU,每个非 NVMe SSD 使用 2vCPU;
RAM:16GB + OSD * 5GB(16GB 作为基线,每个 OSD 使用 5GB 内存)
DISK:NVMe SSD
Bluestore WAL/DB:可与 NVMe SSD 同盘;
磁盘控制器:PCIe
OSD 进程数:每个 NVMe SSD 分配 OSD * 2 进程;
网络:每 OSD * 2 使用 10GB 网络;
通用场景(Bandwidth)
特征:亮点在于高吞吐量和每吞吐量的低功耗;
实现:通用的做法是拥有一个高带宽、物理隔离的双重网络,使用 SSD 和 PCIe SSD 做 OSD 日志盘;
场景:这种方法常用于块存储,如果你的应用场景需要高性能的对象存储和文件存储,也可以考虑使用;对于存储非结构化数据的用户,制定吞吐量大的方案即可;
Ceph 集群通常可以存储半结构化数据或非结构化数据,一般是顺序读写较大的文件,需要提供很大的带宽。存储服务器上的磁盘可以使用基础 SSD 做日志加速的 HDD 盘;
推荐配置:
1)CPU:假定主频 2GHz,则每个 HDD 使用 2vCPU,通常不需要使用 SSD 存储;
2)RAM:16GB + OSD * 5GB(16GB 作为基线,每个 OSD 使用 5GB 内存)
3)DISK:HDD (7200 RPM SATA/SAS)
4)Bluestore WAL/DB:使用 SAS SSD / NVMe SSD 进行加速;
5)磁盘控制器:HBA(JBOD)
6)OSD 进程:每个 HDD 分配 OSD * 1 进程;
7)网络:每 OSD * 12 使用 10GB 网络;
大容量场景(Capacity)
特征:亮点在于数据中心每 TB 存储的低成本,以及机架单元物理空间的低成本。也被称为经济存储、廉价存储、存档 / 长期存储;
实现:通用的做法是使用插满机械硬盘的密集服务器,一般是 36~72 台服务器,每台服务器 4~6TB 的物理硬盘空间;
场景:通常用于低功耗、大存储容量的对象存储和文件存储。一个好的备选方案是采用纠删码来最大化存储容量;通常,低成本和高容量的解决方案用于处理存储容量较大、存储时间较长的数据,且按块顺序读写。数据可以是半结构化的,也可以是非结构化的。存储内容包括媒体文件、大数据分析文件和磁盘镜像备份等。为了获得更高的效益,OSD 通常托管在 HDD 上,Ceph 的日志也存储在 HDD 上;
推荐配置:
1)CPU:假定主频 2GHz,则每个 HDD 使用 0.5vCPU
2)RAM:16GB + OSD * 5GB(16GB 作为基线,每个 OSD 使用 5GB 内存)
3)DISK:HDD (7200 RPM SATA/SAS)
4)Bluestore WAL/DB:使用 HDD 同盘即可;
5)磁盘控制器:HBA(JBOD)
6)OSD 进程:每个 HDD 分配 OSD * 1 进程;
7)网络:每 OSD * 12 使用 10GB 网络;
注意事项
另外,Ceph 存储数据是按照 2MB 为基本单位进行读写的,即便是小文件也要按照此种方式进行操作。写入时要组成 2MB 的块一次性写入,读取时一次性读取 2MB 的块。如果用户数据为字节级别,频繁读写将对 Ceph 的性能产生冲击;
因此,在设计原理的限制下,你在投产 Ceph 时必须要考虑清楚其使用场景。如果不满足 Ceph 的使用场景,此类数据建议不要放入 Ceph 中;
Ch.2 版本选择
规划 Ceph Cluter 之前,需要了解和确定将要部署的 Ceph 集群版本、功能、要求、限制条件,这些问题将会对后面的决策(诸如硬件选型、组网规划等等)产生影响,然后再针对这些限制条件做出合理的架构规划;
开源版本
参考 Ceph Releases (index) — Ceph Documentation 文档,以了解 Ceph 的发布历史,以及相关详细信息;
Quincy 2022-04-19 17.2.5 2024-06-01 Pacific 2021-03-31 16.2.10 2023-06-01 Octopus 2020-03-23 15.2.17 2022-06-01 Nautilus 2019-03-19 14.2.22 2021-06-30 Mimic 2018-06-01 13.2.10 2020-07-22 Luminous 2017-08-01 12.2.13 2020-03-01 Kraken 2017-01-01 11.2.1 2017-08-01 Jewel 2016-04-01 10.2.11 2018-07-01 Infernalis 2015-11-01 9.2.1 2016-04-01 Hammer 2015-04-01 0.94.10 2017-08-01 Giant 2014-10-01 0.87.2 2015-04-01 Firefly 2014-05-01 0.80.11 2016-04-01 Emperor 2013-11-01 0.72.2 2014-05-01 Dumpling 2013-08-01 0.67.11 2015-05-01
企业版本
Red Hat Ceph Storage https://www.redhat.com/en/technologies/storage/ceph
针对 Open-source Ceph 与 Red Hat Ceph 的对应关系,建议阅读官方文档。鉴于我们暂时不使用 Red Hat Ceph,所以我们暂时不关注二者版本对应关系;
Ch.3 硬件选型
硬件选型没有黄金法则,因为它依赖各种因素,比如预算、性能和容量,或者两种的结合、容错性,以及使用场景;
设计原理决定其对网络和硬件设备的依赖较为明显,因此投产 Ceph 的环境必须使用万兆网络,同时配置 SSD 硬盘设备对集群进行写加速;
Ceph 服务器分了几种角色,每种角色都对应集群的一类功能,主要包括 MON(Ceph 集群的 Monitor 节点)、OSD(Ceph 集群的存储节点)、MGR(Ceph 集群的管理节点)、RGW(Ceph 集群的对象网关节点)、MDS(CephFS 元数据节点)、iSCSI 网关、NFS 集群网关和 Ceph 客户端。不同类型角色,其对资源的依赖情况也不相同;
CPU
Ceph MDS 会动态地重新分配负载,它是 CPU 敏感性的,所以 Metadata Server 应该有比较好的处理器性能(比如四核 CPU);
Ceph OSD 进程来执行最终数据落盘的相关操作,涉及数据的分片和重组,并且每个存储节点上都运行许多(根据磁盘数量决定)Ceph OSD 进程,所以对 CPU 有一定的要求;
Ceph Mon 简单地维护了 Cluster Map 的主干信息,所以 Ceph Mon 是 CPU 不敏感的;
Memory
Ceph MDS 以及 Ceph Mon 必须能够快速地提供数据,因此必须有充足的内存(至少每个进程 1GB);
针对 Ceph OSD 进程,通常来说,内存越多越好
2)但是,在执行恢复操作时,就需要大量的内存(例如,每进程每 TB 数据需要约 1GB 内存);
3~6GB RAM 对应 1 HDD OSD 进程
8~12GB RAM 对应 1 SSD OSD 进程
1)16GB RAM(操作系统运行+服务进程)
2)3~6GB RAM×20(每个 HDD 类型的 OSD 进程使用)
3)8~12GB RAM×4(每个 SSD 类型的 OSD 进程使用或做加速)
Network
网络配置对于构建高性能 Ceph 集群至关重要。Ceph 集群不能取代 Ceph 客户端执行请求路由或调度,而是由 Ceph 客户端直接向 Ceph OSD 守护进程发出请求。Ceph OSD 会向 Ceph 客户端执行数据复制,这意味着数据复制会在 Ceph 集群的网络上进行,且必然会带来很大的网络负载;
由于 Ceph 集群最初的设计是为了提高集群的性能,并且考虑到集群网络的带宽要求,因此将集群内部流量与客户端到集群流量进行隔离,从而设计两层网络。如果不配置两个网络,Ceph 的所有流量都会使用同一个网络,这样性能就会相对较低,并且流量高峰时会相互影响;
Ceph 对网络带宽要求高,其 I/O 性能取决于网络性能,所以在 Ceph 项目建设中网络建设是至关重要的一环;
集群究竟需要多大网络带宽,这和集群内的硬件资源配置有很大关系,要看追求的是 IOPS 还是 Bandwidth:
2)在追求 Bandwidth 的服务器上,可以配置 12 * HDD 类型的 OSD 使用 10G 网络;
关于 Firewall 配置:
Disk
规划数据存储时要考虑成本和性能的权衡。Ceph 集群的性能很大程度上取决于存储介质的有效选择。应该在选择存储介质之前了解集群的工作负载和性能需求;
磁盘冗余:
RAID 会给 Ceph 的性能带来影响,而且在成本和存储空间上造成了不必要的浪费。所以在硬件层面不推荐配置 RAID,将服务器的磁盘直接配置成 JBOD 模式即可。如果服务器不支持 JBOD 模式,就配置成 RAID0;
磁盘类型:
2)追求 Bandwidth 的使用者,使用 HDD+SSD(加速用)进行组合,将降低集群成本。若优化得当,也能得到不错的 IOPS 效果;
日志加速:
若想在 SATA/SAS SSD 之外获得高性能,SSD 和 HDD 的比例应该是 1:4(或 1:5);
PCIe 或 NVMe 闪存设备的情况,取决于设备性能,SSD 和 HDD 比例在 1:10 ~ 1:18 之间;
通过对日志做 RAID1 来解决单个 SSD 故障问题,但这会增加成本。如果希望提升性能,那该投入是值得的;
如果希望降低成本,那么从大容量的机械硬盘中分配少量 GB 的空间给日志盘,其余容量用于 OSD 数据;
磁盘分区:
副本数量
Ch.4 操作系统
系统版本
Ceph 需要以 Linux 操作系统为运行环境,建议阅读 OS Recommendations 文档,以获取针对操作系统的详细要求;
Quincy 17.2.z | CentOS 8 | Ubuntu 20.04 | OpenSUSE 15.3 | Debian 11
Filesystem
当前 Bluestore 不再依赖于文件系统,所以针对 Bluestore 没有文件系统的限制考虑;
Ch.5 服务规划
在规划集群时,Ceph 的各种组件应尽量避免复用。虽然复用能节省服务器的数量,但是实践证明,组件角色复用会给集群的运维和性能带来很大的影响。这不是最佳实践该有的设计模式,因此你在规划 Ceph 集群的时候,请尽量避免组件角色复用。—— 《Ceph 企业级分布式存储: 原理与工程实践》,我们并不理解这些组件复用是什么意思,或许是指:例如:将 OSD 节点同时用作 MON 节点,或将 MDS 节点同时用作 RGW 节点等;
同时,正确选择服务器或虚拟机,部分服务无法(或不建议)在虚拟机中运行,以避免给集群运行带来不稳定因素;
在考虑安全性与可靠性的前提下,你必须满足如下限制要求:
组件 | 裸机 | 虚机 | 容器 | 补充说明 |
---|---|---|---|---|
OSD | o | x | o | 每个节点至少配置 3 个 OSD; 所有的 OSD 节点配置相同; 仅支持服务器直通存储设备; 不支持外部 SAN 通过 FC/iSCSI 连接到服务器的存储设备; |
Monitor (with Mgr) | o | o | o | 至少配置 3 个 Monitor(MON)节点; 磁盘数量超过 750 个时,建议 Mon * 5; Ceph Mon 与 Ceph Mgr 可以运行在同个节点上; 至少配置 2 个 Manger(MGR)节点; |
RGW/NFS Gateway | o | o | o | 如果要使用 Ceph 对象网关,至少配置 2 个不同的 RGW 节点; |
MDS | o | x | o | 如果要使用 CephFS,至少配置 2 个节点; 且需要配置完全相同的 MDS 节点; |
iSCSI Gateway | o | x | o | 针对每个集群,需要部署 2-4 个 iSCSI 网关; |
Dashboard | o | o | o |
Ch.6 配置策略
选定的 Ceph 集群版本并不是支持所有的功能特性,或者说不是所有功能特性都是稳定的。你必须选择稳定的功能特性,而在选定的功能特性中,还要按照要求配置集群,否则将给集群的稳定性带来隐患;
如下提到的几种指标及推荐配置是经过企业落地实践检验的,可供参考:
副本策略
SSD,支持 2 副本,最少 1 副本;HDD,支持 3 副本,最少 2 副本;
注意,副本数减少将影响可靠性;
纠删码
支持 RGW / RBD 两种模式使用纠删码,MDS 不支持使用纠删码;
纠删码 K+M 建议取值:8+3 或 8+4 或 4+2,而 OSD 最小数量为 K+M+1;
RGW 多站点
多站点配置中,不支持 Indexless Bucket 特性;
磁盘大小
单盘最大 12T,不支持 SMR1 特性;
最大的 OSD 数量
单节点最多 OSD * 36,集群点最多 OSD * 2500,
快照(Snapshot)
单个 RBD 支持 512 个快照,快照不支持 RGW;
Bulustore
必须使用默认的分配器;
成本规划
根据业务需求,制定合理规划,然后计算成本。如果成本较高,则缩减规模;
服务部署
1)on Kubernetes
2)with Cephadm
在生产环境中,Kubernetes Cluster,我们将使用 Rook Ceph 进行部署;
版本升级
升级顺序:
1)工具升级;
2)MON Daemon
3)OSD Daemon
4)MDS Daemon
5)RWS Daemon
参考文献
《Ceph 分布式存储实战, Ceph 中国社区, 2016》