Ceph Day Warsaw (April 25, 2017)

2018年9月11日 thingee

大家好,Ceph 爱好者们!

关于 Ceph Day 即将在波兰举办的消息引起了我们开发团队的广泛关注。我们已经从内部到外部使用了 Ceph 几年了,能够分享我们对这种创新的 SDS 的看法和方法,这让我们感到非常兴奋!我们也只是好奇地想知道我们国家有多少人正在使用 Ceph 以及在哪些场景中使用。

有很多关于我们应该展示什么的想法。我们围绕 Ceph 构建了一个相当令人印象深刻的测试生态系统,基本上我们想分享每一行代码,是的,这是研发工程师的典型方法;) 在经过数小时的辩论后,我们最终选择了“FakeMon”和“CPM”,这是我们最新开发的两个工具,我们为它们感到自豪。

幽灵集群

FakeMon 是我们内部的工具,可以模拟任何大小和任何状态的集群。当您编写复杂的监控软件时,您需要确保它能够处理可能发生的任何情况。在进行一些艰难(核心)的重构和重写期间,我们遇到了一个无法打破或绕过的障碍——这个障碍就是时间。从字面上看,我们需要等待数小时甚至数天才能创建应该被我们的新监控软件注意到并正确处理的特定条件。

所以我们采取了一个捷径。

我们新的闪亮监控系统使用 RADOS 协议来获取 Ceph 集群的状态,但它实际上并不需要另一端的实际集群。它需要一个实体,该实体将像 Ceph 监控器一样行动和响应——响应健康状态查询,返回 OSD 数量、MON 数量等。这对于 FakeMon 来说是完美的工作——一个旨在节省大量时间,从而可以花更多时间在更重要的事情上,例如思考负反馈回路中放大倍率最大的运算放大器是什么,以及享受一杯咖啡的工具。是的,我们是研发工程师,我们“有点怪”好吗?

FakeMon 的核心是一个简单的 Messenger 代码示例,该示例使用从 ceph-mon 借用的健康计算代码片段进行喂养。当然,为了引入所需的条件,我们还添加了额外的命令。通过简短的设置,我们能够模拟大规模的“幽灵”集群降级,例如创建严重的脑裂条件或大规模断电,这会导致 90% 的 OSD 崩溃。

有关更多详细信息和示例,我们鼓励您,尊敬的读者,熟悉我们的 演示文稿

投掷火球

FakeMon 是一种测试通过集群状态喂养的监控软件的巧妙方法,但它仍然是一种更合成的方法,而现实生活中的条件并不总是像我们想象的那样。当您将硬件添加到此等式中时,实际上是在添加一种指定的行为。这种行为是由物理条件驱动的,例如 HDD 旋转盘头在没有违反基本定律的情况下无法缩短的时间量。此外,通常还有 HDD 固件,它是由一些才华横溢的嵌入式程序员编写的,在其之上通常还有 RAID 固件,再进一步就是内核文件系统驱动程序,最后是 Ceph 的 filestore 实现。当您将所有未处理的错误、解决方法、限制或程序员在软件/固件开发过程中选择的算法都加起来时,这将会是一个很长的过程。我仍然没有计算到可能以独特方式触发 Linux 内核中断的不同集群中的实际用户空间工作负载。

所以问题是:如何测试这种复杂的行为链?

答案是 2000 年电影《Takedown》中的一段改写对话。

“我们需要创造治疗终极疾病的终极方法,但第一步是创造这种疾病。”

投掷火球是一种我们称之为在我们的测试生态系统中引入非常困难的条件的技术:各种网络瓶颈、计算能力限制、硬件故障或不同的用户工作负载与不同的设置相结合。基本上,我们“投掷”一个火球(波动拳)到例如网络堆栈中,并观察它燃烧,观察 Ceph 行为,记录结论,调整配置,然后……一遍又一遍地投掷。为实现这一目的而开发的一种工具是 Ceph 进程管理器,请不要与 ceph-mgr 混淆,那完全是另外一回事。最初,该工具用于跟踪 ceph-osd 和 ceph-mon 活动,并确定我们引入的 Ceph 源代码中的微小更改是否足以创建与性能相关的拉取请求到 Ceph 的 GitHub 仓库。然后,我们稍微重写了它,并将其用于相反的目的——降低性能。

投掷火球——演示文稿

我们在 Ceph Day 上的演示就像跳入深水,我们不知道观众期望什么:Ceph 开发者、管理员、系统管理员、经理、Ceph 顾问,或者可能不是与 IT 紧密联系的人,只是好奇这个 SDS 是什么。

我们的第一个想法是典型的开发人员方法——让我们展示 Linux 终端和我们执行的一堆命令,肯定每个人都会理解。在我们喝了第二杯咖啡之后,我们意识到我们已经用我们的 FakeMon 演示文稿采用了这种方法,那么接下来呢,PowerPoint?不,“我们需要更深入”,带有 gif 和动画的 PowerPoint 演示文稿,也许是短片?三个咖啡杯之后,神经元开始像圣诞树一样发光,最终的想法诞生了——让我们为这个 Ceph Day 等式添加一个维度,并创建一个 3D 游戏界面来 Ceph 和投掷火球技术,并将 Ceph 健康状态作为 HUD 显示!

我们实际上做到了!

使用 Blender 和一些 Python(几乎)手工制作的图形,我们将 3D 对象、它们的行为和属性连接到不同国家的实际物理服务器房间。我们 3D 界面中的每个操作都会在真实硬件上产生真实的反应,并且我们可以在 HUD 显示屏上观察到所有内容。

我们还引发了各种操作,从运行 rados 基准测试到删除所需的公共/集群网络流量百分比,再到将所有 ceph-osd 进程移动到一个逻辑 CPU 核心。

当前的集群监控日志可以在我们 3D 服务器房间的墙壁之一上看到。此数据直接从 Ceph 馈送。

另一面墙显示 rados 基准测试输出,每秒刷新一次。

更多详细信息,请参阅我们的 演示文稿

最终想法和感谢

在短短的时间内(不到两周),我们设法为我们的测试工具添加了一个维度,并将它们移动到 3D。如果没有触发这一连锁反应的想法以及一起工作和相互支持的优秀团队,这一切都不会发生。

我特别感谢我们整个研发 GDC 罗兹团队

Klaudia Goczal, Zofia Domaradzka (FakeMon 联合开发者&演示者), Katarzyna Horodnicza, Maciej Pijanka (FakeMon 想法,3D 联合开发者), Adam Klimaszewski, Martin David Chacon Piza, Kacper Kolodziej (CPM 联合开发者), Zmitrovich Ihar, Dawid Gnilka, Mateusz Kolanski 和 Dan Garcia。

还要感谢所有参与将 Ceph 带到波兰的人员,以及 Ceph Day Warsaw 的所有演示者和参与者。

这真是一种乐趣。希望我们将来能再次相遇!

本文由:Igor Podoski (FakeMon 设计&开发,3D 想法,设计&开发,演示者) 贡献。

Irc: aiicore 在 #ceph-devel, #ceph。