汇出器:侦测微事故以改善存储性能

09.27.2019  - 作者  在 云端

开源软体,透明化和基础架构是 Gandi 本质的三大概念。我们近期的其中一个目标就是希望能更快地侦测到微小的问题,进而提高我们为用户提供的服务品质。

Nicolas Belouin,代管团队的系统工程师,他开发了一些工具以更好地监控 Gandi 的存储设备性能。

如果您有兴趣,您们可以在 Gandi 的 GitHub 上找到这些开源工具。

Gandi 存储设备基础架构的摘要

Gandi 存储设备主要提供给两个环境使用:一个是 IaaS,另一个是 PaaS。 两者都是以 FreeBSD 系统为底的储存技术 (filers) 为基础,该系统会储存每个存储卷 (硬碟),就如同 ZFS 空间一样。

提供给两种不同的用户使用:

  • Gandi 云 (IaaS) 服务使用的是 iSCSI。这使我们可以直接提供给用户使用『区块』。透过这种方式,我们的客户能够使用他们认为合适的储存方式。在 FreeBSD 上, 管理该服务的程式称为 “CTLD”。
  • Gandi Simple Hosting 服务则是透过 NFS 的方式使用让用户使用档案系统。在这裡,我们使用的是 “Ganesha” 去作为 NFS 的服务。

为什麽要使用这些汇出器呢?

虽然 Gandi 之前已经拥有能够侦测主要事故 (例如:存储设备无回应) 的工具,但为了能够监控这些不同的服务 (CTLD 或是 Ganesha) 而选择使用汇出器。然而,实际上并没有任何一个简单的方法可以侦测这些在微小或是极微小的事故(像是:存储设备的性能下降)。因此需要一个系统在客户资料数据传递异常而可能导致事故的时候通知我们。现阶段的目标是在存储设备上不再有读取/写入操作的时候侦测出问题。虽然服务程式依然是启用的,但有时会处于不稳定的状态。

请注意,我们不会直接监控每个档案系统中的每个空间,因为客户可能有几个储存空间但是不执行任何操作。如果『操作』的数量下降到太低或突然间下降太多,就会进行档案系统监控。

而这就是 Ganesha 和 CTLD 汇出器的目标:能够更好、更快速地侦测到微小问题,以提高我们为用户提供的服务品质

此外,还有一些额外效果:

  • 对档案系统的状态有更好地了解
  • 轻鬆取得那些以前较不易取得的複杂数据,例如档案系统正在使用的储存空间的实际数量和时间
  • 更快地预测到何时档案系统会达到饱和

最后,关于这些汇出器的选择,我们选择的是 Prometheus,因为它也是 Gandi 内部使用的汇出器。

那这些汇出器又是如何运作呢?

所有汇出器都是以 Golang 撰写。可以使用静态编译的方式,简化部署的相依性。它拥有 Prometheus 的函式库,因此可以轻鬆地与其它技术整合以侦测问题。以 Ganesha NFS 服务器来说,使用 D-Bus 汇出统计数据的整合就相对简单。

对 CTLD 而言,汇出器使用一些呼叫系统以取得资讯。

具体来说,汇出器都遵循一个相同的原则:它们要在特定的标准埠上建立 HTTP 伺服器。Prometheus 计画有一个 Wiki 页面,每个汇出器的建立者都将在那裡注册他们要使用于项目的埠,以协调社群。

这样一来,它可以在『保留』埠上进行侦听。当它收到请求后,会去查询底层系统 (Ganesha 或 CTLD)、接着计算数据,然后将资料以统一格式发送给请求者。

汇出器安装在所有存储设备上,并在所选的标准埠上进行资料传递。

数据被重新传送回 Prometheus 服务,该服务会定期取得要收集的来源列表。它将去查询所有档案系统,以取得整个存储基础架构上的数据。最后,这些数据会被呈现在我们的 Grafana 上, 让团队能够使用可视仪表板。

我们目前正在努力建立警报功能。自三个月前实施以来,它已经成功分析多起事故。

Xen 汇出器

为了更好地追踪我们的 PaaS 和 IaaS 解决方案中 “主机” 的使用情况,代管团队也致力于研究 Xen 汇出器。为了运行我们的 Cloud 资源计费服务,我们已经具有关于虚拟机器的数据,然而我们仍然没有足够关于我们主机伺服器运行状况的数据。

由于安全要素,Gandi 不再在其 IaaS 处理器上使用超执行绪。为了衡量其影响,我们还需要以更精确的方式追踪性能。

Xen 汇出器的角色是追踪有关主机和虚拟机器的所有数据。目前有一种很好的 Xen 汇出器,但是它适用于 Xen 伺服器( Citrix 发行的 Xen 的商业版本),而我们使用的则是 libXL。

我们因此开发 Xen 汇出器以与 libXL 协同运作。

该汇出器也是使用 Go 建立的,因为 Xen 为 libXL 提供 Go 介面。 儘管这个介面目前有一定的限制,但已经足以满足汇出器的需求。

最后,如果您对 Xen 汇出器有兴趣,请注意,该汇出器目前不使用标准 Xen 进行编译,因为它需要我们对 Xen 项目进行某些补充,而这些补充仍在等待发佈。

Gandi 在 GitHub 上的项目

开源软体是 Gandi DNA 的一部分

透过公开我们的计画,其它具有相同问题的公司或个人用户也可以使用我们工作的成果,并为改善其功能做出贡献。另一目标则是建立一个贡献者的社群,以使项目能够继续地在 Gandi 内独立进行。

通常我们会一直努力拉近这些汇出器与社群之间的距离。我们在网路上发现许多没有完全遵守规则的汇出器,也因为这样限制了它们重複使用和共享的能力。

这就是为什麽要使其容易重複使用,Gandi 尝试尽可能地保持标准,并始终保持最大的弹性。

词彙表

有什麽相关问题想要问我们的 Hosting 团队吗?请不吝于文章下方留言或是透过后方连结与我们联繫:https://help.gandi.net

点选连结,了解更多关于 Gandi 的 Simple Hosting 服务