分类: LINUX
2008-05-02 20:03:35
从多个独立的硬件和软件,包括 System x™ 和 IBM TotalStorage®,创建一个可运行的 Linux® 集群。第 4 部分提供了设置存储后端所需的操作指导的后半部分内容,包括在每个节点上安装 GPFS(General Parallel File System)代码,以及为存储节点配置 Qlogic 适配器。最后,本文将带领您遍历创建 GPFS 集群的步骤。
简介
本文是系列文章中的第 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
。 installnode -vn
。 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 cat /root/.ssh/id_dsa.pub >> /cfmroot/root/.ssh/authorized_keys2 cat /cfmroot/etc/ssh/ssh_host_rsa_key.pub >> /cfmroot/root/.ssh/authorized_keys2 cat /cfmroot/etc/ssh/ssh_host_dsa_key.pub >> /cfmroot/root/.ssh/authorized_keys2 |
known_hosts
文件,如下所示。这个文件中包含了很多主机名。如果一个主机已经出现在这个文件中,那么 SSH 就不会提示用户确认连接。CSM 会试图维护这个文件,但是在一个不需要根密码访问的混合集群环境中,这可能会成为一种障碍。
stopcondresp NodeFullInstallComplete SetupSSHAndRunCFM startcondresp NodeFullInstallComplete RunCFMToNode perl -pe 's!(.*update_known_hosts.*)!#$1!' -i /opt/csm/csmbin/RunCFMToNode |
known_hosts
文件。这最好通过创建一个脚本来实现,如下所示。运行这个脚本并将输出重定向到 /cfmroot/root/.ssh/known_hosts
中。
#!/bin/bash RSA_PUB=$(cat "/cfmroot/etc/ssh/ssh_host_rsa_key.pub") DSA_PUB=$(cat "/cfmroot/etc/ssh/ssh_host_dsa_key.pub") for node in $(lsnodes); do ip=$(grep $node /etc/hosts | head -n 1 | awk '{print $1}') short=$(grep $node /etc/hosts | head -n 1 | awk '{print $3}') echo $ip,$node,$short $RSA_PUB echo $ip,$node,$short $DSA_PUB done |
known_hosts
文件的格式已经超出了本文的范围,但是对每一行都使用一个以逗号分隔开的主机名会非常有用。cd /cfmroot/root/.ssh ln -s ../../etc/ssh/ssh_host_dsa_key id_dsa ln -s ../../etc/ssh/ssh_host_dsa_key.pub id_dsa.pub ln -s ../../etc/ssh/ssh_host_rsa_key id_rsa ln -s ../../etc/ssh/ssh_host_rsa_key.pub id_rsa.pub |
定义与 GPFS 有关的 CSM 组
对于本例来说,我们定义了两个主要的 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 RPM
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 # Installs GPFS filesets and updates to latest levels # CSMMOUNTPOINT environment variable is set by CSM DATA_DIR=$CSMMOUNTPOINT/csm/scripts/data cd $DATA_DIR rpm -ivh gpfs.*2.3.0-1*.rpm rpm -Uvh gpfs.*2.3.0-3*.rpm echo 'export PATH=$PATH:/usr/lpp/mmfs/bin' > /etc/profile.d/gpfs.sh |
一旦在存储服务器上安装 GPFS 之后,您可能还会希望自动安装 FAStT MSJ 工具,这可以以静寂(非交互)模式来完成。MSJ 用于 Qlogic 适配器、故障恢复和多路径等配置,这将在 HBA 配置 一节中详细进行介绍。安装并不是基于 RPM 的,因此默认情况下无法简单地集成到 CSM 中。要安装它,需要在 GPFS 安装程序的末尾添加一个脚本来检查这个节点是否是一个存储服务器,然后再安装 MSJ。要以静寂模式完成安装,请使用 FAStTMSJ*_install.bin -i silent
命令。
配置 Qlogic 故障恢复
示例集群使用的是 Qlogic qla2300 驱动程序,版本为 7.01.01,用于 Qlogic QLA 2342 适配器。存储节点组中的每个节点都有两个这种 PCI 适配器。qla2300 驱动程序已经成为 Red Hat Enterprise Linux 3 update 4 发行版中的标准组件了。然而,为了满足这个示例集群的需要,您需要进行以下修改:
使用脚本进行第一次修改(这个脚本在使用 CSM 安装过程中重启之前运行)。实现这种功能的脚本在 /csminstall/csm/scripts/installprereboot/
目录中。这个脚本包含了以下命令:
#! /bin/bash # Adds lines to /etc/modules.conf to enable failover for the qla2300 drivers echo "options qla2300 ql2xfailover=1 ql2xmaxsectors=512 ql2xmaxsgs=128" >> /etc/modules.conf echo "Updating initrd with new modules.conf set up" mkinitrd -f /boot/initrd-`uname -r`.img `uname -r` |
第二个修改需要在对存储节点重新安装时手动执行。详细信息在 在存储服务器上定义 HBA 配置 一节中介绍。
GPFS 网络调优
将该示例中提供的几行代码添加到每个节点上的 /etc/sysctl.conf
文件中,用来对 GPFS 网络进行调优。这是通过 CSM 使用的 post-reboot 安装脚本完成的。这个脚本位于 /csminstall/csm/scripts/installpostreboot
目录中,包含以下内容:
FILE=/etc/sysctl.conf # Adds lines to /etc/sysctl.conf for GPFS network tuning echo "# CSM added the next 8 lines to the post installation script for GPFS network tuning" >> $FILE echo "# increase Linux TCP buffer limits" >> $FILE echo "net.core.rmem_max = 8388608" >> $FILE echo "net.core.wmem_max = 8388608" >> $FILE echo "# increase default and maximum Linux TCP buffer sizes" >> $FILE echo "net.ipv4.tcp_rmem = 4096 262144 8388608" >> $FILE echo "net.ipv4.tcp_wmem = 4096 262144 8388608" >> $FILE echo "# increase max backlog to avoid dropped packets" >> $FILE echo "net.core.netdev_max_backlog=2500" >> $FILE # Following lines are not related to GPFS tuning echo "# Allow Alt-SysRq" >> $FILE echo "kernel.sysrq = 1" >> $FILE echo "# Increase ARP cache size" >> $FILE echo "net.ipv4.neigh.default.gc_thresh1 = 512" >> $FILE echo "net.ipv4.neigh.default.gc_thresh2 = 2048" >> $FILE echo "net.ipv4.neigh.default.gc_thresh3 = 4096" >> $FILE echo "net.ipv4.neigh.default.gc_stale_time = 240" >> $FILE # Reset the current kernel parameters sysctl -p /etc/sysctl.conf |
分发 GPFS 可移植层
GPFS 可移植层(PL)是内核特有的,必须为集群中的每个操作系统级别单独创建。PL 的作用和为示例集群创建它的过程将在 生成并安装可移植层 一节中详述。CSM 使用 CFM 文件传输工具来管理 PL 二进制文件的分发。将 PL 二进制文件拷贝到管理服务器上的 /cfmroot/usr/lpp/mmfs/bin
目录中,并对文件进行命名,使它们只会分发到相关组中具有特定内核版本的节点上。例如:
/cfmroot/usr/lpp/mmfs/bin/dumpconv._ |
注意在大型集群中,为了减轻 CFM 的负载,可以将这 4 个文件添加到定制 RPM 中,并使用上文介绍的 GPFS RPM 安装方法与 GPFS 一起安装。
自动将新节点添加到 GPFS 集群中
简单地安装 GPFS RPMS 和可移植层无法在新安装的节点上挂载并配置 GPFS 集群中的文件系统。在小型集群中,这可以手工进行管理。然而,扩展到更大规模的集群之后,就需要自动化完成这个步骤。这可以通过使用 CSM 的监视功能来完成:监视整个新节点的安装过程,并启动一个脚本在集群中的新节点上配置和挂载 GPFS。
清单 1 给出了一个示例脚本,可以用来配置 GPFS。您可能需要针对自己的配置对这个脚本稍加修改。清单 1 提供了一些基本内容。这个脚本会接收节点名(由 CSM 监视器传入),将其添加到 GPFS 集群中,并尝试在这个节点上启动 GPFS,这个过程会提供一点错误处理功能。
清单 1. 配置 GPFS 使用的示例脚本
#!/bin/bash # CSM condition/response script to be used as a response to the InstallComplete # condition. This will attempt to add the node to the GPFS cluster, dealing # with some common failure conditions along the way. Only trivial attempts are # made at problem resolution, advanced problems are left for manual # intervention. # Note requires the GPFS gpfs-nodes.list file. This file should contain a list # of all nodes in the GPFS cluster with client/manager and # quorum/non-quorum details suitable for passing to the mmcrcluster command. # Output is sent to /var/log/csm/ # Returned error codes: # 1 - GPFS is already active # 2 - unable to read the gpfs-nodes.list file # 3 - node name not present in the gpfs-nodes.list file # 4 - node is a quorum node # 5 - unable to add node to cluster (mmaddnode failed) # 6 - unable to start GPFS on the node (mmstartup failed) # set this to the location of your node list file gpfs_node_list=/etc/gpfs-nodes.list # set this to the interface GPFS is using for communication gpfs_interface=eth1 PATH=$PATH:/usr/lpp/mmfs/bin # ensure GPFS binaries are in the PATH log_file=/var/log/csm/`basename $0`.log # log to /var/log/csm/ touch $log_file # Get the node short name as set by RSCT condition ENV var ERRM_RSRC_NAME node=`echo $ERRM_RSRC_NAME | cut -d. -f1` ( [ ! -r "$gpfs_node_list" ] && echo " ** error: cannot read GPFS node list $gpfs_node_list" && exit 2 echo echo "--- Starting run of `basename $0` for $node at `date`" # Is the node a quorum node? If so exit. quorum_status=`grep $node $gpfs_node_list | cut -d: -f2 | cut -d- -f2` if [ -n "$quorum_status" ]; then if [ "$quorum_status" = "quorum" ]; then echo "** error: this is a quorum node, stopping..." exit 4 else node_s=`grep $node $gpfs_node_list | cut -d: -f1` fi else echo "** error: could not find node $node in GPFS node list $gpfs_node_list" exit 3 fi # Find out if the node is already part of the cluster if mmlscluster | grep $node >/dev/null; then # check the node status status=`mmgetstate -w $node | grep $node | awk '{print $3}'` if [ "$status" = "active" ]; then echo "** error: this node already appears to have GPFS active!" exit 1 fi # attempt to remove node from cluster echo "Node $node is already defined to cluster, removing it" # attempt to disable storage interface on node if ssh $node $ifdown $gpfs_interface; then mmdelnode $node ssh $node ifup $gpfs_interface else echo "** error: could not ssh to $node, or ifdown $gpfs_interface failed" fi fi # try to add node to GPFS cluster if mmaddnode $node; then echo "Successfully added $node to GPFS cluster, starting GPFS on $node" if mmstartup -w $node; then echo "mmstartup -w $node succeeded" else echo "** error: cannot start GPFS on $node, please investigate" exit 6 fi else echo "** error: could not add $node to GPFS cluster" exit 5 fi ) >>$log_file 2>&1 |
当节点完成基本操作系统的安装时,您可以使用 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
。
解决 ROM 溢出问题
xSeries 346 上可用 ROM 的空间数量存在一个问题,在引导时可能会出现 PCI 分配错误。消息说明系统 ROM 空间已满,没有空间来为其他使用 ROM 空间的适配器使用了(更详细内容请参看 参考资料)。
如果启用了 PXE 引导,这个问题就会影响存储节点,其中 Qlogic PCI 适配器没有足够的空间正确进行初始化。针对这个问题的一个解决方案如下;
避免这个问题的另外一种解决方案是在每台 xSeries 346 上都使用一个 RAID 7K 卡。这可以减少 SCSI BIOS 所使用的 ROM 数量,并允许 Qlogic BIOS 成功加载,即使启用了 PXE 也没有问题。
在存储服务上定义 HBA 配置
示例集群中 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 之间启用负载均衡所需要的手工步骤。
下载 HBA 固件
您可以从 IBM System x 支持 Web 站点(请参看 参考资料)上下载 FC2-133 HBA 的固件。固件可以使用 IBM Management Suite Java 或可引导的磁盘和 flasutil 程序进行更新。
配置 HBA 设置
对于这个示例集群来说,需要对 HBA 的默认设置进行以下修改。这些值位于所下载的驱动程序提供的 README 中。您可以使用 Qlogic BIOS 完成这些修改,在引导过程中出现提示符时使用
可进入 Qlogic BIOS,或者使用 MSJ 工具 修改。设置如下:
安装 IBM Management Suite Java
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 -X
)的服务器的本地计算机上打开一个新窗口。 # qlremote
。# /usr/FAStT MSJ &
以启动 MSJ GUI。Configure
。此时会出现一个类似于图 1 所示的窗口。 config
)。如果配置成功保存,就会看到一条确认消息。配置会保存到一个名为 /etc/qla2300.conf
的文件中。有几个新的选项应该已经被添加到 /etc/modules.conf
的 qla2300 驱动程序行中,说明这个文件已经存在且应该能够使用。-c
命令停止这个进程。这是非常重要的一步。 在一个具有多个存储节点并且需要进行负载均衡的配置中,使用 MSJ 最有效的方法是保持 MSJ 在一个节点上打开,然后在其他每个节点上运行 qlremote,并使用一个 MSJ 会话连接到其他相应的会话。
配置 GPFS 集群
本节将详细介绍在创建 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 集群
您可以使用几个独特的步骤为这个例子创建 GPFS 集群。尽管所有这些步骤都不是必须的,但是处理集群中不同类型的节点(存储节点或其他节点)是一种好方法。
第一个步骤是创建一个只包含存储节点和 quorum 节点的集群:一共有 5 个节点。在创建包含要包括的所有节点的存储接口的主机简写名时,请使用描述符文件,描述符文件之后再加上以下信息:
quor001
。 创建集群的命令如下:
mmcrcluster -n stor.nodes -C gpfs1 -p stor001_s -s stor002_s -r /usr/bin/ssh -R /usr/bin/scp |
-C
标志设置了集群名。-p
设置主配置服务器节点。-s
设置次配置服务器节点。-r
为 GPFS 使用的远程 shell 程序设置完整路径。-R
设置 GPFS 使用的远程文件拷贝程序。下面是示例集群中使用的 stor.nodes
节点描述符文件:
stor001_s:manager-quorum stor002_s:manager-quorum stor003_s:manager-quorum stor004_s:manager-quorum quor001_s:client-quorum |
对要加入集群中的所有其他节点,例如计算节点、用户节点和管理节点,请在以后步骤中添加类似于
的项。
在 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
下一个步骤是使用下面的命令在集群范围内启动 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
命令时可以找到),并监视下面这个命令的输出结果: mmgetstate -w dsh -N ComputeNodes /usr/lpp/mmfs/bin/mmgetstate
。这个方法看起来可能过分谨慎了,但是它已经被作为一种可扩充的方法,可在规模巨大的集群中使用。上面这些步骤另外一种方法是使用命令 mmstartup –a
。这对于小型集群来说可以正常工作,但是对于大型集群来说,可能会需要花费很长一段时间来返回,在大型集群中,可能有些节点会由于各种原因而变得不可访问,例如网络问题。
创建 GPFS 文件系统
对于本例来说,使用所有定义为 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 -r 2 -R 2 -n 1200 -Q yes |
在创建 /gpfs
之后,要手工进行第一次挂载。然后,如果启用了 automount,就可以在节点启动 GPFS 时自动挂载。
启用配额
上面 mmcrfs
命令的 -Q
标志在 /gpfs
文件系统上启用配额。可以为每个用户或组用户定义配额。默认配额已经进行了设置,可以适用于任何新用户或组。可以使用命令 mmdefquotaon
启用默认配额。使用 mmdefedquota
命令编辑默认配额。这个命令打开了一个编辑窗口,其中可以指定配额的范围。下面的示例演示了配额范围的设置:
gpfs: blocks in use: 0K, limits (soft = 1048576K, hard = 2097152K) inodes in use: 0, limits (soft = 0, hard = 0) |
使用 mmedquota –u
命令可以为一个用户或组编辑特定配额。用户可以使用命令 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 net.core.rmem_max = 8388608 net.core.wmem_max = 8388608 # increase default and maximum Linux TCP buffer sizes net.ipv4.tcp_rmem = 4096 262144 8388608 net.ipv4.tcp_wmem = 4096 262144 8388608 # increase max backlog to avoid dropped packets net.core.netdev_max_backlog=2500 |
配置 DS4500 设置
存储服务器缓存设置如果设置错误,可能会影响 GPFS 性能。本例在 DS4500s 上使用了以下设置,这也是 GPFS 文档的推荐设置:
结束语
就是这样!您应该已经按照本系列文章中的例子成功安装了一个大型的 Linux 集群。在自己的安装中应用这些原则就可以成功安装另外一个大型 Linux 集群。
原文链接:http://www.ibm.com/developerworks/cn/linux/es-clusterseriespt4/index.html