Gluster 性能测试

一旦你创建了一个 Gluster 卷,您需要验证它了 足够的性能,为您的应用程序,如果不是,你需要 一种方式来隔离问题的根本原因。

有两种类型的工作负载︰

  • 合成-运行一个测试程序,如下面
  • 应用程序-运行现有的应用程序

分析工具

理想情况下,最好使用的实际的应用程序要运行在 Gluster,但应用程序通常不告诉 sysadmin 很多性能问题在哪里,尤其是延迟 (响应时间) 的问题。 因此,有无创性分析 Gluster 可以衡量业绩看作由应用程序,而无需更改应用程序中内置的工具。 目前 Gluster 性能分析方法基于 io 统计翻译,并且包括︰

  • 客户端的性能分析-仪器一个 Gluster 挂载点或 libgfapi 到采样分析数据的过程。 在这种情况下,io 统计翻译是在"顶尖"的翻译堆栈,所以配置文件数据真正代表应用程序 (或保险丝挂载点) 要求 Gluster 做。 例如,单个应用程序写算一次作为写 FOP (文件操作) 调用,那写 FOP 的延迟时间包括堆栈中较低的空燃比译者所做的数据复制延迟。

  • 服务器端分析-这样做是使用"gluster 卷配置文件"命令 (和"gluster 卷顶"可以用来识别特定热文件中使用,也可以)。 服务器端分析可以随着时间推移,衡量整个 Gluster 卷的吞吐量,可以测量服务器端延迟。 然而,它并没有结合网络或客户端的延迟。 很难推断应用程序的行为,因为改变 I/O 工作负载的客户端的翻译 (例子︰ 擦除编码,缓存分层)。

总之,使用客户端的分析理解"为什么是我的应用程序没有响应"吗?和使用服务器端分析对于理解如何忙你 Gluster 卷是,什么样的工作量被应用于它 (即是它大多读吗? 是小文件?),和如何很好的 I/O 负载跨卷。

# 客户端的性能分析

要运行客户端的性能分析,

-gluster 卷配置文件你卷开始 -setfattr-n trusted.io 统计数据转储-v /tmp/io-stats-pre.txt/你/挂载点

