前言
Ceph是一个可靠地、自动重均衡、自动恢复的分布式存储系统,根据场景划分可以将Ceph分为三大块,分别是对象存储、块设备存储和文件系统服务。
在虚拟化领域里,比较常用到的是Ceph的块设备存储,比如在OpenStack项目里,Ceph的块设备存储可以对接OpenStack的cinder后端存储、Glance的镜像存储和虚拟机的数据存储,比较直观的是Ceph集群可以提供一个raw格式的块存储来作为虚拟机实例的硬盘。
Ceph相比其它存储的优势点在于它不单单是存储,同时还充分利用了存储节点上的计算能力,在存储每一个数据时,都会通过计算得出该数据存储的位置,尽量将数据分布均衡,同时由于Ceph的良好设计,采用了CRUSH算法、HASH环等方法,使得它不存在传统的单点故障的问题,且随着规模的扩大性能并不会受到影响。
损坏 Ceph 集群的 10 种方式
以下是破坏 Ceph 集群的 10 种原始方法的摘要。
1、错误的 CRUSH 故障域:
如果您不正确地配置 CRUSH,这可能会导致问题。因此一定需要在您的集群上进行测试,以验证是否按预期处理了故障。
2、停用主机:
这种情况的一个示例是运行 size = 2、min_size = 1并且需要更换一些硬件的集群。归置组只剩下一个磁盘作为副本,如果丢失该磁盘,数据就会丢失。Ceph 集群将不得不被废弃并从头开始重建。
3、删除 MON 数据目录中的“日志”文件:
始终确保监视器有足够的磁盘空间,并且永远不要从其数据目录中手动删除文件。
4、删除错误的池:
在移除池之前仔细检查。更好的是,在移除池之前请其他人查看它。
5 、长时间设置noout标志:
始终确保集群的运行状态为 HEALTH_OK ,并查看集群是否处于 HEALTH_WARN 状态较长时间。
6、使用 nobarrier 选项安装 XFS:
由于新版本之后支持使用 Bluestore,这个问题 100% 解决了。因为 Bluestore 不再使用 XFS。
7、在没有 BBU 的 HBA 上启用写回:
在没有备用电池单元的情况下,切勿在 HBA 中打开写回缓存。
8、创建过多的归置组:
创建归置组时要小心。当集群需要重新re-peer所有归置组时,它可能会损害集群。
9、使用 2 副本:
假如一台主机被下电进行维护。现在,一部分数据依赖于一个磁盘。如果此磁盘发生故障,则所有数据都将丢失。
10、忽视监视器:
建议使用监视器专用硬件。
损坏 Ceph 集群的另外 6 种方法
以下是另外 6种方式的摘要:
11、不了解使用的自动化工具:
简而言之,了解您的自动化工具在做什么,为什么要这样做,并且绝对了解它不应该做什么。您还应该意识到,您的自动化工具应该可以帮助您执行您已经知道的内容。如果你想使用 Ceph,你应该了解 Ceph。例如,如果你想使用 Ceph 和 ceph-ansible,你应该了解 Ceph 和 Ansible。
12、运行 min_size=1:
我们建议您至少运行三个副本。但是,如果你不能,永远不要将你的 min_size 降低到低于 1,或者最好不要将你的冗余对象降低到“0”。确保您始终编写至少 1 个冗余对象。这也适用于纠删码。
13、未完全完成更新:
Ceph 的文档有时缺少部分细节。在某些情况下,根据 Ceph 的通用文档,完成升级工作。但是,如果您查看详细的 Ceph 版本的发行说明,很多步骤都被跳过甚至没有触及。因此,请仔细检查更新是否已完成。
14、过早完成更新:
请确保您不要过早完成升级,并且您确实遵循所有步骤。
15、在负载均衡器后面运行多个有相同 id 的 rbd:
我们有一个客户有 9 个 rbd,但只配置了 3 个后端rbd。对于每个 rbd,他们有 3 个进程在运行。他们都在跳过哪个是活跃的。在负载均衡器后面,这导致数百万个未完成的部分上传。客户的整个集群都满了。接下来,他们添加了新硬件,并且后续仍在添加新硬件。幸运的是,我们发现这是问题所在。为了解决这个问题,我们重命名了 6 个 rbd,清点了所有对象并确保它们都被清理干净。
16、盲目相信你的 PG 自动缩放:
有时候,一直到您写入数据,您才真正发现 PG 的配置不正确。您在写入大量数据的同时也拆分了所有归置组,导致性能非常差,最终严重影响客户应用。除非您额外采取相关措施,否则没有真正的方法可以解决它。