目录
OpenFOAM在Centos7系统集群上OpenMPI并行的配置
1)环境说明
2)建立节点间SSH无密码连接
3)NFS的配置(已安装NFS)
(1)管理节点配置
(2)计算节点配置
4)环境的配置与注意事项
OpenFOAM使用小Tips
foamNewApp
基于.msh格式的OpenFOAM轴对称网格生成
OpenFOAM在Centos7系统集群上OpenMPI并行的配置
主要参考:
http://www.4k8k.xyz/article/PitBXu/109643758
https://qizhanming.com/blog/2018/08/08/how-to-install-nfs-on-centos-7
https://deepzz.com/post/how-to-setup-ssh-config.html
https://cfd-china.com/topic/5502/cfd%E6%80%A7%E8%83%BD%E6%80%AA%E5%85%BD%E4%B9%8B%E5%8F%8C%E6%9C%BA%E5%B9%B6%E8%81%94?lang=zh-CN
https://blog.csdn.net/shenyuye/article/details/107696635
问题集锦:
https://www.open-mpi.org/faq/?category=running
https://www.cfd-online.com/Forums/openfoam-solving/219020-openfoam-v1812-over-infiniband.html
https://serverfault.com/questions/240897/how-to-properly-set-permissions-for-nfs-folder-permission-denied-on-mounting-en
https://blog.csdn.net/wenfeifang/article/details/83029067
https://blog.csdn.net/xiyangyang8/article/details/49725039
https://github.com/open-mpi/ompi/issues/6377
1)环境说明
已有设备(CentOS Linux 7.6.1810 Kernel:Linux 3.10.0-95)
管理节点:manager 计算节点:node1~6 (上述节点名称与ip address对应,通过/etc/hosts可设置)
[root@manager etc]# cat hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 10.0.0.10 manager 10.0.0.11 node01 10.0.0.12 node02 10.0.0.13 node03 10.0.0.14 node04 10.0.0.15 node05 10.0.0.16 node06 10.0.0.17 node07
可先测试各节点间是否可以ping通 (ping node01)
预先需要在各节点安装ssh 和 NFS
sudo yum install ssh sudo yum install nfs-utils
2)建立节点间SSH无密码连接
- 在服务器节点上生成一对SSH 私钥和公钥
- 将公钥上传到集群计算节点
管理节点上生成SSH私钥和公钥
ssh-keygen -t rsa #连续回车
在管理节点的~/.ssh/目录下执行上述命令,生成名为id_rsa的私钥文件和名为id_rsa.pub的公钥文件,-t 表示密钥类型是rsa。
计算节点配置
1)将本地的公钥文件上传
scp -p ~/.ssh/id_rsa.pub root@node01:/root/.ssh/ #将公钥上传到相应(node01)节点的指定免密登录用户(root)的.ssh目录下
2)在相应的节点中需免密登录的用户家目录下查看是否有 ~/.ssh/authorized_keys 这个文件,
如果没有手动创建一个:
touch ~/.ssh/authorized_keys
3)将公钥内容写入到authorized_keys文件中
cat -n ~/.ssh/rsa.pub ~/.ssh/authorized_keys
配置权限
- 将用户的home目录权限设为700
- 将.ssh目录的权限为700
- 将authorized_keys目录的权限为600
注:计算节点配置公钥的方式还可使用 ssh-copy-id 复制公钥
ssh-copy-id username@host #它会将本地的所有公钥都传到对应的节点
或者手动复制服务器节点中id_rsa.pub文件的内容到计算节点的authorized_keys文件中。
为了实现相互免密访问,需要在服务器节点上也储存计算节点的公钥。为了方便起见,可以将服务器节点的公钥和私钥以及authorized_keys(也即.ssh目录)复制到所有计算机节点相应免密用户的.ssh目录,并配置权限,从而不必在每个计算节点上单独生成key和复制key到其他节点。
测试是否已经实现免密登录
ssh user@host
有时为了方便可以在.ssh目录中添加config文件,并配置相应的信息,从而实现默认用户连接方式,更详细的内容可参见:https://deepzz.com/post/how-to-setup-ssh-config.html
$ vim ~/.ssh/config
Host sshtest
HostName ssh.test.com
User user
Port 2200
IdentityFile ~/.ssh/id_rsa_test
Host *
User amber
3)NFS的配置(已安装NFS)
(1)管理节点配置
设置 NFS 服务开机启动
$ sudo systemctl enable rpcbind $ sudo systemctl enable nfs
启动 NFS 服务
$ sudo systemctl start rpcbind $ sudo systemctl start nfs
防火墙需要打开 rpc-bind 和 nfs 的服务(如未设置防火墙则不需要打开)
$ sudo firewall-cmd --zone=public --permanent --add-service={rpc-bind,mountd,nfs}
success
$ sudo firewall-cmd --reload
success
配置共享目录(已安装OpenFOAM)
服务启动之后,在管理节点配置一个共享目录。选择OpenFOAM的安装目录(~/OpenFOAM)作为共享目录。根据这一目录,配置相应的导出目录
[zhangzheng@manager OpenFOAM]$ cat /etc/exports /home/amber/OpenFOAM *(rw,sync,no_root_squash,no_subtree_check) <保存设置之后,重启 NFS 服务。
$ sudo systemctl restart nfs可以检查一下本地的共享目录
$ showmount -e localhost Export list for localhost: /home/zhangzheng/OpenFOAM *(2)计算节点配置
在对计算节点进行NFS配置前需要建立与管理节点相对应的用户和组以及共享目录
①建立相应的用户和组
在此采用一个shell脚本(adduser.sh)实现批量建立User和Group:
#! /bin/bash G=$2 U=$3 P=$4 if [[ $1 = "create" ]] && [[ $# -eq 4 ]] then # Linux 用户存在则退出 A=`grep -w $U /etc/passwd | wc -l` if [[ $A -ne 0 ]] then echo "USER ALREADY EXIST" exit 1 fi # create linux gproup/user/passwd for i in node01 do ssh $i "useradd -d /home/$U -g $G $U;echo "$P" | passwd --stdin $U" #通过echo, 标准输入密码,在sudo命令中也可如此应用 sudo --stdin done elif [[ $1 = "delete" ]] && [[ $# -eq 3 ]] then # delete linux user,参数依次为 组名、用户名 for i in node01 do ssh $i "userdel -r $U" done else echo 400 fi使用一下命令执行adduser.sh( chmod 700) 脚本:
./adduser.sh create GID UID Passwd #输入脚本中创建用户和密码所需的参数注意在执行此脚本时,应该通过ssh免密登录至对应节点的root用户,可在.ssh的config文件中设置.
②建立共享文件夹
在各计算节点的amber用户下建立相应的文件/home/amber/OpenFOAM,相似的也可采用shell脚本实现,同时需要将免密登录的用户更改为amber。
③挂载共享目录到计算节点
$ sudo mount -t nfs manager:/home/amberMpi/OpenFOAM /home/amberMpi/OpenFOAM挂载成功后可用df -h命令查看当前节点是否挂载管理节点共享文件
4)环境的配置与注意事项
SSH免密登录和NSF共享目录配置好后,需要将管理节点和登录节点/home目录中,OpenFOAM的环境变量配置到~/.bashrc 中
source ~/OpenFOAM/OpenFOAM-v2112/etc/bashrc alias of2112=“source ~/OpenFOAM/OpenFOAM-v2112/etc/bashrc”
- 注意事项:
- 1)需要注意SSH免密登录中相关文件和文件夹的权限设置;注意登录的用户的设置,最好在管理节点和计算节点建立相同的用户;
- 2)NSF共享文件的配置需要建立在相同的用户和用户组间,且其UID和GROUPID均需要相同,通过/etc/passwd可以查看用户的所有信息;如过未满足上述要求则可能出现计算节点写入共享文件夹受限,这点也可通过修改/etc/exports文件中的权限参数进行修改。可参考:https://blog.csdn.net/wenfeifang/article/details/83029067
cat /etc/passwd amber:x:1001:1001::/home/amberMpi:/bin/bash # 第一个1001对应UID 后一个为GID
- 3)使用mpirun命令执行相应的OpenFOAM程序时,需要注意mpirun的参数设置问题。否则可能出现无法连接相应计算节点的错误,这种错误与节点间的网络连接方式有关
mpirun –mca btl self,sm,openib //用于 Inifiniband mpirun –mca mtl psm2 //用于 Omni-Path(OPA)以下为本集群所使用的mpirun命令脚本:
#!/bin/bash np=`cat system/decomposeParDict |grep "numberOfSubdomains"| tr -cd "[0-9]"` echo "" echo "program will run on $np processors!" echo "" mpirun -mca btl_openib_allow_ib 1 --hostfile hosts --np $np simpleFoam -parallel &> log.test & # -mca btl_openib_allow_ib 1 是比较重要的参数
上述hosts文件为每个节点上进程的分配,其中np=192,每个节点分配32个进程:
node01 slots=32 node02 slots=32 node03 slots=32 node04 slots=32 node05 slots=32 node06 slots=32查看计算节点的CPU信息(参考: https://blog.csdn.net/w8y56f/article/details/89816283),可登录节点后运行:
#列出物理CPU及各自的物理核数 cat /proc/cpuinfo | grep -E "physical id|cpu cores" | sed 'N;s/n/ /' | sort | uniq #输出如下 physical id : 0 cpu cores : 16 physical id : 1 cpu cores : 16 #列出物理CPU及各自的逻辑核数 cat /proc/cpuinfo | grep "physical id" | sort | uniq -c #输出如下: 32 physical id : 0 32 physical id : 1OpenFOAM使用小Tips
foamNewApp
基于.msh格式的OpenFOAM轴对称网格生成
1)使用ICEM划分平面网格后拉伸extrude一层网格后导出为3D网格,生成的网格导出为ansys fluent 3D *.msh格式。
2)将*.msh格式的网格转化为wedge型网格(wedgePlease工具),具体过程可参考如下所示:
#!/bin/sh cd ${0%/*} || exit 1 # run from this directory # Source tutorial clean functions . $WM_PROJECT_DIR/bin/tools/CleanFunctions fluentMeshToFoam -scale 1e-3 fim_01_00_msh_C_01_01.fluentMesh > log.fluentMeshToFoam wedgePlease -angle 5 # checkMesh > log.checkMesh_bad collapseEdges -overwrite # remove the 0 length edges on the axis patch # checkMesh > log.checkMesh_good # type wedge boundary condition foamDictionary constant/polyMesh/boundary -entry entry0.FRONT.type -set wedge foamDictionary constant/polyMesh/boundary -entry entry0.BACK.type -set wedge createPatch -overwrite #removing patch axis which contains no faceswedgePleasehttps://github.com/krebeljk/wedgePlease
3)wedgePlease的原始代码中mesh网格以y轴为旋转轴,因此在icem构建模型和网格时需要注意轴线坐标选取。



