从多个独立的硬件和软件,包括 System x™ 和 IBM TotalStorage®,创建一个可运行的 Linux® 集群。第 4 部分提供了设置存储后端所需的操作指导的后半部分内容,包括在每个节点上安装 GPFS(General Parallel File System)代码,以及为存储节点配置 Qlogic 适配器。最后,本文将带领您遍历创建 GPFS 集群的步骤。<!--START RESERVED FOR FUTURE USE INCLUDE FILES--><!-- include java script once we verify teams wants to use this and it will work on dbcs and cyrillic characters --> <!--END RESERVED FOR FUTURE USE INCLUDE FILES-->
本 文是系列文章中的第 4 部分,也是最后一部分。该系列文章涵盖了安装和设置一个大型 Linux 计算机集群的全部内容。有关如何从多个独立的硬件和软件创建一个可运行的 Linux(R) 集群的资源很多,本系列力求把这些公共领域里的资源中的最新信息集中起来以供您参考。本系列文章无意为您提供有关如何设计一个新的大型 Linux 集群的基础知识;要获得一般性的架构方面的知识,请参考本文中提到的相关参考资料和 Redbooks™。
本系列是针对系统架构师和系统工程师使用 IBM eServer™ Cluster 1350 框架(关于该框架的更多信息,请参见 参考资料 )计划和实现 Linux 集群而设计的。其中的一部分内容可能会与集群管理员的日常集群操作有关。本文的每个章节都针对相同的示例安装。
本系列的 第 1 部分 详细阐述了设置集群硬件的操作指导。 第 2 部分 带您亲历了硬件配置的后续步骤:安装软件,这其中会用到 IBM systems 管理软件、Cluster Systems Management (CSM) 和节点安装。
第 3 部分 和本文(介绍集群存储后端)全面介绍了存储的硬件配置以及 IBM 共享文件系统 GPFS(General Parallel File System)的安装和配置。 第 3 部分 详细讨论了存储系统的架构、硬件准备以及存储区域网络(Storage Area Network,SAN)的设置。本文是系列文章的第 4 部分,也是最后一部分,提供了有关特定于此示例集群存储后端的 CSM 的详细信息,尤其是如何执行存储系统的节点安装以及 GPFS 的集群配置。
|
|
本 节详细介绍了与示例集群的存储后端相关的集群服务器管理(CSM)细节。内容包括在每个节点上安装 GPFS 代码,以及为存储节点配置 Qlogic 适配器。请注意这种配置并不一定需要使用 CSM 执行;也可以手工完成。本文中的例子使用 CSM 几乎实现了新服务器安装的自动化,包括存储服务器。
在阅读本节之前,先阅读一下本系列 第 1 部分 中有关总体集群架构的章节将会很有益处。阅读 第 3 部分 中有关存储架构的章节将会获益良多。理解整个架构可以使您更好的利用本文中的信息。
按照正确的顺序进行安装是解决后面介绍的 ROM 溢出问题所必须的,因为该配置中使用的 xSeries™ 346 系统没有使用 RAID 7K 卡。请按照以下顺序完成这些步骤:
csmsetupks -vxn <nodename>
。 installnode -vn <nodename>
。 disabled
修改为 enabled for planar ethernet 1
。log /var/log/csm/install.log
。disabled
。GPFS 需要 GPFS 集群中的所有节点都能够使用根用户 ID 访问其他节点,而不需要提供密码。GPFS 使用这个中间节点的访问允许 GPFS 集群中的任何节点在其他节点上运行相关命令。例如,此处就使用了安全 shell(ssh)来提供这种访问能力,不过您也可以使用远程 shell(rsh)。为此,请创建一个集群范围内的密钥和相关配置文件,然后按照下面的步骤使用 CSM 分发这些文件:
/cfmroot/root/.ssh
和 /cfmroot/etc/ssh
。ssh-keygen -b 1024 -t rsa -f /cfmroot/etc/ssh/ssh_host_rsa_key -N "" -C "RSA_Key" |
ssh-keygen -b 1024 -t dsa -f /cfmroot/etc/ssh/ssh_host_dsa_key -N "" -C "DSA_Key" |
cat /root/.ssh/id_rsa.pub > /cfmroot/root/.ssh/authorized_keys2 |
known_hosts
文件,如下所示。这个文件中包含了很多主机名。如果一个主机已经出现在这个文件中,那么 SSH 就不会提示用户确认连接。CSM 会试图维护这个文件,但是在一个不需要根密码访问的混合集群环境中,这可能会成为一种障碍。
stopcondresp NodeFullInstallComplete SetupSSHAndRunCFM |
known_hosts
文件。这最好通过创建一个脚本来实现,如下所示。运行这个脚本并将输出重定向到 /cfmroot/root/.ssh/known_hosts
中。
#!/bin/bash |
known_hosts
文件的格式已经超出了本文的范围,但是对每一行都使用一个以逗号分隔开的主机名会非常有用。cd /cfmroot/root/.ssh |
对于本例来说,我们定义了两个主要的 CSM 组在配置 GPFS 过程中使用,如下所示。
StorageNodes
,其中只包括那些直接连接到 SAN 上的节点,例如 nodegrp -w "Hostname like 'stor%'" StorageNodes
。 NonStorageNodes
,其中包括了构成 GPFS 集群的所有其他节点,例如 nodegrp -w "Hostname not like 'stor%'" NonStorageNodes
。 这两个组在安装过程中用来确保执行存储节点角色的服务器可以接收特定的二进制文件和配置文件,这在下面会详细进行介绍。注意本节没有介绍 CSM 所执行的详细安装步骤。有关对这个过程的介绍,请参看本系列文章的 第 1 部分 和 第 2 部分。
安装过程被总结为以下阶段:
本文中的配置修改都是在 pre-reboot 和 CFM 文件传输阶段进行的。
GPFS 需要每个集群成员都安装一个基本的 GPFS RPM 集。样例安装所使用的 GPFS 版本是 2.3.0-3。这些 RPM 的安装是一个两阶段的过程:安装 2.3.0-1 基本版本,然后更新到 2.3.0-3。这个安装使用的 RPM 有:
注意:由于本文中的例子使用的是 GPFS Version 2.3,因此并不需要安装 Reliable Scalable Cluster Technology(RSCT)并创建一个对应的域。Version 2.3 之前版本的 GPFS 需要这些手工设置这些步骤。
CSM 可以采用多种方法来安装 GPFS RPM。本文推荐在安装基本操作系统时安装 RPM。CSM 提供了一个包含定制的 RPM 的安装和更新目录结构,然而,对于最初的 RPM 安装,以及之后升级到 GPFS 2.3.0-3 所需的 RPM 安装,CSM 提供的结构不一定能够工作。
另一种方法是为 CSM 编写一些 pre-reboot post-installation 脚本来根据需要安装 RPM。在这种情况中,要将所有的 GPFS RPM(包括更新 RPM)全部拷贝到管理服务器上的 /csminstall/Linux
目录中。CSM 通常为脚本数据预留的目录是 /csminstall/csm/scripts/data
,在安装过程中它会被挂载到节点上,这样就可以通过 NFS 来使用所需要的 RPM。
编写安装脚本 /csminstall/csm/scripts/installprereboot/install-gpfs.sh
来安装 GPFS。下面是一个安装脚本的示例:
#! /bin/bash |
一旦在存储服务器上安装 GPFS 之后,您可能还会希望自动安装 FAStT MSJ 工具,这可以以静寂(非交互)模式来完成。MSJ 用于 Qlogic 适配器、故障恢复和多路径等配置,这将在 HBA 配置 一节中详细进行介绍。安装并不是基于 RPM 的,因此默认情况下无法简单地集成到 CSM 中。要安装它,需要在 GPFS 安装程序的末尾添加一个脚本来检查这个节点是否是一个存储服务器,然后再安装 MSJ。要以静寂模式完成安装,请使用 FAStTMSJ*_install.bin -i silent
命令。
示例集群使用的是 Qlogic qla2300 驱动程序,版本为 7.01.01,用于 Qlogic QLA 2342 适配器。存储节点组中的每个节点都有两个这种 PCI 适配器。qla2300 驱动程序已经成为 Red Hat Enterprise Linux 3 update 4 发行版中的标准组件了。然而,为了满足这个示例集群的需要,您需要进行以下修改:
使用脚本进行第一次修改(这个脚本在使用 CSM 安装过程中重启之前运行)。实现这种功能的脚本在 /csminstall/csm/scripts/installprereboot/
目录中。这个脚本包含了以下命令:
#! /bin/bash |
第二个修改需要在对存储节点重新安装时手动执行。详细信息在 在存储服务器上定义 HBA 配置 一节中介绍。
将该示例中提供的几行代码添加到每个节点上的 /etc/sysctl.conf
文件中,用来对 GPFS 网络进行调优。这是通过 CSM 使用的 post-reboot 安装脚本完成的。这个脚本位于 /csminstall/csm/scripts/installpostreboot
目录中,包含以下内容:
FILE=/etc/sysctl.conf |
GPFS 可移植层(PL)是内核特有的,必须为集群中的每个操作系统级别单独创建。PL 的作用和为示例集群创建它的过程将在 生成并安装可移植层 一节中详述。CSM 使用 CFM 文件传输工具来管理 PL 二进制文件的分发。将 PL 二进制文件拷贝到管理服务器上的 /cfmroot/usr/lpp/mmfs/bin
目录中,并对文件进行命名,使它们只会分发到相关组中具有特定内核版本的节点上。例如:
/cfmroot/usr/lpp/mmfs/bin/dumpconv._<nodegroup> |
注意在大型集群中,为了减轻 CFM 的负载,可以将这 4 个文件添加到定制 RPM 中,并使用上文介绍的 GPFS RPM 安装方法与 GPFS 一起安装。
简 单地安装 GPFS RPMS 和可移植层无法在新安装的节点上挂载并配置 GPFS 集群中的文件系统。在小型集群中,这可以手工进行管理。然而,扩展到更大规模的集群之后,就需要自动化完成这个步骤。这可以通过使用 CSM 的监视功能来完成:监视整个新节点的安装过程,并启动一个脚本在集群中的新节点上配置和挂载 GPFS。
清单 1 给出了一个示例脚本,可以用来配置 GPFS。您可能需要针对自己的配置对这个脚本稍加修改。清单 1 提供了一些基本内容。这个脚本会接收节点名(由 CSM 监视器传入),将其添加到 GPFS 集群中,并尝试在这个节点上启动 GPFS,这个过程会提供一点错误处理功能。
|
当节点完成基本操作系统的安装时,您可以使用 CSM 自动运行如清单 1 所示的脚本,这样在节点引导时,就可以自动挂载 GPFS 文件系统了。首先需要将这个脚本定义为 CSM 监视器中的一种响应机制。例如: mkresponse -n SetupGPFS -s /path/to/script/SetupGPFS.sh SetupGPFS
。
现在就有一个名为 SetupGPFS 的响应了,它会运行这个脚本。接下来应该将这个响应关联到默认的 CSM 条件 NodeFullInstallComplete
,方法如下: startcondresp NodeFullInstallComplete SetupGPFS
。
现在每当安装一个新节点时,CSM 都会在管理服务器上自动运行这个脚本。在 CSM 管理服务器上,现在当运行 lscondresp
命令时,应该可以看到 NodeFullInstallComplete
条件与 SetupGPFS
响应关联。这个条件或响应应该被列为 Active
。
xSeries 346 上可用 ROM 的空间数量存在一个问题,在引导时可能会出现 PCI 分配错误。消息说明系统 ROM 空间已满,没有空间来为其他使用 ROM 空间的适配器使用了(更详细内容请参看 参考资料)。
如果启用了 PXE 引导,这个问题就会影响存储节点,其中 Qlogic PCI 适配器没有足够的空间正确进行初始化。针对这个问题的一个解决方案如下;
避免这个问题的另外一种解决方案是在每台 xSeries 346 上都使用一个 RAID 7K 卡。这可以减少 SCSI BIOS 所使用的 ROM 数量,并允许 Qlogic BIOS 成功加载,即使启用了 PXE 也没有问题。
示例集群中 xSeries 346 存储服务器上使用的 HBA 是 IBM DS4000 FC2-133 Host Bus Adapter(HBA)型号的适配器。它也称为 Qlogic 2342 适配器。本例使用了 1.43 版本的固件,以及上一节提到的 v7.01.01-fo qla2300 驱动程序。驱动程序中的 -fo
表示具有故障恢复功能,这不是驱动程序的默认选项。可以通过修改每个存储节点上的 /etc/modules.conf
的设置启用。这是在安装过程中使用 CSM 实现的,将在 配置 Qlogic 故障恢复 一节中介绍。
下一节介绍了更新固件和每个存储服务器上 HBA 设置所需要的步骤,以及重新安装驱动以在两个 HBA 之间启用负载均衡所需要的手工步骤。
您可以从 IBM System x 支持 Web 站点(请参看 参考资料)上下载 FC2-133 HBA 的固件。固件可以使用 IBM Management Suite Java 或可引导的磁盘和 flasutil 程序进行更新。
对于这个示例集群来说,需要对 HBA 的默认设置进行以下修改。这些值位于所下载的驱动程序提供的 README 中。您可以使用 Qlogic BIOS 完成这些修改,在引导过程中出现提示符时使用 <ctrl>-q
可进入 Qlogic BIOS,或者使用 MSJ 工具 修改。设置如下:
IBM FAStT Management Suite Java(MSJ)是一个基于 Java 的 GUI 应用程序,可以管理存储服务器中的 HBA。这个工具可以用来进行配置和诊断。有关下载软件的链接,请参看 参考资料。
示 例设置使用 CSM 将 MSJ 作为 GPFS 安装的一部分在每个存储节点上进行安装。这个二进制文件是包含 GPFS RPM 的 tar 文件的一部分,这个文件是在 CSM 节点安装过程中由 CFS 进行分发的。由一个 post 脚本解压这个 tar 文件,接着运行 tar 文件里面包含的安装脚本。本文的示例在这次安装中使用了 32 位的 FAStT MSJ 来防止在安装 64 位版本时可能出现的问题。示例脚本使用了下面的命令安装 MSJ: FAStTMSJ*_install.bin -i silent
。
这 会同时安装应用程序和代理。注意由于这是一个 32 位版本的 MSJ,因此即使示例使用了静寂安装模式,代码也会查找并加载 32 位版本的库。因此,使用已经安装好的 32 位版本的 XFree86-libs,以及基本 64 位安装附带的 64 位版本。32 位库包含在 XFree86-libs-4.3.0-78.EL.i386.rpm 文件中,该文件包含在 tar 文件中。这个 rpm 的安装是通过 install.sh 脚本进行的,然后会安装 MSJ。
每 个存储节点上都需要使用 MSJ 手工配置到 DS4500s 上的磁盘阵列的路径,以及在每台计算机上两个 HBA 卡之间实现负载均衡。如果没有执行这种配置,默认情况下磁盘阵列只能通过每台计算机上的第一个适配器 HBA0 以及每个 DS4500s 上的控制器 A 进行访问。通过将磁盘分布在 HBA 之间,以及 DS4500s 的控制器之间,就可以实现负载均衡,并提高后端的性能。
注意负载均衡的配置是一个手工执行的步骤,每次重新安装存储节点时,必须在每个存储节点上都重新执行。对于这个示例集群来说,配置负载均衡的步骤如下所示:
ssh <nodename> -X
)的服务器的本地计算机上打开一个新窗口。 # qlremote
。# /usr/FAStT MSJ &
以启动 MSJ GUI。Configure
。此时会出现一个类似于图 1 所示的窗口。 config
)。如果配置成功保存,就会看到一条确认消息。配置会保存到一个名为 /etc/qla2300.conf
的文件中。有几个新的选项应该已经被添加到 /etc/modules.conf
的 qla2300 驱动程序行中,说明这个文件已经存在且应该能够使用。<ctrl>-c
命令停止这个进程。这是非常重要的一步。 在一个具有多个存储节点并且需要进行负载均衡的配置中,使用 MSJ 最有效的方法是保持 MSJ 在一个节点上打开,然后在其他每个节点上运行 qlremote,并使用一个 MSJ 会话连接到其他相应的会话。
|
|
本节将详细介绍在创建 GPFS 集群过程中所需要的步骤。此处假设所有节点都已经按照本文前面的介绍进行了安装和配置,或者已经手工执行了下面的配置:
在本系列文章的 第 3 部分 的 “存储架构” 一节中可以看到对这个示例集群的 GPFS 架构的详细介绍。
请结合 GPFS 文档阅读本节内容(请参看 参考资料),尤其是以下内容:
GPFS 可移植层(PL)是一组二进制文件,需要从源代码开始进行本地编译,以便匹配作为 GPFS 集群一部分的计算机上的 Linux 内核和配置。对于这个示例集群来说,这个过程是在一个存储节点上进行的。所生成的文件会使用 CSM 和 CFM 拷贝到每个节点上。(详细信息请参看 分发 GPFS 可移植层 一节的内容)。这是一个有效的方法,因为所有计算机都使用相同的架构,并且使用的是相同的内核。编译 GPFS PL 的命令可以在 /usr/lpp/mmfs/src/README
中找到。这个示例集群使用的步骤如下所示:
SHARKCLONEROOT=/usr/lpp/mmfs/src
。 cd /usr/lpp/mmfs/src/config, cp site.mcr.proto site.mcr
。 #define GPFS_LINUX
#define GPFS_ARCH_X86_64
LINUX_DISTRIBUTION = REDHAT_AS_LINUX
#define LINUX_DISTRIBUTION_LEVEL 34
#define LINUX_KERNEL_VERSION 2042127
a #
不代表注释。) cd /usr/lpp/mmfs/src
。 make World
创建 GPFS PL。 make InstallImages
将 GPFS PL 拷贝到 /usr/lpp/mmfs/bin
目录中。GPFS PL 中包含以下 4 个文件:
tracedev
mmfslinux
lxtrace
dumpconv
您可以使用几个独特的步骤为这个例子创建 GPFS 集群。尽管所有这些步骤都不是必须的,但是处理集群中不同类型的节点(存储节点或其他节点)是一种好方法。
第一个步骤是创建一个只包含存储节点和 quorum 节点的集群:一共有 5 个节点。在创建包含要包括的所有节点的存储接口的主机简写名时,请使用描述符文件,描述符文件之后再加上以下信息:
quor001
。 创建集群的命令如下:
mmcrcluster -n stor.nodes -C gpfs1 -p stor001_s -s stor002_s -r /usr/bin/ssh -R |
-C
标志设置了集群名。-p
设置主配置服务器节点。-s
设置次配置服务器节点。-r
为 GPFS 使用的远程 shell 程序设置完整路径。-R
设置 GPFS 使用的远程文件拷贝程序。下面是示例集群中使用的 stor.nodes
节点描述符文件:
stor001_s:manager-quorum |
对要加入集群中的所有其他节点,例如计算节点、用户节点和管理节点,请在以后步骤中添加类似于 <nodename>_s:client-nonquorum
的项。
在 quorum 节点上启用 unmountOnDiskFail
下一个步骤是在 tiebreaker 节点上使用 mmchconfig unmountOnDiskFail-yes quor001_s
启用 unmountOnDiskFail
选项。这可以防止 SAN 配置中的虚假磁盘错误被误报给文件系统管理器。
下一个步骤是使用 mmcrnsd –F disc#.desc
命令创建 GPFS 所使用的磁盘。运行这个命令为每个磁盘创建一个全局名,这是一个必要的步骤,因为磁盘在 GPFS 集群中的每个节点上可能有不同的 /dev 名。对 GPFS 文件系统要使用的所有磁盘运行该命令。现在,为每个磁盘定义主 NSD 服务器和次 NSD 服务器;它们用于代表 NSD 客户机的 I/O 操作,NSD 客户机不能够本地访问 SAN 存储。
定义为 NSD 的磁盘的磁盘描述符包含在一个文件里,-F
标志就用来指向这个文件。为了保证示例集群的可管理能力,请在每个 DS4500 的 LUN 上执行一次该过程,并在 tiebreaker 磁盘上执行一次该过程。每个磁盘阵列或 DS4500 上的每个 LUN 在所使用的文件中都有一个描述符。下面是从 disk1.desc
中摘录出来的一行:
sdc:stor001_s:stor002_s:dataAndMetadata:1:disk01_array01S |
下面是该行中的几个字段,按顺序依次显示:
通过使用上面的描述符文件,可以在这个配置中定义下面的 3 个故障组:
disk01
。disk02
。下一个步骤是使用下面的命令在集群范围内启动 GPFS:
mmstartup -w stor001_s,stor002_s,stor003_s,stor004_s
。mmstartup -w quor001_s,mgmt001_s,...
dsh -N ComputeNodes /usr/lpp/mmfs/bin/mmstartup
。/var/adm/log/mmfs.log.latest
文件(使用 mmlsmgr <filesystem>
命令时可以找到),并监视下面这个命令的输出结果: mmgetstate -w <nodenames> dsh -N ComputeNodes /usr/lpp/mmfs/bin/mmgetstate
。mmstartup –a
。这对于小型集群来说可以正常工作,但是对于大型集群来说,可能会需要花费很长一段时间来返回,在大型集群中,可能有些节点会由于各种原因而变得不可访问,例如网络问题。
对于本例来说,使用所有定义为 GPFS 的 NSD 创建了一个大型的 GPFS 文件系统。注意所使用的命令使用上面的 mmcrnsd
命令中的不同磁盘描述符文件作为参数。这需要将创建 NSD 的每个步骤中的输出结果连接到一个文件中。
示例集群使用了以下设置:
-F
设置)/gpfs
-A
设置)-B
设置)-m, -M, -r, -R
设置)-n
设置)-Q
设置) 下面是完整的命令:
mmcrfs /gpfs /dev/gpfs -F disk_all.desc -A yes -B 256K -m 2 -M 2 |
在创建 /gpfs
之后,要手工进行第一次挂载。然后,如果启用了 automount,就可以在节点启动 GPFS 时自动挂载。
上面 mmcrfs
命令的 -Q
标志在 /gpfs
文件系统上启用配额。可以为每个用户或组用户定义配额。默认配额已经进行了设置,可以适用于任何新用户或组。可以使用命令 mmdefquotaon
启用默认配额。使用 mmdefedquota
命令编辑默认配额。这个命令打开了一个编辑窗口,其中可以指定配额的范围。下面的示例演示了配额范围的设置:
gpfs: blocks in use: 0K, limits (soft = 1048576K, hard = 2097152K) |
使用 mmedquota –u <username>
命令可以为一个用户或组编辑特定配额。用户可以使用命令 mmlsquota
显示自己的配额。超级用户可以使用 mmrepquota gpfs
命令显示文件系统的配额状态。
这个集群经过配置后,当服务器引导时,使用 mmchconfig autoload=yes
命令在 /etc/inittab
中添加一项,GPFS 就可以自动启动。
使用 GPFS pagepool
可以缓存用户数据和文件系统元数据。pagepool
机制允许 GPFS 将读请求与写请求异步实现。增加 pagepool
的大小可以增大 GPFS 可以缓存的数据或元数据量,而不需要执行同步 I/O。 pagepool 的默认值是 64 MB。最大 GPFS pagepool
大小是 8 GB。所允许的最小值是 4 MB。在 Linux 系统上, pagepool
的最大值是计算机物理内存的一半
pagepool
的理想大小取决于应用程序以及对其重新访问的数据的有效缓存的需要。如果系统中的应用程序可以访问大型文件、重用数据、可以从 GPFS 数据预取获益或具有随机 I/O 模式,增加 pagepool
的值可能会进一步获益。然而,如果该值设置得太大,那么 GPFS 就无法启动。
对于示例集群来说,集群中所有节点的 pagepool
所使用的值都是 512 MB。
要对网络性能进行优化,GPFS 通过将存储网络适配器的 MTU 的大小设置为 9000 来启用巨帧。始终启用 /proc/sys/net/ipv4/tcp_window_scaling
,因为这是默认设置。TCP 窗口设置在安装时使用 CSM 脚本进行了调优,方法是将下面几行添加到 NSD 服务器和 NSD 客户机的 /etc/sysctl.conf
文件中:
# increase Linux TCP buffer limits |
存储服务器缓存设置如果设置错误,可能会影响 GPFS 性能。本例在 DS4500s 上使用了以下设置,这也是 GPFS 文档的推荐设置:
|
|
就是这样!您应该已经按照本系列文章中的例子成功安装了一个大型的 Linux 集群。在自己的安装中应用这些原则就可以成功安装另外一个大型 Linux 集群。