http://www.sshub.net/home/space.php?uid=59134&do=blog&id=32895
不久前,我需要对一台 IBM® AIX® 服务器执行一次操作系统修补,升级到更新的技术水平和服务包。此服务器已有一段时间没有进行任何软件维护了,所以是时候调整了。我让所有软件等待维护时窗,并开始升级。
在升级的过程中,我注意到服务器变得特别慢。尽管系统没有应用程序在活动,没有用户登录,但服务器的性能却慢了很多。这完全讲不通,因为这是一台独立的服务器,不是虚拟化逻辑分区 (LPAR),没有任何其他系统会争用 CPU 资源或共享的基础架构。
在排除故障时,我使用 topas 命令获取了服务器的实时数据,注意到 Wait 列具有极高的值。是一个磁盘导致了所有开销,这个磁盘就是 hdisk0,root 卷位于该磁盘上。我使用 lspv –p 命令查看了这个磁盘,突然恍然大悟(参见下面的 清单 1)。
# lspv -p hdisk0 hdisk0: PP RANGE STATE REGION LV NAME TYPE MOUNT POINT 1-1 used outer edge hd5 boot N/A 2-110 free outer edge 111-114 used outer middle hd6 paging N/A 115-116 used outer middle livedump jfs2 /var/adm/ras/livedump 117-124 used outer middle lg_dumplv sysdump N/A 125-130 used outer middle paging00 paging N/A 131-136 used outer middle hd6 paging N/A 137-217 free outer middle 218-219 used outer middle hd2 jfs2 /usr 220-220 used center hd8 jfs2log N/A 221-222 used center hd4 jfs2 / 223-237 used center hd2 jfs2 /usr 238-240 used center hd9var jfs2 /var 241-241 used center hd3 jfs2 /tmp 242-242 used center hd1 jfs2 /home 243-245 used center hd10opt jfs2 /opt 246-246 used center hd11admin jfs2 /admin 247-259 used center hd10opt jfs2 /opt 260-265 used center hd4 jfs2 / 266-266 used center hd2 jfs2 /usr 267-279 used center hd9var jfs2 /var 280-284 used center hd2 jfs2 /usr 285-285 used center hd3 jfs2 /tmp 286-286 used center hd2 jfs2 /usr 287-317 used center hd1 jfs2 /home 318-328 used center paging00 paging N/A 329-425 free inner middle 426-430 used inner middle hd6 paging N/A 431-437 free inner middle 438-535 free inner edge 536-546 used inner edge paging01 paging N/A |
当我看到这个磁盘的布局方式时,了解到为什么会存在一个 I/O 瓶颈。该磁盘具有许多错误和糟糕的规划,导致在简单的升级上花费的时间比应花费的时间长得多。但这也证明,在如今的存储区域网络 (SAN)、Internet SCSI (iSCSI) 和其他顶级存储解决方案的世界里,对于基本的内部磁盘仍然需要优化和恰当设置,现代化的、更强健的服务器才能高效地运行。
本文将提供一些基本的工具和技术,您可以使用它们优化 AIX 服务器上的内部存储。使用我遇到的情形作为案例分析,本文将介绍如何在 AIX 内查看磁盘,以及磁盘如何与逻辑卷管理器 (Logical Volume Manager, LVM) 交互。然后,探讨重新组织内部磁盘和强化它们的各种战略和命令,包括一些较低级命令和简单的快捷键。最后,本文提供一些较高级的规划想法来预防这些情形再次发生。
AIX 操作系统将硬盘(也称为物理卷,简称 PV)划分为固定的空间区域,也称为物理分区 (PP)。这些 PP 具有统一的大小,从磁盘的外边缘向主轴的中心移动。将这些 PV 集中起来后,它们就成为了卷组 (VG)。在这些 VG 中,系统创建名为逻辑卷 (LV) 的结构,这些结构将 PP 集中形成在可在其上创建文件系统的有用区域。
PP 的大小在创建 VG 时就已固定,向 VG 添加的更多 PV 需要保持相同的 PP 大小。每个 PP 一次仅能分配给一个 LV,任何 LV 必须至少包含一个 PP 才能存在。如果文件系统扩大,它们扩大的最小大小为一个 PP。
AIX 将 PV 划分为 5 个区域,这些区域与他们在硬盘磁盘自身上的位置对应:外侧边缘、外侧中间、中心、内侧中间和内侧边缘。这种划分如 图 1 所示。
一些数学和物理属性会影响磁盘 I/O、延迟和跨这 5 个区域的访问。由于角动量守恒,磁盘的外侧边缘具有比内侧边缘更快的旋转速度,这很像小孩在游乐场骑旋转木马一样,外侧的旋转速度要比中间快得多。但是,由于数据的物理位置的限制,不是磁盘上的所有数据都写入到外侧边缘,所以对硬盘头的最快搜索应该在磁盘的中心区域,通常硬盘头最有可能通过这片区域。
对于我尝试修补的服务器,数据以非常混乱或随机的方式放置在磁盘上。但是在整理数据之前,需要更多地考虑 AIX 是如何管理 LV 的。
AIX 拥有一个名为逻辑卷管理器 的原生工具,它可以处理 PV、VG、LV 和文件系统之间的关系。LVM 在物理媒介上创建逻辑结构来管理操作系统中的数据。为了优化磁盘,LVM 还提供了一种自定义可用性、性能和冗余的方式。
LVM 用于加强优化的使用最广泛的两个功能是镜像和条带化(Striping)。LVM 允许您使用最多 3 个数据副本来镜像 LV。在这里,一个 LP 可指向一个或多个 PP。因此,如果发生硬盘故障,数据会在其他物理设备上得到保护。在专门使用内部存储的较小型系统中,需要对所有数据进行镜像备份,以预防计划外的宕机,这非常重要。
条带化 将数据放在多个硬盘上,所以会同时在许多磁盘上发生多次读取和写入操作。要启用条带化,可更改每个 LV 的物理卷间分配策略属性。通过将策略设置为最小值(默认值),会得到更高的可靠性,因为没有磁盘故障会影响到 LV。通过将策略设置为最大值,LVM 会将数据存储在 VG 中最大数量的磁盘中,最大限度地提高一次可能发生的 I/O 操作数量。
对于内部磁盘的优化,必须控制性能与冗余之间的平衡。在较小的系统中,通常没有足够的空间来执行大规模的条带化分布,更不用说通过镜像实现具有冗余的条带化了。在具有大量内部硬盘的较大系统中,条带化和镜像可显著提升性能,最大限度地减少 I/O 等待时间。
通过将 AIX 硬盘物理结构的这些概念与 LVM 在磁盘上运用逻辑结构的方式相结合,我得出了一些有助于优化内部磁盘的准则:
- 让 LV 尽可能保持连续。当文件系统数据分散在一个磁盘上时,硬盘头需要花费更长的时间才能找到任何想要的数据。如果 LV 存在于一个连续的区域,会最大程度地缩短搜索时间,更快地找到文件。
- 将具有高 I/O、顺序读取或写入操作的 LV 放在外侧边缘。由于磁盘外侧边缘的速度因素,如果 LV 需要更快读取或写入较长序列(比如大型静态文件或数据表内容)中的数据,外侧边缘的更高旋转速度会有所帮助。
- 将具有高活跃度的 LV 放在靠近中心位置。如果您有一个文件系统具有大量读取和写入操作,并且需要快速响应,因为平均而言,硬盘头在所有时间内通常最有可能位于中心附近。通过将这些文件系统放在这一区域,使硬盘头尽可能接近该区域。这种配置会减少搜索时间并保持良好的 I/O。
- 将使用率较低的 LV 放在内部边缘附近。如果您的文件系统很少使用或访问,那么可以将它们放在具有最低 I/O 速度的磁盘区域内(内部边缘上接近主轴的区域)。例如,很少使用的逻辑卷很适合放在这里。
- 仅为每个磁盘使用一个分页空间 LV。将分页空间用作一个临时空间,使用它与物理存储区域交换内存页面,从而迫使 CPU 执行更多操作和完成更多事情。在相同磁盘上定义多个分页空间 LV,会削弱尝试修复性能的效果,并导致更多的 I/O 操作,因为磁盘头必须到达磁盘的多个区域,而不是一个区域。
- 如果可能,不要镜像分页空间。再次说明,由于分页空间的目的是利用物理存储来弥补资源不足,所以将相同数据集再次写入镜像配置中没有意义。相反,如果两个磁盘具有两个独立的分页空间 LV,那么每个磁盘均可解决内存交换,效率将会翻倍。
- 保持分页空间大小统一。关于分页空间,最后一点要注意的是尽可能保持分页空间 LV 大小统一。如果有两个 73GB 的内部磁盘,其中一个有 1GB 的分页空间 LV,而另一个有 4GB 的分页空间 LV,那么这两个磁盘中的一个可能磨损得更快。而且,依赖于将分页空间添加到服务器或分页空间缩小的方式,一个 LV 可能装满并对系统带来负面影响。此外,保持相同的大小会使 lsps 命令输出看起来更加简洁和准确。
- 保留一定的空闲空间。尽管可能一些管理员会尝试榨干服务器上的最后一点容量,但最好总是在磁盘上保留一定的空闲空间。这不是说在内部或外部中间区域拥有一个或两个较大的间隙,而是在 LV 之间拥有一定的空间(以防任何内容需要增长)并在文件系统自身内拥有一定的空闲空间。如果所有内容都紧靠在一起,那么只要一个小小的 chfs – size=+1MB 命令就会破坏 LV 连续性。
- 正确地镜像内容。管理员犯下的一个常见错误时,在镜像的 VG 上创建一个新文件系统,然后忘记在其他磁盘上创建一个副本。只是因为 VG 已经镜像,并不意味着后来添加的支持文件系统的任何 LV 也将镜像。请始终确保新 LV 在一个独立的 PV 上有一个副本。
- 尽可能分散 I/O 负载,以提高性能和冗余。如果您有一个较大的系统具有多个硬盘,可以通过将数据分散在一组磁盘组合中开利用它们。如果您选择镜像您的 PV,可以在多个硬盘上这么做,以便如果一个磁盘抽屉(drawer)出现故障,冗余不会限制到一个硬盘。
此过程中的下一步是将这些针对内部存储优化的准则应用到实际中。我采用了多个命令来解决混乱的磁盘,让它们遵守应有的设计方式。
lspv、lsvg 和 lslv 命令是可视化所有内容的布局情况的重要工具。lspv 命令显示数据在 PV 上的分布(如我前面的示例中所示)。lsvg 命令和 –l 标志大体显示数据是否已镜像,以及哪些内容位于 VG 中。lslv 命令应该与 –m 标志结合使用,以分析 5 个 PV 区域中任何特定的 LV 的布局,如下所示:
hd4:/ PV COPIES IN BAND DISTRIBUTION hdisk0 128:000:000 100% 000:108:020:000:000 |
chlv 命令通常是我运行的第一个命令,它更改一些内容来优化磁盘。我使用它设置 PV 内分配策略,确定 LV 应该放在 PV 中的何处(从外侧到内侧边缘)。这个命令有助于整合数据,使其变得连续。
如果我发现一些 LV 未在正确的 PV 上,在我进行更进一步的重组之前,我会使用 migratepv 命令在 PV 之间移动一些内容,使用 –l 标志逐个 LV 地移动数据。
reorgvg 命令是优化内部磁盘的真正主角。这个命令会获取每个 LV 的 PV 内部分配策略,围绕这些标准重组 PV。它会尽力将 LV 移动到磁盘的特定位置并恰当地调整空间。但在某些情形下它可能会花大量的时间来运行,而且可能无法做到尽善尽美,这才是需要手动干预的真正原因。
调整 LV 之后,磁盘上可能有一两个烦人的 LP 或 PP,以至于大部分 /usr 中都包含着一些 /tmp。migratelp 命令可以采用手动方式逐个 LP 地移动数据,从而整理数据。
您使用 mirrorvg 和 mklvcopy 命令一次镜像整个 VG (mirrorvg) 或复制特定的 LV,比如当添加文件系统时 (mklvcopy)。但是,您可以使用 mirrorvg,通过两个技巧来优化内部存储。如果 PV 内分配策略已使用 chlv 设置,那么通过使用 –c 标志来镜像卷组,数据将镜像到一个全新的 PV,并遵守这些策略,整洁地进行布局。或者,如果您已有一个良好优化的磁盘,您可以使用 –m 标志并与第一个完全一样地布局第二个 PV 来实现完全并行的读取和写入。
应用所有这些准则并使用上述工具之后,我能够修复糟糕的磁盘性能,主要通过合并分页空间,正确调整文件系统,以及将 LV 放在 PV 上的适当位置来完成。在 清单 2 中可以看到,磁盘空间的使用效率高得多,I/O 得到了显著改进。
# lspv -p hdisk0 hdisk0: PP RANGE STATE REGION LV NAME TYPE MOUNT POINT 1-1 used outer edge hd5 boot N/A 2-2 used outer edge hd8 jfs2log N/A 3-110 free outer edge 111-130 used outer middle hd6 paging N/A 131-147 used outer middle hd9var jfs2 /var 148-219 free outer middle 220-245 used center hd2 jfs2 /usr 246-252 used center hd1 jfs2 /home 253-255 used center hd3 jfs2 /tmp 256-270 used center hd10opt jfs2 /opt 271-328 free center 329-337 used inner middle hd4 jfs2 / 338-437 free inner middle 438-440 used inner edge livedump jfs2 /var/adm/ras/livedump 441-448 used inner edge lg_dumplv sysdump N/A 449-449 used inner edge hd11admin jfs2 /admin 450-546 free inner edge |
使用此布局,硬盘头无需从中心区域移动太远,我拥有增长文件系统所需的空间,而且 I/O 等待时间更短。通过将此配置原封不动地镜像到第二个磁盘,我还提供了冗余来减轻可能的故障。
在早期的 AIX 4.3.3 和 IBM RS/6000® 服务器时代,由于可用的资源有限,必须进行磁盘优化才能让服务器良好地执行。但是,即使如今的磁盘常常超过 100GB 大,在速度上超过 15,000 RPM,并且较新的 IBM POWER7® 服务器运行得更快,可执行比以前的任何 AIX 服务器更多的事务,这种相对简单的内部存储优化流程仍然具有重要的意义