Skip to content

Latest commit

 

History

History
237 lines (151 loc) · 13.3 KB

File metadata and controls

237 lines (151 loc) · 13.3 KB

五、Gluster 系统中的性能分析

第 4 章在云基础设施上使用 GlusterFS,我们已经完成了 GlusterFS 的工作实现,我们可以专注于解决方案的测试方面。我们将从高层次概述部署的内容,并解释所选组件背后的原因。

一旦定义了配置,我们就可以通过测试性能来验证我们是否达到了预期的结果。然后,我们可以通过在执行输入/输出时故意关闭节点来进行可用性测试

最后,我们将了解如何纵向和横向扩展解决方案。

在本章中,我们将涵盖以下主题:

  • 实施的高级概述
  • 进行性能测试
  • 性能可用性测试
  • 垂直和水平缩放解决方案

技术要求

这是本章的技术资源列表:

实施概述

第 4 章中部署并配置了解决方案后,在云基础架构上使用 GlusterFS,我们可以验证实施的性能。主要目标是了解如何做到这一点以及可用的工具。

让我们先退一步,看看我们实现了什么。

集群概述

第 4 章在云基础设施上使用 GlusterFS,我们在 Azure 虚拟机 ( VM 上部署了 GlusterFS 4.1 版本。我们使用 ZFS 作为砖块的存储后端,在三节点设置中每个节点使用四个磁盘。下图从高层次概述了这是如何分布的:

此设置提供 1 TB 的可用空间。该卷可以容忍整个节点宕机,同时仍向客户端提供数据。

这种设置应该能够提供大约每秒 375 兆字节 ( 兆字节/秒),一次处理几百个客户端,并且应该相当简单地进行水平和垂直扩展。

性能试验

我们现在需要验证理论性能可以通过实际实现来实现。让我们把它分成几个部分。

绩效理论

让我们根据设置的规格来确定应该获得多少性能。考虑每个节点应该提供最大 125 兆字节/秒的速度。磁盘子系统能够提供更高的性能,因为每个磁盘产生 60 兆字节/秒的速度

假设一个或多个客户端可以通过向卷发送或请求足够的数据来跟上速度,则总的可实现性能应该在 375 MB/s 左右。

性能工具

我们将使用三种主要工具来验证和测试解决方案的性能:

  • zpool iostat
  • iostat
  • 柔性 I/O 测试仪 ( 导线

这些工具中的每一个都在不同的级别上工作。现在让我们详细说明每个人都做了什么,以及如何理解他们提供的信息。

ZFS·兹普尔·约斯塔特司令部

ZFS 在后端卷级别工作;zpool iostat -v命令给出 ZFS 卷中每个成员的性能统计数据以及整个 ZFS 卷的统计数据。

该命令可以通过传递一个数字来提供实时数据,该数字以秒为单位,它将在该时间段过去后进行迭代。例如,zpool iostat -v 1每秒报告磁盘统计数据。这里,-v选项显示了池中的每个成员及其各自的数据。

该工具有助于以尽可能低的级别呈现性能,因为它显示了来自每个磁盘、每个节点的数据:

请注意,我们使用了额外的-L-P选项,以便打印设备文件的绝对路径或通用唯一标识符(UUID);这是因为我们使用每个磁盘的唯一标识符创建了池。

从前面的截图中,我们可以看到四个主要的组,如下所示:

  • pool:这是用每个成员创建的。
  • capacity:这是分配给每个设备的空间量。
  • operations:这是每个设备上完成的 IOPs 数量。
  • bandwidth:这是每个设备的吞吐量。

In the first line, the command prints the statistics since the last boot. Remember that this tool helps to present the performance from a ZFS-pool level.

监视磁盘状态

作为sysstat包的一部分,iostat提供每个设备的低级性能统计。iostat绕过文件系统和卷,显示系统中每个数据块设备的原始性能数据。

iostat工具可以运行选项来改变屏幕上打印的信息,例如iostat -dxctm 1。让我们探索每个部分的作用:

  • iostat:这是主命令。
  • d:打印设备利用率。
  • x:显示扩展设备统计。
  • c:显示 CPU 利用率。
  • t:显示打印每份报告的时间。
  • m:这保证了统计数据将以兆字节/秒显示。
  • 1:这是iostat打印数据的时间,单位为秒。

在下面的截图中,可以看到iostat在不同的列中显示信息:

没有必要浏览所有的列,但是最重要的列如下:

  • Device:显示系统中存在的阻塞设备。
  • r/s:这些是每秒的读操作。
  • w/s:这些是每秒的写操作。
  • rMB/s:这些是从设备读取的 MB/s。
  • wMB/s:这些是写入设备的兆字节/秒。
  • r_await:这是读取请求的平均时间,单位为毫秒。
  • w_await:这是写请求的平均时间,单位为毫秒。

avg-cpu %iowait时间相关的r_awaitw_await列是必不可少的;这是因为这些指标可以帮助确定其中一个设备是否比其他设备增加了延迟。高 CPU iowait时间意味着 CPU 持续等待 I/O 完成,这反过来可能意味着块设备具有高延迟。

iostat工具可以在集群中的每个节点上运行,为组成 GlusterFS 卷的每个磁盘提供低级统计信息。

Details on the rest of the columns can be found on the man page for iostat.

FIO 测试仪

FIO 是一个基准测试工具,用于通过生成合成工作负载和呈现输入/输出指标摘要来进行性能测试。

Note that fio does not come by default on CentOS, but it is available in the base repository and can be installed by running sudo yum install -y fio.

这个工具非常有用,因为它允许我们执行接近系统实际工作负载的测试,允许用户更改参数,如块大小、文件大小和线程数。FIO 可以提供接近真实世界性能的数据。这种级别的定制可能会令人困惑,因为它为工作负载模拟提供了许多选项,其中一些选项起初并不太直观。

用 FIO 执行测试最简单的方法是创建一个配置文件,它告诉软件如何表现;配置文件如下所示:

[global]
name=rw-nocache-random
rw=randrw
rwmixread=50
rwmixwrite=50
group_reporting=1
bs=1M
direct=1
numjobs=4
time_based=1
runtime=180
ioengine=libaio
iodepth=64

[file1]
size=10G
filename=rw-nocache-random.1

让我们将其分解,以便了解配置文件的每个部分是如何工作的:

  • [global]:表示影响整个测试的配置参数(可以设置单个文件的参数)。
  • name=:这是测试的名称;它可以是任何有意义的东西。
  • rw=randrw:这告诉 FIO 要执行什么类型的 I/O;在这种情况下,它进行随机读写。
  • rwmixreadrwmixwrite:它们告诉 FIO 要执行的读和写的百分比或混合——在本例中,是 50-50 的混合。
  • group_reporting=1:这用于给出整个测试的统计数据,而不是每个作业的统计数据。
  • bs=1M:这是 FIO 执行测试时使用的块大小;可以将其更改为模拟预期工作负载的值。
  • numjobs=4:控制每个文件打开多少线程。理想情况下,这可以用来匹配将使用存储的用户或线程的数量。
  • runtime=180:以秒为单位,控制测试将运行多长时间。
  • ioengine=libaio:这控制要使用的 I/O 引擎的类型。最常见的是libaio,因为它类似于大多数工作负载。
  • iodepth=64:控制测试的 I/O 深度;更高的数量允许存储设备被最充分地使用。

最后,文件组控制为测试创建多少文件以及它们的大小。某些设置,如iodepth,可以添加到该组中,这些设置只影响定义参数的文件。另一个考虑是fio根据每个文件的numjobs参数打开一个线程。在前面的配置中,它将总共打开 16 个线程。

要运行 FIO,只需移动到装载点所在的目录,并将其指向配置文件,如下所示:

cd /gvol1
fio /root/test.fio

Note that FIO requires root privileges, so make sure that FIO is run with sudo.

当 FIO 运行时,它会显示吞吐量和 IOPS 等统计信息:

一旦完成,FIO 会在屏幕上报告测试统计数据。要寻找的主要是 IOPS 和带宽 ( 带宽)用于读写操作:

从测试结果中,我们可以看到 GlusterFS 卷可以同时支持大约 150 MB/s 的读写操作。我们比集群的理论最大性能降低了 75mb/s;在这种特殊情况下,我们达到了网络限制。

FIO 在验证性能和检测问题方面非常有效;fio可以在安装 Gluster 卷的客户端上运行,也可以直接在每个节点的砖块上运行。您可以使用 FIO 测试现有解决方案,以验证性能需求;只需确保根据需要测试的内容更改 FIO 配置中的设置。

GlusterFS provides some tools to monitor performance from the perspective of volume. These can be found in the GlusterFS documentation page, under Monitoring Workload.

可用性测试

确保群集能够容忍节点宕机至关重要,因为我们可以确认如果节点丢失,不会发生宕机。

这可以通过强制关闭其中一个节点,而其他节点继续提供数据来实现。为了充当合成工作负载,我们可以使用 FIO 在其中一个节点关闭时执行连续测试。

在下面的截图中,我们可以看到gfs2节点不存在,但是 FIO 测试按照预期继续提供数据:

缩放比例

调整这种设置相对简单。如前所述,我们可以通过向每个节点添加更多磁盘来纵向扩展,也可以通过向集群添加更多节点来横向扩展。

纵向扩展比横向扩展简单得多,因为它需要更少的资源。例如,可以在每个节点上将单个磁盘添加到 ZFS 池中,如果添加三个 128 GB 的磁盘,有效地将可用空间增加了 256 GB。

使用以下命令可以将磁盘添加到 ZFS 池:

zpool add brick1 /dev/disk/by-id/<disk-id>

从前面的命令来看,brick1是池的名称,disk-id是最近添加的一个或多个磁盘的 UUID。

水平扩展需要在新节点上镜像精确的设置,然后将其添加到集群中。这需要一组新磁盘。优点是可用空间和性能将相应增长。

摘要

在本章中,我们回顾了在前面的第 4 章中对在云基础设施上使用 GlusterFS 所做的实现的概述,这样我们就可以对实现了什么有一个新的了解,以便了解如何测试性能。根据前面的设置,该实现理论上应该能够达到 375 兆字节/秒的吞吐量。我们可以用几个不同级别的工具来验证这个数字。

对于 ZFS 卷,我们可以使用zpool iostat命令,该命令为属于 ZFS 卷的每个数据块设备提供数据。iostat可用于确定系统中所有数据块设备的性能。这些命令只能在群集的每个节点上运行。为了能够验证实现的实际性能,我们使用了 FIO 工具,该工具可以通过更改 I/O 执行方式的参数来模拟特定的工作负载。该工具可以在块级别的每个节点上使用,也可以在 GlusterFS 卷上的每个 Gluster 客户端上使用,以获得群集可实现的性能的总体概述。

在通过 FIO 执行测试时,我们了解了如何通过有意关闭其中一个节点来执行可用性测试。最后,可以纵向扩展解决方案,向每个节点中的每个卷添加磁盘,或者横向扩展解决方案,向群集添加一个全新的节点。本章的主要内容是考虑如何使用广泛可用的工具来验证所实现的配置。这些只是一套工具。许多其他工具也可能可用,这可能对您正在实施的解决方案更好。

在下一章中,我们将开始创建一个高度可用的自我修复架构。

问题

  1. 什么是 MB/s?
  2. 什么是zpool iostat
  3. 哪里可以跑zpool iostat
  4. 什么是iostat
  5. r_await是什么意思?
  6. 什么是 CPU IOWAIT 时间?
  7. 什么是 FIO?
  8. 如何运行 FIO?
  9. 什么是 FIO 配置文件?
  10. 如何验证 Gluster 集群中的可用性?
  11. 如何纵向扩展?

进一步阅读