本文讨论了在使用双 VIO 服务器的 AIX 客户端 LPAR 上设置存储通信优先级的标准流程。设置通信路径优先级能让管理员充分利用所有可用的 SAN 光纤带宽,并且在所有可用的硬件路径上分配 SAN 流量。
本文讲述的方法可用于独立的 AIX 系统或是从一个或多个 VIO 服务器获取存储的 AIX LPAR。在 VIO 环境中,所有 VIO 服务器和客户端 AIX LPAR 都应该设置通信路径优先级。
充分利用 SAN 光纤带宽的方法基于本文即将详细介绍的命名和编号模式的实现。为每个 SAN 光纤路径分配优先级的自动化流程是以此命名和编号模式的实现为基础的。
第一步是执行 AIX 安装;它可能来自发行媒体、mksysb 备份,或是来自 NIM 服务器(首选方式)。我们建议先创建一个标准的版本,然后保存一个此标准版的 mksysb 镜像。然后使用 NIM 服务器,使用标准版的 mksysb 执行所有的 AIX 安装。安装完成后,就使用一个配置脚本根据各个系统的需要和要求定制标准版本。
建议可在虚拟环境的配置中包含多个 VIO 服务器,它可提供对存储和网络设备的冗余访问。这意味着每个 VIO 服务器都要配置了多个物理适配器访问存储,以及多个物理设备访问网络。每个 VIO 服务器通常都会配置有两个或三个提供存储访问的光纤通道设备。
对虚拟 SCSI 适配器进行配置需要有磁盘布局以及网络配置的知识。虚拟 SCSI 适配器需要在 HMC 上配置服务器和客户端适配器。SCSI 适配器的客户端部分(在 VIO 上配置)需要定义主机范围内惟一的 “插槽号”。为了达到高可用性,在双 VIO 配置中,SCSI 适配器的服务器端部分必须在两个 VIO 服务器上都进行配置。
对于每个使用虚拟化磁盘或逻辑存储卷的客户端 LPAR,必须在 HMC 上配置客户端虚拟 SCSI 适配器,每个 VIO 服务器上配置一次。虚拟 SCSI 适配器的客户端需要有额外的信息和设置对应于 SCSI 适配器的服务器端。调整此处定义的插槽号将使调试和追踪故障变得容易得多,我们也强烈建议这么做。
要定义符合 VIO 客户端/服务器环境标准的插槽编号,必须按奇数/偶数对插槽编号进行分类。奇数号插槽只能用于奇数号 VIO 服务器;偶数号插槽只能用于偶数号 VIO 服务器。这样就形成了一个简单的机制来判定由哪个插槽供哪个 VIO 服务器使用。
为了能追踪每个插槽,并且为插槽编号提供可识别的模式,任意选择一个范围的插槽编号分配给虚拟 SCSI 适配器。此标准指定了选择的插槽编号范围为 10 到 499。
使用以下的示例 VIO 服务器主机名称(以下表 1 中),可以根据存储的最终用途将虚拟 SCSI 插槽编号分配给虚拟 SCSI 适配器(在以下表 2 中):
VIO 服务器名 | 描述 | 托管主机名 |
---|---|---|
mtxapvio00 | 主机上的第一个 VIO 服务器节点 | Server-9119-590-SN12A345B |
mtxapvio01 | 主机上的第二个 VIO 服务器节点 | Server-9119-590-SN12A345B |
虚拟 SCSI 适配器插槽编号 | VIO 插槽编号(偶数/奇数) | VIO 服务器(示例) | 用途 |
---|---|---|---|
100 | 偶数 | mtxapvio00 | 操作系统存储 |
101 | 奇数 | mtxapvio01 | 操作系统存储 |
102 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
103 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
104 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
105 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
106 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
107 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
108 | 偶数 | mtxapvio00 | 其他 |
109 | 奇数 | mtxapvio01 | 其他 |
110 | 偶数 | mtxapvio00 | 操作系统存储 |
111 | 奇数 | mtxapvio01 | 操作系统存储 |
112 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
113 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
114 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
115 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
116 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
117 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
118 | 偶数 | mtxapvio00 | 其他 |
119 | 奇数 | mtxapvio01 | 其他 |
120 | 偶数 | mtxapvio00 | 操作系统存储 |
121 | 奇数 | mtxapvio01 | 操作系统存储 |
122 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
123 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
124 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
125 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
126 | 偶数 | mtxapvio00 | 数据库/应用程序存储 |
127 | 奇数 | mtxapvio01 | 数据库/应用程序存储 |
128 | 偶数 | mtxapvio00 | 其他 |
129 | 奇数 | mtxapvio01 | 其他 |
根据此标准,插槽编号以 0 或 1 结尾的虚拟 SCSI 适配器将应用于与操作系统存储的通信中。而插槽编号以 2、3、4、5、6 或 7 结尾的 SCSI 适配器将应用于与应用程序或数据库存储的通信中。最后,插槽编号以 8 或 9 结尾的 SCSI 适配器则用于与其他存储的通信中。
根据上述的标准插槽编号模式创建虚拟 SCSI 适配器。为编号在 10 到 499 之间且以 0、1、2、3、8 和 9 结尾的所有插槽创建虚拟 SCSI 适配器。必须在偶数编号的 VIO 服务器上创建偶数编号的插槽,在奇数编号的 VIO 服务器上创建奇数编号的插槽。将 SCSI 适配器按偶数/奇数分类的目的是为管理员提供一个简单机制以轻松识别和维护这些资源。通过使用此标准,可以在任何一台主机上配置最多达 49 个客户端 LPAR。对此标准稍做修改,那么就可以配置任意多的客户端 LPAR。下列的表 3 显示了在双 VIO 服务器中,为三个客户端 LPAR 分配虚拟 SCSI 适配器的插槽编号序列示例:
客户端 LPAR 名称 | 客户端 LPAR 插槽(来自 VIO) | VIO 服务器 mtxapvio00 插槽编号(偶数) | VIO 服务器 mtxapvio01 插槽编号(奇数) | 分配给 LPAR 的 VIO 服务器 |
---|---|---|---|---|
mtxapora00 | 100/101 | 100 | 101 | 操作系统存储 |
mtxapora00 | 102/103 | 102 | 103 | 数据库存储 |
mtxapora00 | 104/105 | 104 | 105 | 数据库存储 |
mtxapora00 | 106/107 | 106 | 107 | 数据库存储 |
mtxapora00 | 108/109 | 108 | 109 | 分页 |
mtxapora01 | 110/111 | 110 | 111 | 操作系统存储 |
mtxapora01 | 112/113 | 112 | 113 | 数据库存储 |
mtxapora01 | 114/115 | 114 | 115 | 数据库存储 |
mtxapora01 | 116/117 | 116 | 117 | 数据库存储 |
mtxapora01 | 118/119 | 118 | 119 | 分页 |
mtxapora02 | 120/121 | 120 | 121 | 操作系统存储 |
mtxapora02 | 122/123 | 122 | 123 | 应用程序存储 |
mtxapora02 | 124/125 | 124 | 125 | 数据库存储 |
mtxapora02 | 126/127 | 126 | 127 | 数据库存储 |
mtxapora02 | 128/129 | 128 | 129 | 分页 |
这种将插槽编号分配给虚拟 SCSI 适配器的标准化方法极大增强了管理员构建、修改和维护客户端 LPAR 和 VIO 服务器的能力。管理员可以立刻识别出由哪个 VIO 服务器为来自客户端 LPAR 的存储提供有效(或无效的)路径以及哪里存在问题。管理员也能够对特定的虚拟 SCSI 适配器进行离线维护或重新配置,而不会影响其他虚拟适配器上的存储。根据偶数/奇数模式在每个 VIO 服务器上创建虚拟 SCSI 适配器;尽管如此,是否根据上述标准将适配器分配给每个客户端 LPAR 仍由管理员来决定。
存储数组中的 LUN 通常会分配给与双 VIO 服务器相连的物理适配器。单个 LUN 会通过虚拟 SCSI 适配器分配给这两个 VIO 服务器,并显示给客户端 LPAR。客户端 LPAR 上的 Multi-Path I/O (MPIO) 驱动器则会识别到有一个 LUN 通过多个虚拟路径出现(每个 VIO 服务器上各一个),并且通过 “cfgmgr” 命令会发现一个 “hdisk”。
要配置的 LPAR 将拥有由双 VIOS 提供的多个资源,其中包括一个或多个 “vscsi” 适配器。还可以在 LPAR 配置中手动配置额外的物理设备,然而,本过程只介绍与虚拟设备相关的配置。
适配器类型 | 示例插槽 | 示例设备名称 | 用途 |
---|---|---|---|
虚拟 SCSI 适配器 | 100 | vscsi0 | 操作系统磁盘 |
虚拟 SCSI 适配器 | 101 | vscsi1 | 操作系统磁盘 |
虚拟 SCSI 适配器 | 102 | vscsi2 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 103 | vscsi3 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 104 | vscsi4 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 105 | vscsi5 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 106 | vscsi6 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 107 | vscsi7 | 数据/应用程序磁盘 |
虚拟 SCSI 适配器 | 108 | vscsi8 | 其他磁盘 |
虚拟 SCSI 适配器 | 109 | vscsi9 | 其他磁盘 |
此处描述的磁盘配置假设每个虚拟化磁盘对存储 SAN 有多条路径,每个 VIO 服务器有一条路径。Multi-Path I/O (MPIO) 的默认配置是将所有路径都赋予同样的优先级;这会将所有的 SAN 流量引向第一个 VIO 服务器。为了在两个 VIO 服务器之间平均分配存储通信流量,必须为 MPIO 配置中的每个路径分配一个路径优先级。目的是在 VIO 服务器之间平均地分配负载;尽管如此,对所有 “hdisk0” 磁盘来说,不必总是将最高优先级的路径指向偶数编号的 VIO 服务器。因此,在分配路径优先级时,应实现以下的逻辑:
此路径优先级逻辑在名为 “vscsiPriority.ksh” 的 shell 脚本中有描述,它可以自动设置 VIO 服务器和/或客户端 LPAR 上所有磁盘的优先级。 可通过下列 URL 下载此脚本:http://www.mtxia.com/js/Downloads/Scripts/Korn/Functions/vscsiPriority.txt。
下一步是配置分配给客户端 LPAR 的虚拟存储(演示 VSCSI 插槽编号标准以及其用处)。已经完全知晓 VIO 服务器上与每个客户端 LPAR 对应的 VSCSI 插槽编号;尽管如此,在客户端 LPAR 上,只要能够识别出插槽编号中惟一重要部分(即编号最后一位)就已经足够了。以零(0)或一(1)结尾的插槽用于操作系统磁盘。以二(2)或三(3)结尾 的插槽用于应用程序和数据磁盘。以二(2)结尾的插槽由主机名为偶数编号的 VIO 服务器提供,以三(3)结尾的插槽由主机名为奇数编号的 VIO 服务器提供。 因此,在客户端 LPAR 上,所有父 VSCSI 适配器具有以二(2)或三(3)结尾的插槽号的磁盘都能自动检测到,并组成一个存储卷组。存储卷组中的磁盘可以分成逻辑卷和文件系统。以下的 Korn shell 语句会利用 “lscfg” 命令的输出结果以获取插槽编号以二(2)或三(3)结尾的 VSCSI 适配器对应的磁盘列表:
VGDISKS=$( lscfg -l 'hdisk*' | egrep -- '-C[0-9]*[23]-' | awk '{ print $1 }' | sort -n ) |
以下的 Korn shell 代码定义了在自动化虚拟存储配置过程中会用到的几个值。
# Determine the length of the host name LEN="${#HNAME}" # extract the last two characters of the host name, assumed to be a two digit number SEQNBR=${HNAME:LEN-2:2} # assign a resource group name which will be used to define the VG, LVs, and file systems. RG="mtxdev${SEQNBR}" # Assign the volume group major number VGMJ="8${SEQNBR}" # Assign a unique identifier to use during the creation of the volume group VGID="00vg" # Assign a unique identifier to use during the creation of the Log Logical Volume LGID="jfs2" # Assign a directory mount point for the file system using the resource group name MTPT="/${RG}" # Create the volume group using the previously defined values mkvg -f -y ${RG}${VGID} -V ${VGMJ} ${VGDISKS} # Create the log logical volume using the previously defined values /usr/sbin/mklv -y ${RG}${LGID}lv -t jfs2log -a e "${RG}${VGID}" 1 # Determine the number of free physical partitions associated with the volume group FREEPPS=$( print "a=0; $( lsvg -p ${RG}${VGID} | sed -e '1,2 d' | awk '{ print $4 }' | sed -e 's/^/a=a+/' ); a" | bc ) # Assign the number of physical partitions to use for the application/data logical volume. LVSIZE=$(( FREEPPS - 5 )) # Create the application/data logical volume /usr/sbin/mklv -y ${RG}${LVID}lv \ -t jfs2 \ -x 5000 \ -a e \ "${RG}${VGID}" \ ${LVSIZE} # Create the application/data file system /usr/sbin/crfs -v jfs2 \ -d "${RG}${LVID}lv" \ -m "${MTPT}" \ -A y \ -p rw \ -a agblksize=4096 \ -a logname="${RG}${LGID}lv" # Mount the newly created file system mount /${RG} |
以上命令的结果是在一个通过资源组名称进行识别的目录上加载了一个完全配置的文件系统。本文中所有的 shell 脚本命令的重点就是增强系统管理各方面与标准化流程相关的业务连续性智能,其中包括网络和存储的构建。 像这样的标准化流程可以快速实现过程自动化和数据中心自动化。
有了网络和存储的自动构建,就能考虑其他组件的进程自动化,比如应用程序部署、数据库部署、负载管理配置、高可用性 (HACMP) 实现、灾难恢复实现、自动文件编制、审计合规性和审计响应。
设置 SAN 基础结构通信路径优先级可提供以下多项收益:
最重要的是,建立路径优先级可提供一个标准化的、可重复的、可传授的方法,可供多个平台和多个管理员维护。这种管理和分配 SAN 流量的连续方法可以进行记录、测试和追踪。IT 管理人员可以使用此方法促进物理资源的优化,从这些资源中获得最高的投资回报率。