这将生成客户端上指定的文件。 [Gvp-client.sh] (https://raw.githubusercontent.com/bengland2/parallel-libgfapi/master/gvp-client.sh) 类似的脚本可以自动执行此数据的集合。

TBS︰ 不同落物保护结构是什么,他们说的是什么意思。

# 服务器端分析

要运行它︰

-gluster 卷配置文件你卷开始 -定期重复此命令︰ gluster 卷配置文件你卷信息 -gluster 卷配置文件你卷停止

[Gvp.sh] (https://raw.githubusercontent.com/bengland2/parallel-libgfapi/master/gvp.sh) 类似的脚本可以帮助您自动执行此过程。

此数据的后处理过程的脚本是在发展,现在,让我们知道你需要什么,什么将是有用的格式提交数据。

测试工具

在本节中,我们建议可以使用到一些基本的工作负载测试 在广泛的一种独立于应用程序方法测量 Gluster 性能 各种象 POSIX 操作系统和运行时环境。我们

然后为解释提供一些术语和概念框架 这些结果。

我们在这里建议的工具被设计为运行在分布式 文件系统。这仍是一个相对较少的属性,用文件系统

基准,即使是现在 !有可用的大得多的基准集

这可以从一个单一的系统运行。虽然单系统结果

重要的是,他们并非最终保障措施的性能 分布式文件系统的能力。

-[装卸] (http://freecode.com/projects/fio)-对于大文件测试。 -[smallfile] (https://github.com/bengland2/smallfile)-为 纯工作量小文件测试 -[iozone] (http://www.iozone.org)-纯工作量大文件测试 [平行-libgfapi] (https://github.com/bengland2/parallel-libgfapi)-纯工作量 libgfapi 测试

SPECsfs2014 的"netmist"混合工作负载生成器可能适用于某些情况下,但并不是技术上的开源工具。此工具是由唐卡普斯,是 iozone 作者写的。

# # 装卸

装卸极其强大,从传统的发行版,不同于 iozone,很容易安装和日益强大的分布式的测试功能描述在其 — — 客户端参数上游截至 2015 年 5 月。若要使用这种模式下,通过启动每个工作负载生成器使用在主机上的装卸"服务器"实例启动︰

装卸 — — 服务器--daemonize=/var/run/fio-svr.pid

并确保您的防火墙允许通过端口 8765 为它。你现在可以运行测试集的主机使用类似的语法︰

装卸 — — 客户端 = 工作量 — — generator.list — — 输出格式 = json 我-workload.fiojob

你可以也使用它为分布式测试,然而,通过启动单独的主机上装卸实例、 照顾近可能,限制每个线程的吞吐量,同时启动所有装卸实例并指定运行的持续时间,而不是大量数据,以便所有装卸实例都结束大约在同一时间。然后,您可以从不同的主机,以得到一个有意义的聚合结果聚合装卸结果。

装卸也有不同的 I/O 引擎,特别是华敏陈撰写 * * libgfapi * * 为装卸,你可以使用装卸 Gluster 性能测试而无需使用保险丝的发动机。

在分布式模式下装卸的局限性︰

-企图蒙混过去-装卸计算基于最后一个线程完成的测试运行时的吞吐量。相比之下,iozone 在默认情况下基于当第一个线程完成工作量计算吞吐量。这可以导致 iozone,(看似)? 高吞吐量结果,因为不可避免地会有一瘸一拐向终点线比别人晚一些"离散"线程。它是可能在某些情况下,要克服这种限制通过指定测试的时间限制。这非常适合随机 I/O 测试后,在那里通常你不想读/写文件整机反正。

-不准确时响应时间 > 1 秒-至少在一些情况下装卸报道过高 IOPS 装卸线程遇到响应时间远大于 1 秒时,这可以发生分布式存储时在执行不公平。 -io 引擎没有集成。

# # smallfile 分布式 I/O 基准

[] Smallfile(https://forge.gluster.org/smallfile-performance-testing) 是基于 python 的小文件分布式 POSIX 工作负载生成器,可以用来快速测量各种元数据密集型工作负载的性能在整个群集。它具有不依赖于任何特定的文件系统或执行 AFAIK。它在 Linux,Windows 上运行,也应该工作在大多数 Unix 上。它目的是补充 iozone 基准测量性能的大文件的工作负载,使用和借用某些概念从 iozone 和 Ric 惠 fs_mark。它由本英格兰在 2009 年 3 月开始开发,现在开放源码 (Apache 许可证 v2)。

这里是一个典型的简单序列的测试在哪里在随后的测试中,然后使用文件规定在初始创建测试。有很多更多 smallfile 操作类型比这些 5 (见 doc),但这些都是最常用的。

SMF="./smallfile_cli.py — — 顶部 /mnt/glusterfs/smf — — 主机设置 h1、 h2、 h3、 h4 — — 线程 8 — — 文件大小 4 — — 文件 10000 — — 响应时间 Y" $SMF — — 操作创建 在 $SERVERS; s做 ssh $h ' 回声 3 > /proc/sys/vm/drop_caches;完成

$SMF — — 读操作 $SMF — — 操作追加 $SMF — — 重命名操作 $SMF — — 操作删除

# # iozone

此工具有局限性,但分布式测试井使用的方法-+ m 选项 (见下文)。

"-"选项的所有用例的自动化测试气馁, 因为︰

-这不允许你放弃读的缓存在服务器之前 测试。 -大多数的被测量的数据点将无关 你解决问题。

单线程测试是重要的用例,但要充分利用 可用的硬件,您通常需要做多线程的甚至 多主机测试。

请考虑使用"-汉英"选项来测量到的数据所需要的时间 达到持久性存储。"-C"选项允许你看到多少每个线程

参加了测试。"-+ n"允许您通过跳绳来节省时间

重新读取和重新编写测试。"-w"选项告诉 iozone 不能删除任何

访问它,以便后续的测试可以使用他们的文件。指定

与每个测试这些选项︰

--i — — 测试类型,0 = 写,1 = 读,2 = 随机读/写 --r — — 数据传输大小 — — 允许您模拟所使用的 I/O 大小 应用程序 --s — — 每个线程文件大小 — — 选择此选项可将足够大的 系统达到稳定状态 (通常所需的多个 GB) --t — — 数量的线程 — — 多少子进程会 同时发出 I/O 请求 --F — — 的文件的列表 — — 读/写的文件。如果你不这样做

然后指定文件名 iozone。假人.\ * 将使用在

默认的目录。

与 64 KB 传输大小 8 线程顺序写入测试的示例 和文件大小为 1 GB 到共享 Gluster 挂载点目录 产妇和新生儿破伤风/glusterfs,包括 fsync() 和 close () 中的文件的时间 吞吐量计算︰

iozone-w-c e-i 0-+ n-C-r 64 k-s 1 g-t 8-F /mnt/glusterfs/f{0,1,2,3,4,5,6,7,8}.ioz

警告︰ 在 iozone 随机 I/O 测试是非常有限的 iozone 它必须随机读取然后随机的约束写整个 文件 !这是不是我们想要的 — — 相反它应随机读/写

为部分文件大小或持续时间,使我们能够传播 在不太长时间等待测试完成时磁盘上的更多。这

就是为什么装卸 (见下文) 是首选的测试工具对随机 I/O 工作负载。

分布式测试是一种力量 iozone 实用程序,但这 需要使用"-+ m"选项代替"-F"选项。配置

文件传递与"-+ m"选项包含一系列的记录,看起来 喜欢这个:

主机名目录 iozone 路径名

其中主机名是主机名或 IP 地址的测试驱动程序机 那 iozone 可以使用,目录是要使用的目录的路径名 该主机中和 iozone 路径名是 iozone 的完整路径名 要在该主机上使用的可执行文件。请确保每个目标主机可以

解决在运行 iozone 命令的主机的主机名。所有

目标主机必须允许密码的 ssh 从运行的主机访问 命令。例如︰

出口 RSH = ssh iozone-m ioz.cfg-+ h 我 ip 地址-w-c-e-i 0-+ n-C-r 64 k-s 1 g-t 4

文件 ioz.cfg 包含这些记录 (glusterfs/产妇和新生儿破伤风/在哪里 Gluster 装载点在每台测试机器上)︰

g01/产妇和新生儿破伤风/glusterfs /usr/local/bin/iozone g02/产妇和新生儿破伤风/glusterfs /usr/local/bin/iozone g03/产妇和新生儿破伤风/glusterfs /usr/local/bin/iozone g04/产妇和新生儿破伤风/glusterfs /usr/local/bin/iozone

限制︰ 由于 iozone 使用非特权端口可能有必要 暂时关闭或改变 iptables 一些或所有的主机上。 奴隶机器必须支持从主控机通过无密码访问 ssh。

请注意,-+ h 选项是无证但它告诉奴隶主机 要使用这样的奴隶并没有能够什么 IP 地址 解析主机名的测试驱动程序。我 ip 地址是 IP 地址

奴隶们应该连接到报告结果回 主机。这不需要主机的主机名相同。

通常你运行顺序写入测试首先要放下文件, 滴缓存服务器 (和客户如有必要),做序贯 阅读测试,滴缓存做随机 I/O 测试如果需要。使用以上

示例︰

出口 RSH = ssh IOZ ="n + m ioz.cfg-+ h 我 ip 地址-w-C-c-e r 64 k-iozone-" hosts="awk '{ print $1 }' ioz.cfg" $IOZ-i 0-s 1 g-t 4' \ n 在 $hosts $servers;做 \

ssh $n ' 同步;回声 1 > /proc/sys/vm/drop_caches;完成

$IOZ-i 1-s 1 g-t 4 n 在 $hosts $servers;做 \

ssh $n ' 同步;回声 1 > /proc/sys/vm/drop_caches;完成

$IOZ-i 2-s 1 g-t 4

如果客户端使用缓冲 I/O (默认值),删除缓存 客户端计算机第一次,然后服务器机器也如上所示。

# # 并行 libgfapi

此测试练习 Gluster 性能使用 API,libgfapi 绕过保险丝-使用没有挂载点。可用

这里

要使用它,您的编辑脚本参数在 parallel_gfapi_test.sh 脚本-他们都是上面下面的评论"没有可编辑参数 这条防线"。这些包括诸如 Gluster 卷名称,主机

服务容量,文件等的数目。你然后确保

gfapi_perf_test 可执行文件分发到客户端机器 指定的目录,然后运行该脚本。脚本启动所有

libgfapi 工作量发电机过程的一种并行, 他们都开始在同一时间测试。它一直等到他们所有

完整,然后收集并为你聚合的结果。

注意 libgfapi 进程消耗一个套接字每砖,所以在 Gluster 与高砖卷计数,可以在数量上的限制 libgfapi 可以同时运行的进程。具体来说,每个主机

可以只支持最多约 30000 并发 TCP 端口。您可能需要

调整"ulimit-n"参数 (见 /etc/security/limits.conf"nofile" 持续整定参数)。

# # 对象存储工具

[http://www.snia.org/sites/default/files2/SDC2013/presentations/Cloud/YaguangWang __COSBench_Final.pdf COSBench] (http://www.snia.org/sites/default/files2/SDC2013/presentations/Cloud/YaguangWang__COSBench_Final.pdf) 由英特尔员工和是非常有用的两个斯威夫特和 S3 工作量的一代。

[https://pypi.python.org/pypi/ssbench ssbench] (https://pypi.python.org/pypi/ssbench) 是 OpenStack Swift 工具集的一部分,是命令行工具与工作量 定义文件格式。

工作量

应用程序可以是简单,写一些文件,或者也可以被视为 作为运行在 Gluster 云复杂。但所有应用程序都

性能要求,无论用户是否意识到它们, 如果不符合这些条件的作为一个整体系统不是 功能从用户的角度来看。各项活动,

应用程序花费其大部分时间做与 Gluster 被称为 "工作量"下面。对于 Gluster 文件系统,"工作量"由组成

由应用程序传递到 Gluster 文件系统请求。 有两种方式来看看工作量︰

上-下-什么应用程序想要对文件系统 做吗? 自底向上-什么要求是实际上对生成的应用程序 文件系统?

# # 数据与元数据

在此页中我们经常提及"大型文件"或"小文件" 工作负载。但我们说的术语"大型文件"或

"小文件"吗?"大型文件"是故意含糊但描述性术语

那是指工作负载的应用程序时间大部分都花在哪里 读写文件。这是相对于一个"小文件"

工作量,哪里的应用程序的时间大部分都花在开启/关闭 该文件或访问有关该文件的元数据。元数据是指"数据

关于数据",所以它是描述文件的状态信息 而不是文件的内容。例如,文件名是类型

元数据,如目录和扩展的属性。

# # 自上而下工作量分析

通常这是什么用户将能够帮助你--例如, 工作量可能包括摄取 10 亿.mp3 文件。典型

需要 (大约) 回答的问题是︰

-文件大小分布是什么?平均数往往不足够-文件

粒度分布可以双模态 (即主要由非常 大和非常小的文件大小)。TBS︰ 提供指向脚本

那可以收集这些信息。 -文件的访问是什么分数读取与写入? -如何缓存友好是工作量?相同的文件得到阅读吗

多次通过不同的 Gluster 客户端,或不同 对这些客户端的进程/线程? -访问什么分数对于大型文件的工作负载, 顺序/随机吗?顺序文件访问意味着应用程序

线程读取/写入的文件从开始到结束的字节偏移量 订单,并正好相反 — — 线程随机文件的访问 可读/写从在任何时间任何偏移量。虚拟机磁盘

随机,通常可访问的图像,因为虚拟机的文件系统是 在 Gluster 文件中嵌入。

这些问题是为什么重要的?例如,如果你有一个大文件

顺序读工作负载、 网络配置 + Gluster 和 Linux 执行提前读是重要的。如果你有一个小文件的工作负载,存储

配置是重要的等等。你不会知道什么调优

适合 Gluster,除非你有一个基本的了解 工作量。

# # 自底向上的分析

即使是一个复杂的应用程序可能有一个非常简单的工作负载来自 为其请求提供服务的文件系统的观点。如果你不

知道您的应用程序所花费的时间做,您可以通过启动 运行"gluster 卷配置文件"和"gluster 卷顶"命令。 这些极为有用的工具将帮助您了解的工作量 和限制该工作负荷的性能瓶颈。

TBS︰ 链接到这些工具和减少的数据到可用窗体的脚本文件。

配置

有 4 个基本硬件尺寸到这里列出 Gluster 服务器 按重要性顺序︰

-网络-可能是最重要的硬件组件的 Gluster 网站 -访问协议-什么样的客户端用于获取对 文件或对象吗? -存储-这是绝对重要的是获得正确的前场 -cpu-在客户端上, 寻找热线程 (见下文) -内存-可以影响性能的读密集型,缓存 工作负载

# # 网络测试

网络配置有巨大的影响,对性能的分布式存储,但常常不给出 它应有的规划和安装阶段的注意 集群的生命周期。幸运的是,

[网络配置] () http://www.gluster.org/community/documentation/index.php/Network_Configuration_Techniques 可以进一步明显,通常无需额外的硬件。

要衡量网络性能,请考虑使用 基于 netperf http://www.netperf.org/netperf/NetperfPage.html

如脚本 [网络-流-pairs.sh] (https://github.com/bengland2/parallel-libgfapi/blob/master/netperf-stream-pairs.sh)-设置主机对之间的单向 TCP 流。 [网络-rpc-pairs.sh] (https://github.com/bengland2/parallel-libgfapi/blob/master/netperf-rpc-pairs.sh)-设置主机对之间的请求-响应流

这两个工具的目的是交通的描述您的整个网络基础架构支持所需诱导分布式存储、 并行使用多个网络连接级别的能力。 后者的脚本可能是最现实的网络工作负载分布式存储。

影响分布式的存储的两个最常见的硬件问题是, 不足为奇的是,磁盘驱动器故障和网络故障。一些的

这些故障不会引起硬错误,但反而导致性能 退化。例如,与包含两个保税的网络接口

物理网络接口,如果其中一个物理接口失败 (NIC/交换机或电缆上的任一端口),然后粘结的界面将 熬夜,但会有更低的性能 (少取决于多少 键合模式)。另一个错误就是失败 10 GbE 以太网

此速度到 10 Gbps 的接口 — — 有时网络 接口自动协商到 1 Gbps 相反。如果 TCP 连接是

经历的数据包的丢失率高或不正确,调优它 可能无法由硬件支持的完整的网络速度。

所以为什么运行而不是只是一个并行 netperf 会话?有

各种不同的网络拓扑结构的网络性能问题 (其中主机相互关联的方式),特别是网络交换机 与路由器的拓扑结构,只体现几对主机时 试图传输交通跨相同的共享资源,其中 可以将树干连接机架顶部开关或叶片为基础的开关吗 与带宽不足,例如切换底板,。个人

netperf/iperf 会话不会发现这些问题,但这个脚本 会。

这个测试可以用于模拟通过分布式的数据流 文件系统,例如。如果你想要模拟客户端 Gluster 月 4 日,调用

他们称他们为 c1 c4,大文件写入一组 2 的服务器,通过 s1 和 s2,您可以指定这些 (发送方、 接收方) 对︰

(c1,s1),(c2,s2),(c3,s1),(c4,s2)

如果在另一方面,你想要模拟读取,您可以使用这些 (发送方、 接收方) 对︰

(s1,c1),(s2,c2),(s1,c3),(s2,c4)

为了模拟混合的读写负载,请使用两套双︰

(c1,s1),(c2,s2),(c3,s1),(c4,s2),(s1,c1),(s2,c2),(s1,c3),(s2,c4)

更复杂的流动可以模型的非母语协议,群集节点作为一个代理服务器,它是 (非本地协议) 服务器和客户端 (用于本机协议) 的行为。 例如,这种协议通常会诱发全双工交通可以比单向进出交通以不同的方式强调网络。 例如,尝试将这套流添加到前面流︰

(s1、 s2)。(s2、 s3)。(s3、 s4)。(s4,s1)

顶部的脚本注释描述的输入的语法,但 这里有一些建议关于如何最好地利用它。你通常运行

此脚本从一个头的节点或测试驱动程序,有无密码的 ssh 获得这套机器正在进行测试。运行测试的主机

不需要 ssh 访问彼此 — — 他们只需要允许 无密码 ssh 访问的头节点。该脚本并不依赖

超级用户权限,所以你可以从一个非 root 帐户来运行它。只需创建

公钥在了正确的帐户 (通常在头节点上 \$HOME/.ssh/id_rsa.pub),然后将附加到此公共密钥 参与测试的每个主机上的 \$HOME/.ssh/authorized_keys。

我们输入消息发送者和接收者使用单独的文本文件,每个 1 主机 行。对 (发件人 [j],receiver[j]),从线 j 获取发件人 [j]

在发件人的文件和从接收文件中的行 j 接收机 [j]。 您必须使用到的接口相对应的 IP 地址/名称 您想要测试,和你必须能够向 ssh 到从每个主机 使用此接口的头节点。

结果

有 3 的性能结果,不是按顺序的基本形式 重要性︰

吞吐量 — — 多少工作是在一个时间单位?最好的衡量标准

通常是工作量依赖︰ -对于大型文件随机︰ IOPS -对于大型文件顺序︰ MB/s -为小文件︰ 文件/秒 -响应时间 — — 重要的是,它多久为文件系统 请求完成吗? -利用--如何忙是硬件,而工作量是 运行吗? -可扩展性 — — 可我们线性缩放吞吐量而不牺牲 响应时间,我们将服务器添加到一个 Gluster 卷吗?

通常吞吐量结果得到最多关注,但在 分布式存储环境中,最难的目标,要实现很可能 一贯低响应时间,不是吞吐量。

虽然有非交互工作负荷处响应时间不 是一样重要的你要注意到响应时间在任何 用户不得不直接与文件系统交互的位置的情况。 调整文件系统来实现绝对的高吞吐量可以 导致高的响应时间是不可用的文件系统。 除非你是在基准测试的情况,你想要实现 好的吞吐量和响应时间的平衡。通常互动

用户想要看到响应时间在 5 秒总是,与大多数 响应时间比这低得多。继续响应时间

控制 (包括系统管理 !),你不想任何硬件 组件运行在最大利用率,通常 60-80%的利用率是 良好的峰利用目标。另一方面,为了避免浪费

硬件,你想要的所有硬件,在一定程度上利用。