第二章集群的系统配置表2-1-1集群的主机名IP地址设置节点主机名IP地址控制节点192.168.1.100compuchem计算机点点node021~node029192.168.1.121~192.168.1.129当然,IP和主机名可以根据读者的喜好来定义。5.设置完网络后,会进入分区设置。对于计算节点,可以直接使用默认设置,整体划分为一个区,没有关系。对于控制节点,建议至少划分两个区,一个用于挂载根目录“”,一个用于挂载家目录“/home”,这个目录作为今后集群用户的工作目录,应该划分的很大,如500GB以上。6.在用户设定的界面,为root定制一个密码,密码最好包含有大小写字母、数字、符号等,这样可增加系统的安全性。对于普通用户,要定义一个合法的用户名(以下以coolrainbow为例)以及一个安全的密码(以下假设为123456)。7.分区完成后,继续安装,在选择组件的地方,只选择“BaseSystem”,安装最基本的系统。注意,选了这个选项,我们就安装了一个最小的Debian操作系统,并且没有图形界面。8.系统会请求选择安装的源(source)。所谓源就是Linux在安装时候下载更新文件的地址。这个源非常重要,我们要反复用到,建议选择Taiwan或者Japanese,它们的速度比较快。9.稍微等待后,安装即可完成,重启计算机。至此,系统安装完成。这个过程与网速有关,可能需要不到20分钟,也可能需要1个小时。现在需要对所有的节点做些准备工作:1.添加域名解析地址。打开/etc/hosts文件,添加如下信息:compuchem192.168.1.100node021192.168.1.121node022192.168.1.122node023192.168.1.123node024192.168.1.124node025192.168.1.125node026192.168.1.126node027192.168.1.127node028192.168.1.128node029192.168.1.129第8页
第二章 集群的系统配置 第 8 页 表 2-1-1 集群的主机名 IP 地址设置 节点 主机名 IP 地址 控制节点 compuchem 192.168.1.100 计算机点 node021 ~ node029 192.168.1.121 ~ 192.168.1.129 当然,IP 和主机名可以根据读者的喜好来定义。 5. 设置完网络后,会进入分区设置。对于计算节点,可以直接使用默认设 置,整体划分为一个区,没有关系。对于控制节点,建议至少划分两个区,一个 用于挂载根目录“/”,一个用于挂载家目录“/home”,这个目录作为今后集群用 户的工作目录,应该划分的很大,如 500GB 以上。 6. 在用户设定的界面,为 root 定制一个密码,密码最好包含有大小写字母、 数字、符号等,这样可增加系统的安全性。对于普通用户,要定义一个合法的用 户名(以下以 coolrainbow 为例)以及一个安全的密码(以下假设为 123456)。 7. 分区完成后,继续安装,在选择组件的地方,只选择“Base System”, 安装最基本的系统。注意,选了这个选项,我们就安装了一个最小的 Debian 操 作系统,并且没有图形界面。 8. 系统会请求选择安装的源(source)。所谓源就是 Linux 在安装时候下载 更新文件的地址。这个源非常重要,我们要反复用到,建议选择 Taiwan 或者 Japanese,它们的速度比较快。 9. 稍微等待后,安装即可完成,重启计算机。 至此,系统安装完成。这个过程与网速有关,可能需要不到 20 分钟,也可 能需要 1 个小时。 现在需要对所有的节点做些准备工作: 1. 添加域名解析地址。打开/etc/hosts 文件,添加如下信息: compuchem 192.168.1.100 node021 192.168.1.121 node022 192.168.1.122 node023 192.168.1.123 node024 192.168.1.124 node025 192.168.1.125 node026 192.168.1.126 node027 192.168.1.127 node028 192.168.1.128 node029 192.168.1.129
第二章集群的系统配置这样就建立了相应的解析关系。如pingnode023就相当于执行ping192168.1.123。2.将所有计算节点的普通用户及其家目录删除。也就是说,删除掉node021~nodeo29节点上的coolrainbow用户及其家目录/home/coolrainbow,使用命令:# userdel-r coolrainbow注意不要删除控制节点的coolrainbow!好了,操作系统的安装结束,现在开始安装网络通信系统!S2.2网络通信系统的建立至此,所建立的机器还是互不相干的九台计算机“机群”,而不是相互协作的“集群”。现在的任务是将它们连成一体,成为一个有组织的系统。下面把这个问题详细的说明一下。这部分是整个集群技术的核心!这一节可能会很罗嗪,对于Linux系统原理很熟悉的读者,可以跳过某些解释的部分,直接阅读具体的配置步骤,相信读者一看就会明白集群的组建思想,也许能设计出比我的配置更简单更高效的方法:如果这样,我将非常高兴。如果读者对Linux原理不熟(比如,不知道/etc/fstab是什么东西),可以一边操作,一边搜索其中的知识(如,google一下fstab),这样才能进步。前面说过,控制节点用来操作计算节点。前面说了,compuchem是控制节点,node021~node029是计算节点。实际上,对于用户(而不是像读者一样的集群构建者),控制节点起到了一个黑箱的作用。比如读者的实验室有两个人将要使用集群,名叫coolrainbow和bingtear。当用户coolrainbow使用控制节点(比如在Windows7下远程登录到控制节点)时,只要告诉控制节点:“在node023上用8个CPU拿Gaussian算我这个C60.gif”,控制节点就会执行这个任务,用户完全不需要知道任何关于这个过程如何实现的细节。事实上,背后的细节是这样的:coolrainbow登录到控制节点compuchem,并发出了上述指令时,控制节点首先检查node023是否可用,如果不可用(比如已经运行了别的任务,或者coolrainbow没有权限使用node023,或者node023已经关机,或者根本不存在,)则拒绝执行;如果可用,使用coolrainbow的用户名登录到node023,在node023第9页
第二章 集群的系统配置 第 9 页 这样就建立了相应的解析关系。如 ping node023 就相当于执行 ping 192. 168.1.123。 2. 将所有计算节点的普通用户及其家目录删除。也就是说,删除掉 node021 ~ node029 节点上的 coolrainbow 用户及其家目录/home/coolrainbow,使用命令: # userdel –r coolrainbow 注意不要删除控制节点的 coolrainbow! 好了,操作系统的安装结束,现在开始安装网络通信系统! §2.2 网络通信系统的建立 至此,所建立的机器还是互不相干的九台计算机“机群”,而不是相互协作 的“集群”。现在的任务是将它们连成一体,成为一个有组织的系统。下面把这 个问题详细的说明一下。这部分是整个集群技术的核心! 这一节可能会很罗嗦,对于 Linux 系统原理很熟悉的读者,可以跳过某些解释的部分, 直接阅读具体的配置步骤,相信读者一看就会明白集群的组建思想,也许能设计出比我的配 置更简单更高效的方法:如果这样,我将非常高兴。如果读者对 Linux 原理不熟(比如,不 知道/etc/fstab 是什么东西),可以一边操作,一边搜索其中的知识(如,google 一下 fstab), 这样才能进步。 前面说过,控制节点用来操作计算节点。前面说了,compuchem 是控制节 点,node021 ~ node029 是计算节点。实际上,对于用户(而不是像读者一样的 集群构建者),控制节点起到了一个黑箱的作用。比如读者的实验室有两个人将 要使用集群,名叫 coolrainbow 和 bingtear。当用户 coolrainbow 使用控制节点(比 如在 Windows7 下远程登录到控制节点)时,只要告诉控制节点:“在 node023 上用 8 个 CPU 拿 Gaussian 算我这个 C60.gjf”,控制节点就会执行这个任务,用 户完全不需要知道任何关于这个过程如何实现的细节。事实上,背后的细节是这 样的: coolrainbow 登录到控制节点 compuchem,并发出了上述指令时,控制节点 首先检查 node023 是否可用,如果不可用(比如已经运行了别的任务,或者 coolrainbow 没有权限使用 node023,或者 node023 已经关机,或者根本不存在,) 则拒绝执行;如果可用,使用 coolrainbow 的用户名登录到 node023,在 node023
第二章集群的系统配置上面执行Gaussian算C60.gjf的任务。当然,C60.gif文件在compuchem的硬盘上,控制节点必须把compuchem上的C60.gjf以某种方式让node023得到并运行,且监控这个任务。一旦算完,控制节点就会报告任务结束,并使C60.out和C60.chk出现在compuchem的硬盘上。node023重新进入了可用状态。Done好吧,这个过程看着容易,实际做起来似乎并不那么简单。比如,要想coolrainbow能登录各个节点,我们必须从compuchem到node029挨个建立一个叫coolrainbow的相同用户,密码还得全部知道;要执行Gaussian,还得从node021~nodeo29全部安装Gaussian,路经、配置还得完全一样(不然并行计算会出毛病);还得设计套拷贝文件的系统,让机器自动把C60.gif拷贝到node023上面,算完了再把C60.out和C60.chk拷贝回来......这个过程太可怕了,若集群要把Gaussian从03升级到09,那就得9台全部重新来了。如果读者的组里面很有钱,有100台机器让你升级,嘿嘿..作者的老师曾经说过一句话:只要有一件事情用计算机办是很繁琐的,那么肯定有一种技术你没有学会。没错,无数天才的程序员已经开发了很多优秀的程序来完美的解决上述问题,下面作者将逐步给出解决方法。再次强调:这部分是整个集群技术的核心!82.2.1SSH:主机间无密码的远程登录第一步,要实现coolrainbow在各个节点间自由登录。注意,在s2.1最后,我们已经在全部计算节点中删除了coolrainbow,因此coolrainbow不能登录到计算节点上。没关系,首先,安装ssh。ssh的英文全称是secureshell。它能够实现计算机间的远程登录,ssh把所有传输的数据进行加密,能够防止数据泄密、DNS和IP欺骗,所以是“secure”,还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。最初ssh是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在很多人都转而使用OpenSSH。OpenSSH是ssh的替代软件,而且是免费的,可以预计将来会有越来越多的人使用它而不是ssh。安装OpenSSH,在控制节点和全部计算节点执行:#aptitudeinstallssh第10页
第二章 集群的系统配置 第 10 页 上面执行 Gaussian 算 C60.gjf 的任务。当然,C60.gjf 文件在 compuchem 的硬盘 上,控制节点必须把 compuchem 上的 C60.gjf 以某种方式让 node023 得到并运行, 且监控这个任务。一旦算完,控制节点就会报告任务结束,并使 C60.out 和 C60.chk 出现在 compuchem 的硬盘上。node023 重新进入了可用状态。Done! 好吧,这个过程看着容易,实际做起来似乎并不那么简单。比如,要想 coolrainbow 能登录各个节点,我们必须从 compuchem 到 node029 挨个建立一个 叫 coolrainbow 的相同用户,密码还得全部知道;要执行 Gaussian,还得从 node021 ~ node029 全部安装 Gaussian,路经、配置还得完全一样(不然并行计算会出毛 病);还得设计套拷贝文件的系统,让机器自动把 C60.gjf 拷贝到 node023 上面, 算完了再把 C60.out 和 C60.chk 拷贝回来.这个过程太可怕了,倘若集群要把 Gaussian 从 03 升级到 09,那就得 9 台全部重新来了。如果读者的组里面很有钱, 有 100 台机器让你升级,嘿嘿. 作者的老师曾经说过一句话:只要有一件事情用计算机办是很繁琐的,那么 肯定有一种技术你没有学会。没错,无数天才的程序员已经开发了很多优秀的程 序来完美的解决上述问题,下面作者将逐步给出解决方法。再次强调:这部分是 整个集群技术的核心! §2.2.1 SSH:主机间无密码的远程登录 第一步,要实现 coolrainbow 在各个节点间自由登录。注意,在§2.1 最后, 我们已经在全部计算节点中删除了 coolrainbow,因此 coolrainbow 不能登录到计 算节点上。没关系,首先,安装 ssh。 ssh 的英文全称是 secure shell。它能够实现计算机间的远程登录,ssh 把所有 传输的数据进行加密,能够防止数据泄密、DNS 和 IP 欺骗,所以是“secure”, 还有一个额外的好处就是传输的数据是经过压缩的,所以可以加快传输的速度。 最初 ssh 是由芬兰的一家公司开发的。但是因为受版权和加密算法的限制,现在 很多人都转而使用 OpenSSH。OpenSSH 是 ssh 的替代软件,而且是免费的,可 以预计将来会有越来越多的人使用它而不是 ssh。 安装 OpenSSH,在控制节点和全部计算节点执行: # aptitude install ssh
第二章集群的系统配置这里,aptitude是Debian下安装程序的命令,此时Debian会自动在它的网上的源中搜索ssh并安装,因此要保持外网通畅。强烈建议读者搜索一下aptitude的用法!我们会反复用到。如果读者用过旧的Debian,可能更喜欢apt-get,没有关系,但是千万不要aptitude和apt-get同时使用,这会使依赖关系变得混乱!如果读者就是喜欢用RedHat的话,上述命令就得改为yuminstall之类。有了ssh后,现在配置无密码登录,以后coolrainbow用ssh登陆节点时就不用输入密码了。在控制节点,以coolrainbow身份(不能是root!)执行:s ssh-keygen-tdsa$cd/home/coolrainbowl.sshS cat id_dsa.pub >> authorized_keys它的原理:假设要想实现从机器A无密码登录到B,A和B双方必须互相有一个的密钥。第一个命令即是产生密钥,自动生成在家目录的.ssh文件夹。然后密钥另一方必须也拥有,这个文件名叫authorizedkeys,因此执行最后一行命令,将密钥导入这个文件中。只要A机器的authorized_keys和B的.ssh/中的内容匹配,就可以无密码的登录。现在ssh本机:$sshcompuchemTheauthenticityofhost'192.168.1.100(192.168.1.100)can'tbeestablishedRSAkey fingerprint is e4:05:08:65:e4:b8:a0:88:cd:be:16:c8:9e:4b:96:87.Areyousureyouwanttocontinueconnecting(yes/no)?回答yes,即可。这样本机到本机便可实现无密码ssh登录,以后再次登陆时,就不会出现上面的问题了,也不需要密码了。有人问:自己到自己ssh有什么用,跟计算节点有什么关系?没事,马上就有关系了。$2.2.2NFS:主机间的文件共享第二步,配置文件共享。coolrainbow要想在node023上面运行Gaussian,首先node023上面得有Gaussian,还得有要运行的文件C60.gjf等等。保持这些文件的同步是个很困难的事情。解决办法就是事用NFS系统。第11页
第二章 集群的系统配置 第 11 页 这里,aptitude 是 Debian 下安装程序的命令,此时 Debian 会自动在它的网 上的源中搜索 ssh 并安装,因此要保持外网通畅。 强烈建议读者搜索一下 aptitude 的用法!我们会反复用到。 如果读者用过旧的 Debian,可能更喜欢 apt-get,没有关系,但是千万不要 aptitude 和 apt-get 同时使用,这会使依赖关系变得混乱! 如果读者就是喜欢用 RedHat 的话,上述命令就得改为 yum install 之类。 有了 ssh 后,现在配置无密码登录,以后 coolrainbow 用 ssh 登陆节点时就 不用输入密码了。 在控制节点,以 coolrainbow 身份(不能是 root!)执行: $ ssh-keygen –t dsa $ cd /home/coolrainbow/.ssh $ cat id_dsa.pub >> authorized_keys 它的原理:假设要想实现从机器 A 无密码登录到 B,A 和 B 双方必须互相 有一个的密钥。第一个命令即是产生密钥,自动生成在家目录的.ssh 文件夹。然 后密钥另一方必须也拥有,这个文件名叫 authorized_keys,因此执行最后一行 命令,将密钥导入这个文件中。只要 A 机器的 authorized_keys 和 B 的.ssh/中 的内容匹配,就可以无密码的登录。 现在 ssh 本机: $ ssh compuchem The authenticity of host '192.168.1.100 (192.168.1.100)' can't be established. RSA key fingerprint is e4:05:08:65:e4:b8:a0:88:cd:be:16:c8:9e:4b:96:87. Are you sure you want to continue connecting (yes/no)? 回答 yes,即可。这样本机到本机便可实现无密码 ssh 登录,以后再次登陆 时,就不会出现上面的问题了,也不需要密码了。 有人问:自己到自己 ssh 有什么用,跟计算节点有什么关系?没事,马上就 有关系了。 §2.2.2 NFS:主机间的文件共享 第二步,配置文件共享。coolrainbow 要想在 node023 上面运行 Gaussian, 首先 node023 上面得有 Gaussian,还得有要运行的文件 C60.gjf 等等。保持这些 文件的同步是个很困难的事情。解决办法就是事用 NFS 系统
第二章集群的系统配置NFS(NetworkFileSystem)即网络文件系统,是一种在网络上的机器间共享文件的方法,文件就如同位于客户的本地硬盘驱动器上一样。NFS服务器可以把文件系统导入给其它系统,NFS客户端可以挂载从其它机器上导出的文件系统。如果上面的描述看不懂,没关系,我们先把它安装上,然后详细解释。在控制节点上安装NFS服务器:# aptitude install nfs-kernel-server现在,打开/etc/exportfs文件,这个文件专门用来配置要共享的文件系统。现在在此文件里添加如下内容:/home192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check/opt192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)/usr/local192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check)这个exportfs文件,就是我们要共享文件的配置文件,控制节点compuchem会按照这个文件里面的内容,给计算节点共享文件。以第一行为例,解释其中的含义:/home:要导出的目录。/home是用户的家目录,必须要共享计算节点,这样我们的文件才能被计算节点获取。我们还共享了另外两个目录:lopt和/usr/local。前者是为了共享后面将要安装的intel编译器;后者,习惯上,Linux下的应用软件都安装到这一目录(相当于Windows下的C:IProgramFiles),整个集群的计算化学软件如Gaussian等都会装到这个目录下,因此也要共享出去。192.168.1.0/255.255.255.0:可以挂载的IP范围,这个设置用了一个掩码,表示共享给所有192.168.1.X的IP,我们的计算节点的IP是192.168.0.021~030,所以计算节点可以共享到。(rw,sync,no_root_squash,subtreecheck):挂载的配置。这里表示可读可写,同步执行,若NFS主机使用分享目录的使用者,如果是root的话,那么对于这个分享的目录来说,他就具有root的权限,强制NFS检查父目录的权限。重启NFS服务:#/etc/init.d/nfs-kernel-serverrestart现在,这些目录就被挂载出去。但是,计算节点还没有“接手”这些目录,现在,让计算节点将这些目录挂载。打开所有计算节点的/etc/fstab文件,在文件下面添加:nfs00compuchem:/home//homerw,defaults00nfscompuchem:/optloptrw,defaults第12页
第二章 集群的系统配置 第 12 页 NFS(Network File System)即网络文件系统,是一种在网络上的机器间共 享文件的方法,文件就如同位于客户的本地硬盘驱动器上一样。NFS 服务器可以 把文件系统导入给其它系统,NFS 客户端可以挂载从其它机器上导出的文件系 统。如果上面的描述看不懂,没关系,我们先把它安装上,然后详细解释。 在控制节点上安装 NFS 服务器: # aptitude install nfs-kernel-server 现在,打开/etc/exportfs 文件,这个文件专门用来配置要共享的文件系统。 现在在此文件里添加如下内容: /home 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check) /opt 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check) /usr/local 192.168.1.0/255.255.255.0(rw,sync,no_root_squash,subtree_check) 这个 exportfs 文件,就是我们要共享文件的配置文件,控制节点 compuchem 会按照这个文件里面的内容,给计算节点共享文件。以第一行为例,解释其中的 含义: /home:要导出的目录。/home 是用户的家目录,必须要共享计算节点,这 样我们的文件才能被计算节点获取。我们还共享了另外两个目录:/opt 和 /usr/local。前者是为了共享后面将要安装的 intel 编译器;后者,习惯上,Linux 下的应用软件都安装到这一目录(相当于 Windows 下的 C:\Program Files),整 个集群的计算化学软件如 Gaussian 等都会装到这个目录下,因此也要共享出去。 192.168.1.0/255.255.255.0:可以挂载的 IP 范围,这个设置用了一个掩码, 表示共享给所有 192.168.1.X 的 IP,我们的计算节点的 IP 是 192.168.0.021 ~ 030, 所以计算节点可以共享到。 (rw,sync,no_root_squash,subtree_check):挂载的配置。这里表示可读可 写,同步执行,若 NFS 主机使用分享目录的使用者,如果是 root 的话,那么对 于这个分享的目录来说,他就具有 root 的权限,强制 NFS 检查父目录的权限。 重启 NFS 服务: # /etc/init.d/nfs-kernel-server restart 现在,这些目录就被挂载出去。但是,计算节点还没有“接手”这些目录, 现在,让计算节点将这些目录挂载。打开所有计算节点的/etc/fstab 文件,在文 件下面添加: compuchem:/home /home nfs rw,defaults 0 0 compuchem:/opt /opt nfs rw,defaults 0 0