磁盘阵列工程指南
为了实现Solace PubSub+设备的最大保证消息传递速率,必须使用能够支持预期消息传递速率的适当外部磁盘阵列。本节提供了用于测量和配置外部磁盘阵列的指南,以便与Solace PubSub+设备一起使用,以实现最大的保证消息传递速率。
本节提供了用于Solace PubSub+设备上磁盘阵列的工程指南。
- 为了获得最佳性能和最大的数据完整性,建议使用支持断电数据保护功能的企级SSD。
- 从Solace PubSub+设备版本8.2.0开始,之前声明只有root用户能执行的操作,现在也可以由系统管理员用户执行。有关配置系统管理员用户的信息,请参阅配置多个Linux Shell用户。
了解保证消息传递性能
设备保证消息传递功能的最大性能取决于两个主要因素:
- 设备提供的最大的保证消息传递入站速率。这些速率取决于所使用的设备类型以及(如适用)所使用的保证交付刀片(ADB)模型。
- 设备将接收到的保证消息写入磁盘阵列的速率。
当客户端离线或速度慢时,针对这些客 户端的保证消息需要被写入外部磁盘阵列。外部磁盘阵列必须能够维持针对离线或慢速客户端的保证消息速率。否则,外部磁盘阵列将限制保证消息传递性能。
绝对最大性能受到所使用的ADB和事件代理配对的能力限制。如果客户端从不离线或速度不慢,且消息从未被写入磁盘,那么ADB和事件代理配对就定义了系统的保证消息传递性能。然而,在实际部署中,客户端确实会离线并且速度慢。当这种情况发生时,消息被写入磁盘阵列,磁盘阵列的写入性能将影响整体保证消息传递性能。
例如,如果ADB和设备组合可以支持最大入站速率4.5 Gbps(563 MBps),并且50%的客户端离线或速度慢,则外部磁盘阵列必须能够支持至少2.25 Gbps(281 MBps)以实现ADB和设备组合提供的速率。如果不支持,外部磁盘阵列将成为性能瓶颈,影响保证消息传递功能的最大性能。
使用相同的ADB和事件代理组合,如果100%的客户端都离线或速度慢,则磁盘阵列必须能够支持至少4.5 Gbps以实现最大性能。
转换保证消息和磁盘写入速率
磁盘写入性能以带宽(每秒字节)为单位进行测量。然而,消息速率性能是一个常用的性能指标。要计算已知磁盘写入速率的消息速率,请使用以下公式:
- 每秒消息数 = 磁盘写入速率每秒字节数 / (平均消息大小 + 开销)
消息开销通常为每个消息144字节。因此,给定每秒100 MB(104,857,600字节)的磁盘写入速率和平均消息大小为1,024字节,当入队到磁盘时预期 的消息速率如下:
- 104,857,600字节 / (144字节 + 1,024字节)= 89,775每秒消息数
相反,给定您想要实现的消息速率,您可以使用以下公式计算所需的磁盘写入性能:
- 磁盘写入速率 = 每秒消息数 * (平均消息大小 + 开销)
因此,如果您想要以每秒170,000消息数和平均大小为512字节入队到磁盘,您需要以下磁盘写入速率:
- 170,000每秒消息数 * (512字节 + 144字节)= 106 MB每秒(111,520,000字节每秒)
测量磁盘性能
Solace提供了一个soldisktest工具,以便您可以测量外部磁盘阵列的写入性能,并确定保证消息传递的入队到磁盘场景的可用性能。soldisktest工具使用与Solace PubSub+保证消息传递功能相同的技术将消息写入磁盘。然而,它只提供模拟,应被视为最大预期写入性能的估计。在工程磁盘写入性能时,您应该计划的性能至少比soldisktest提供的值低10%。
要测量主事件代理上的磁盘阵列的写入性能,请执行以下步骤:
- 为确保磁盘阵列的WWN配置正确且操作状态为AD-Active,请输入
show message-spool
用户执行命令:
solace1(admin-message-spool-vpn)# show message-spool
Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB
Spool While Charging: No
Spool Without Flash Card: No
Using Internal Disk: No
Disk Array WWN: 60:06:01:60:4d:30:1c:00:e6:11:60:ec:d2:2e:e0:11
Operational Status: AD-Active
. . .
有关配置消息池的信息,请参阅配置保证消息传递的外部磁盘阵列。
- 为确保主磁盘分区有足够的空闲空间,请输入
show disk detail
用户执行命令。以p1
结尾的/dev/mapper
条目是主分区。
solace1(admin-message-spool-vpn)# show disk detail
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/md2 19236244 5966332 12292764 33% /
/dev/md1 101018 16769 79033 18% /boot
/dev/md6 199811600 170367716 19294028 90% /usr/sw
none 7825944 16 7825928 1% /dev/shm
/dev/mapper/3600601604d301c00e61160ecd22ee011p1
17358176 597404 15879008 4% /usr/sw/externalSpool/p1
/dev/mapper/3600601604d301c00e61160ecd22ee011p2
17358176 77888 16398524 1% /usr/sw/externalSpool/p2
- 在shell提示符下,以root用户身份运行
soldisktest
实用程序,向--msgsize
参数提供预期的平均消息大小。(不需要考虑开销,因为soldisktest会自动处理。)
- 根据磁盘阵列的性能,该命令可能需要几分钟才能完成。
- 消息池必须配置好且为AD-Active状态才能运行测试。
- 默认情况下,soldisktest测量主磁盘分区(
/usr/sw/externalSpool/p1
)上的写入性能。要测量备份分区的性能,请在备份事件代理处于AD-Active状态时运行soldisktest,并设置选项--dir=/usr/sw/externalSpool/p2
。 - 默认情况下,soldisktest向分区写入8 GB数据,因此请确保分区有足够的空闲空间。要调整写入的数据量,请使用
--total-files
选项。测试以8 MB的大小写入文件。默认写入的文件数量为1,000。 - 为了提供准确的结果,事件代理必须处于空闲状态(即,不积极传递消息)。
以下示例中,测量了平均消息大小为1024字节的性能。对于此消息大小,最大写入速率为46 Mbps或41,864每秒消息数。
[root@lab-129-80 support]# soldisktest --msgsize=1024
Using 7182 messages per file, file size = 8388592 bytes
done!
elapsed time = 171.553
bytes written per second = 48897961 = 47751 KBps = 46 MBps
Message rate: 41864 messages per second
Deleting test spool files created
All files deleted.
诊断外部磁盘性能问题
有两种方法可以诊断外部磁盘阵列是否是性能瓶颈:
- 监视IO统计数据
- 监视ADB使用情况
监视IO统计数据
当外部磁盘阵列成为瓶颈时,映射到LUN的设备的IO利用率将接近100%。您可以使用iostat实用程序交互式监视IO利用率。
要使用iostat实用程序,首先确定映射到LUN的设备的名称,使用root shell中的multipath命令:
[root@solace1 support]# multipath -ll
3600601604d301c00e61160ecd22ee011 dm-0 DGC,RAID 10
size=34G features='1 queue_if_no_path' hwhandler='1 emc' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 8:0:1:0 sde 8:64 active ready running
`-+- policy='round-robin 0' prio=0 status=enabled
`- 8:0:2:0 sdf 8:80 active ready running
此命令显示了通往LUN的每条路径。在描述路径状态的行上(例如“active”),也会列出设备名称,该名称以“sd”开头。您要使用列出的第一路径的设备名称。在上面的例子中,设备是“sde”。
要监视IO利用率,请在root shell中输入以下命令:
iostat -d -x -k 1 <device>
其中:<device>
是通过multipath命令确定的值。注意,命令的第一个结果可能不会报告准确的利用率值,应该忽略。
以下示例输出显示了磁盘成为瓶颈的情况:
[root@lab-129-80 support]# iostat -d -x -k 1 sde
Linux 3.4.67.solos86 (lab-129-80) 05/16/2014
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.17 2.42 107.23 1522.71 53.61 761.36 629.16 0.17 66.91 6.27 1.63
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.00 117.82 0.00 101631.68 0.00 50815.84 862.59 15.92 150.89 8.40 99.01
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.00 115.15 0.00 94351.52 0.00 47175.76 819.37 27.81 160.92 8.11 93.33
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.00 99.01 0.00 83778.22 0.00 41889.11 846.16 17.88 261.31 9.24 91.49
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.00 107.00 0.00 92448.00 0.00 46224.00 864.00 14.54 153.07 8.71 93.20
Device: rrqm/s wrqm/s r/s w/s rsec/s wsec/s rkB/s wkB/s avgrq-sz avgqu-sz await svctm %util
sde 0.00 0.00 0.00 120.20 0.00 99539.39 0.00 49769.70 828.10 16.33 122.27 8.28 99.49
监视ADB使用情况
ADB上的消息数量可以指示磁盘性能瓶颈。如果ADB始终处于满状态,这表明消息不能以它们被放入ADB的速度被写入磁盘。在没有磁 盘性能瓶颈的繁忙系统中,ADB将大约是50%满。
要确定ADB是否已满,请输入show message-spool用户执行命令以查看保证消息传递的消息状态和使用情况。
solace# show message-spool
Config Status: Enabled (Primary)
Maximum Spool Usage: 60000 MB
. . .
ADB Disk Total
Current Persistent Store Usage (MB) 1093.8263 2435.9131 3529.7394
Number of Messages Currently Spooled 57348 127712 185060
在显示的输出中,检查ADB列中的“Number of Messages Currently Spooled”和“Current Persistent Store Usage (MB)”条目(不是磁盘列)。当存在与磁盘相关瓶颈时,这些值中的一个或两个将不断接近其最大值:
- 最大消息数大约为4,200,000。对于较小的消息大小,当磁盘成为瓶颈时,ADB上的消息数量将接近最大值。
- ADB-04210M的最大持久存储使用量为3,300 MB,ADB-000000-01/ADB-000000-02为1,100 MB。对于较大的消息大小,当磁盘成为瓶颈时,ADB上的当前持久存储使用量将接近最大值。
优化磁盘阵列性能的考虑因素
当配置磁盘阵列以与使用保证消息传递的Solace PubSub+事件代理一起使用时,请考虑以下项目:
- 磁盘阵列写入缓存 - 内置电池支持写入缓存的磁盘阵列能够比没有写入缓存的磁盘阵列提供更高的性能。
- 磁盘RPM - 建议使用10,000 RPM或15,000 RPM的磁盘,因为转速更高的硬盘能够更好地维持高速率的消息传递活动。在尝试提高出队性能时,更快的硬盘通常比入队到磁盘的性能更为重要。
- RAID级别 - 使用RAID 5/6的LUN的性能明显低于RAID 1/10。因此,Solace强烈建议使用RAID 10模式的存储,以避免RAID 5/6模式中部分写入条带引起的性能下降。
- RAID组中的磁盘数量 - 一些磁盘阵列会在RAID组中增加磁盘数量时出现性能下降。阵列在不经历性能下降的情况下可以支持的磁盘数量因供应商而异。请参阅您的磁盘阵列的性能推荐文件,以确定最大性能。
- 磁盘分区扇区对齐 - 未对齐的磁盘分区可能会显著降低大多数磁盘阵列的性能。
此问题可以通过检查分区表的起始和结束扇区来诊断,使用gdisk命令。也就是说,在外部磁盘设备上运行gdisk实用程序,输入“p”命令以扇区单位查看分区表。
示例:
[root@solace ~]# gdisk /dev/mapper/36001405f6bd73860d76412eab3a4a006
GPT fdisk (gdisk) version 0.8.9
Partition table scan:
MBR: protective
BSD: not present
APM: not present
GPT: present
Found valid GPT with protective MBR; using GPT.
Command (? for help): p
Disk /dev/mapper/36001405f6bd73860d76412eab3a4a006: 31251759104 sectors, 14.6 TiB
Logical sector size: 512 bytes
Disk identifier (GUID): A9717400-24DF-4D26-95FE-92F8BF4FBF7B
Partition table holds up to 128 entries
First usable sector is 34, last usable sector is 31251759070
Partitions will be aligned on 2048-sector boundaries
Total free space is 4061 sectors (2.0 MiB)
Number Start (sector) End (sector) Size Code Name
1 2048 15625879552 7.3 TiB 8300 Linux filesystem
2 15625881600 31251759070 7.3 TiB 8300 Linux filesystem
Command (? for help): q
[root@solace ~]#
有关如何使用适当的扇区对齐分区磁盘阵列的信息,请参阅配置保证消息传递的外部磁盘阵列。
- 主机总线适配器链路速度 - 在高性能配置中,持续的入队到磁盘活动需要8 Gbps光纤通道链路。一些事件代理型号上提供了支持8 Gbps光纤通道链路的主机总线适配器。为了适应峰值消息传递速率,强烈建议您全面部署8 Gbps光纤通道链路。
- 目前不支持从设备对LUN进行薄供应。