资讯详情

资讯详情

Materials Studio 8.0 Linux服务器安装全指南:License配置与并行计算

服务器装 GROMACS、CP2K 装习惯的人第一次部署 Materials Studio 8.0 多半会愣一下——这软件和常见开源分子模拟工具的安装逻辑不太一样它有图形化安装器、独立的 License 服务、Gateway 调度层还要照顾一堆 32 位兼容库。我在某课题组先后部署过两次 MS 8.0第一次从早上装到天黑第二次只花了两小时。差别在于第一次直接挂载镜像点下一步完全没做前置检查第二次把系统版本、授权文件、远程图形环境这三件事先捋清楚再动手。这篇教程就按照后者的顺序来写重点覆盖 CentOS 6/7 下 MS 8.0 服务端的完整安装过程、License 授权配置、环境变量和并行计算设置以及装完以后最常踩的几个坑。适合需要在 Linux 计算节点上部署 MS 8.0 服务端、给 Windows/Mac 客户端提供 Gateway 连接入口的课题组管理员参考。1. 安装前的三件事系统版本、授权文件和远程图形环境的确认1.1 先确认 CentOS 版本和内核架构而不是直接开装MS 8.0 这个年代的服务端对操作系统版本有明确边界官方支持范围主要在 Red Hat Enterprise Linux 5/6/7 这一条线上对应到 CentOS 就是 CentOS 6 和 CentOS 7 最稳CentOS 8 我没试过不推荐在项目里拿它硬扛。拿到机器以后第一件事不是找安装包而是先看清楚三样东西cat /etc/redhat-release uname -m df -h /optx86_64 架构是基本要求虽然 MS 8.0 里还有不少 32 位组件但那是在 64 位内核下用兼容库跑不是让你真的找一台 i686 机器。磁盘方面完整安装 MS 8.0 所有模块需要 40GB 左右如果你的 /opt 是系统盘最好提前规划单独挂载一块数据盘避免装到一半提示磁盘空间不足。内存看节点用途单机做测试 8GB 起步如果打算跑并行计算子程序我建议按每个物理核心 2GB 以上预留后面并行章节会细说。这里特别提醒一点MS 8.0 是上世纪风格的老软件安装目录里会塞大量的链接库、模块文件、帮助文档如果放在 NFS 网络存储上安装过程会非常慢而且个别模块加载容易出怪问题。有条件就把安装根目录放在服务器本地盘后面没那么多糟心事。1.2 授权文件决定部署形态浮动授权还是节点锁定MS 8.0 用的是 FlexNet 授权机制拿到手的授权文件通常是一个以 .lic 结尾的文本里面写着授权类型、允许的 Feature 模块清单、绑定的主机名或 MAC 地址。安装前先搞清楚你拿到的是哪种授权这直接决定了 License 服务部署在哪台机器上。如果是节点锁定授权那授权文件绑定了某一台服务器的 MAC 和 hostname你就只能在那一台机器上运行 lmgrd别想着换台机器跑。如果是浮动授权通常还附带一个独立 License 服务器地址和端口计算节点只需要在环境变量里写MS_LICENSE_SERVERporthostname指向那台授权服务器即可。在开始安装之前有一件特别容易被忽略的事hostname 的规范化。很多 CentOS 机器装好以后默认叫localhost.localdomain这种主机名在 FlexNet 授权匹配时非常容易出问题。建议安装前先定一个好记、规范的主机名比如计算节点叫cnode01hostnamectl set-hostname cnode01 echo 192.168.1.10 cnode01 /etc/hosts改完以后要么重启要么重新登录一次让 hostname 全局生效。等授权文件到手以后再对照里面的 HOSTNAME 字段确认大小写完全一致。1.3 没有显示器怎么装X11转发与VNC的取舍MS 8.0 的服务端安装器是 Java 图形界面在服务器上装就面临一个现实问题服务器没有显示器。两条路一是用 SSH X11 转发二是用 VNC 起远程桌面。SSH X11 转发听起来简单ssh -X登录然后跑安装器就行但实际上跨网络转发 Java Swing 界面非常卡而且经常出现窗口画不出来、部分按钮点了没反应的情况。我第一次安装就是在这上面耗了不少时间。后来学乖了直接在服务器上装 tigervncyum install -y tigervnc-server vncserver :1 -geometry 1280x1024 export DISPLAY:1VNC 的桌面里开终端再跑安装器稳稳当当。如果你对文本操作有经验还可以用安装器的 console 模式我自己后面几次就直接./Install -console文本交互既快又不会因为图形库缺失导致安装器起不来可以少装一堆图形相关的依赖包。2. 前置依赖安装32位兼容库、Java运行时与内核参数调整2.1 32位兼容库老版本软件的硬性要求MS 8.0 服务端的相当一部分核心子程序和授权工具还是 32 位二进制CentOS 7 默认只有 64 位环境缺了 i686 兼容库装到一半或者启动子程序的时候就会报类似error while loading shared libraries: libXp.so.6: cannot open shared object file的错误。装依赖这一步别省一次性把常用库装齐避免装一个缺一个、缺一个装一个的循环yum install -y glibc.i686 libXp.i686 libXt.i686 libXtst.i686 \ libXext.i686 libX11.i686 libXau.i686 libXrender.i686 \ libstdc.i686 compat-libstdc-33.i686 \ mesa-libGL.i686 zlib.i686 fontconfig.i686这里面的compat-libstdc-33.i686是老版本 MS 子程序的常客它提供的是旧版 C 运行时有的环境不装也能过但装上以后能避免后面遇到libstdc.so.5找不到。如果你用的是 CentOS 7libXp.i686在默认仓库里就能找到如果 yum 提示找不到可以用yum provides */libXp.so.6查一下包里位置再手动装 rpm。2.2 Java运行时和字体相关包的检查MS 8.0 安装器自己带了一份 JRE所以理论上不强制要求你预装 Java。但在实际部署里部分辅助工具和 Gateway 组件会调用系统 Java环境里完全没有 Java 还是可能出问题。我的做法是统一装一个 OpenJDK 8yum install -y java-1.8.0-openjdk装完以后可以确认一下java -version正常。要注意不要在服务器上装一大堆乱七八糟的 JDK 版本然后乱改JAVA_HOMEMS 安装器对 Java 版本不敏感但对路径里的空格、特殊字符很敏感。以前见过把 Java 解压到带中文的目录里导致安装器直接白屏这种环境问题最不值得排查。另外字体问题也经常被忽略。图形界面花屏、中文变成方块、Gateway 的网页控制台字体异常很多都和缺少 X11 字体包有关yum install -y xorg-x11-fonts-ISO8859-1-75dpi \ xorg-x11-fonts-ISO8859-1-100dpi \ xorg-x11-fonts-type12.3 /etc/hosts、防火墙与SELinux的调整CentOS 7 上默认 firewalld 是开启的SELinux 也是 enforcing。MS 8.0 的 License 服务和 Gateway 需要监听端口如果防火墙挡着客户端就会连接不上而且这种问题的报错很误导——它可能不是报连接失败而是在客户端界面里一直转圈。一般 CPU 计算节点都放内网我对防火墙的处理很简单放行 MS 需要的几个端口然后保持防火墙开启状态不给课题组留下更大的安全缺口。MS 8.0 通常用到的端口是 License 的27080和 Gateway 的18888firewall-cmd --permanent --add-port27080/tcp firewall-cmd --permanent --add-port18888/tcp firewall-cmd --reloadSELinux 这块说实话很多老软件的安装脚本根本没适配 SELinux与其查各种布尔值不如对这台计算节点把它设为 permissive。生产环境管理员可能要权衡一下但对于课题组内部的计算节点来说这样能省掉大量莫名奇妙的权限阻断问题setenforce 0 sed -i s/^SELINUXenforcing/SELINUXpermissive/ /etc/selinux/config2.4 离线环境怎么准备依赖包很多计算节点在内网没有外网 yum 源这就非常考验安装前的准备。如果你没有提前把依赖包准备好到了现场才发现yum install全都失败那才是真正的地狱开局。离线环境有两种做法。一种是在有外网的机器上先把需要安装的包连同依赖一起下载下来yumdownloader --resolve --destdir/tmp/ms8_pkgs glibc.i686 libXp.i686 ...然后把整个目录拷贝到服务器上用yum localinstall *.rpm装。另一种是直接挂 CentOS 系统安装光盘做本地源mount /dev/cdrom /mnt写一个本地仓库配置文件指向 /mnt把 gpgcheck 关掉yum install就能直接从光盘里取包。这个方法对 CentOS 6/7 都有效缺点是系统光盘仓库里不一定包含所有需要的包但至少基础兼容库是没问题的。3. 主安装流程挂载介质、运行安装器与模块勾选3.1 挂载ISO镜像与安装目录规划拿到安装介质以后上传到服务器某个临时目录。如果是 ISO 文件就挂载mkdir -p /mnt/ms80 mount -o loop MaterialsStudio_8.0.iso /mnt/ms80 ls /mnt/ms80挂载以后看一眼目录结构找到Install脚本。现在很多 Linux 软件镜像都喜欢用标准的install.sh但 MS 8.0 这个年代的安装脚本一般就叫Install后面带上个版本号或者不带。如果执行时提示Permission denied记得加执行权限chmod x /mnt/ms80/Install安装目录我建议规划为/opt/msiMS 安装时会在这个根目录下面按自己的一套逻辑再拆分出多个部分。别自作主张把目录名改成MS80之类的保持默认风格后续跟官方文档对照、找文件位置都省事。安装用户也别用 root 直接跑到最后后面我会说改目录属主的问题。3.2 安装器交互选项解读启动安装器有两种方式图形界面就./Install文本模式就./Install -console。如果你前面没有开 VNC我强烈建议直接 console 模式交互过程不繁琐逐项输序号、输路径就行反而比图形界面更不容易卡住。安装过程中会询问几组关键信息安装类型一般选完整安装或者自定义安装。如果介质里包含多个平台组件注意确认当前选择的是 Linux 版本而不是 Windows 版本。安装根目录默认通常是/opt/msi保持默认或改成你规划好的路径。组件列表这一页会列出所有模块组件Gateway 是必选的其他材料计算模块按需勾选。这里我要强调一个很多人踩过的坑安装过程中会让你填 License 服务器信息这个阶段可以先跳过或者随便填一个占位等主程序装完以后单独再配授权。因为 License 服务的调试经常要反复重启、改 hostname、看日志如果把它绑在安装流程里一次搞定出错以后排查链路会很乱。先让主程序落地再回头收拾授权。3.3 模块选择策略别只想省那点空间模块勾选这里我的建议是除非磁盘空间实在紧张否则全部选上。原因有三个第一MS 模块之间不是完全独立的很多模块要调用公共数据文件、力场参数库和辅助工具你少装一个某个模块可能在运行到一半时才报缺文件。第二License 是按授权文件里的 Feature 控制每个模块能不能用的你装全模块不会多消耗授权数只是占磁盘而已。第三后续补装模块需要重新跑安装器而且如果安装器版本或者介质已经被清理补装成本比现在一次性选上高得多。如果你确实空间不够最核心的组件请至少包含MaterialsVisualizer、Forcite、CASTEP、DMol3、MS Gateway。这几个覆盖了材料计算最常见的结构搭建、分子动力学和第一性原理计算需求。3.4 安装后的目录结构核对与权限修正安装过程会持续一段时间取决于服务器的 CPU 和磁盘速度。装完以后别看安装器提示“Success”就关终端先把根目录结构过一遍ls /opt/msi正常情况下你应该能看到类似MaterialsStudio8.0、LicensePack、Gateway这样的子目录。如果某个目录缺失说明对应组件没装上赶紧回看安装日志找出是哪个步骤失败。安装日志一般在/tmp下或者安装根目录下的InstallLogs目录里报错行会写清楚是在复制哪个文件时失败。然后做一件很重要的事把整个安装目录的属主改成非 root 用户。MS 子程序在运行时可能会往安装目录写临时文件、日志如果用 root 全权持有客户端任务以普通用户身份执行时反而会遇到权限问题。建议先建一个专门用于运行 MS 的用户useradd -m msi chown -R msi:msi /opt/msi不要小看这一步后面子程序莫名崩溃查到最后发现是作业目录无写权限的案例不在少数。4. License配置启动License服务与模块授权验证4.1 License文件放置与方式选择MS 8.0 的授权服务本质上就是 FlexNet 的lmgrd授权文件是你从管理员那里拿到的.lic文件。部署方式分两种如果课题组有独立的授权服务器那计算节点根本不用跑 lmgrd只需要在环境变量里指向它比如MS_LICENSE_SERVER27080license-server。这种方式最省心License 服务只需要在一台机器上维护所有计算节点共享。如果这里是唯一授权节点或者你想先在一台机器上把服务跑通就要把.lic放到 LicensePack 的对应目录下。常见的位置是/opt/msi/LicensePack/share/licenses/具体目录名以你介质里的 LicensePack 结构为准可以用find /opt/msi -name *.lic或者find /opt/msi -type d -iname *licens*先探路。存放之前用文本编辑器打开.lic文件检查里面的 HOSTID 和主机名跟你服务器的实际情况是否一致不一致的话后面 lmgrd 就算启动成功客户端也会报 invalid host。4.2 启动lmgrd并设置开机自启假定授权服务就在本机用下面的方式手动启动 lmgrd 做验证License_ROOT/opt/msi/LicensePack/linux_x86_64 $License_ROOT/bin/lmgrd \ -c /opt/msi/LicensePack/share/licenses/MS80.lic \ -l /var/log/lmgrd.log启动以后第一件事不是急着连客户端而是看日志。日志里如果出现类似License server started或者FlexNet Licensing version ...字样就说明基本成功了。然后确认端口监听netstat -tunlp | grep 27080我这里用 27080 举例具体端口要以授权文件里写的信息为准。为了让重启机器后授权服务自动起来我习惯写一个简单的 systemd 服务。CentOS 7 下在/etc/systemd/system/lmgrd.service里写[Unit] DescriptionFlexNet License Server Afternetwork.target [Service] Typeforking ExecStart/opt/msi/LicensePack/linux_x86_64/bin/lmgrd -c /opt/msi/LicensePack/share/licenses/MS80.lic -l /var/log/lmgrd.log ExecStop/opt/msi/LicensePack/linux_x86_64/bin/lmutil lmdown Restarton-failure [Install] WantedBymulti-user.target然后执行systemctl daemon-reload systemctl enable --now lmgrd。这里注意一个细节如果你的lmgrd实际是 32 位程序而系统里没装 32 位库启动时可能直接报No such file or directory这不是文件不存在是加载器找不到对应的 32 位 ld-linux回到第二章把兼容库补上就好。4.3 用客户端任务验证授权是否覆盖到模块License 启动成功不代表所有模块都能用。每个模块对应一个 Feature 名称比如 CASTEP 对应一个特征码DMol3 对应另一个。验证授权范围最直接的办法是拿客户端实际提交一个小任务。在客户端机器上输入服务端 IP 和登录账号新建一个简单结构比如一个小晶胞的几何优化计算引擎选 CASTEP 或者 DMol3提交任务。如果授权正常任务会在服务端排队、运行、最后正常返回结果。如果任务一提交就报错去 Gateway 日志或者任务日志里找 License 相关的关键词比如Cannot find license for ...说明授权文件里没有这个模块的 Feature或者该 Feature 的并发数已经被占满。License server system down说明 lmgrd 根本没在跑或者客户端连不上授权端口。Invalid host说明授权文件绑定的主机名跟实际不一致。验证完一个模块后最好把几个常用模块都各提交一遍小任务一次性确认所有模块可用别到课题组日常计算时才发现某个模块没授权。5. 环境变量与并行计算让子程序跑在真正的多核上5.1 环境变量配置给所有用户生效MS 8.0 运行需要的核心环境变量主要是三个export MS_INSTALL_ROOT/opt/msi/MaterialsStudio8.0 export MS_LICENSE_SERVER27080cnode01 export PATH$MS_INSTALL_ROOT/bin:$PATHMS_INSTALL_ROOT指向 MS 程序主目录。MS_LICENSE_SERVER的格式是端口主机名主机名要跟 License 服务器的实际 hostname 一致如果你写 IP 也可以但有些模块对 IP 解析方式敏感尽量写 hostname。PATH里加入 bin 目录后命令行工具和辅助程序才能被直接调用。为了让所有登录用户都自动生效我习惯写到/etc/profile.d/ms8.sh里然后source /etc/profile或重新登录。这里有个值得提醒的细节安装目录下的 bin 路径可能不是标准的一层bin有的模块会把可执行文件放到各自模块目录下的深层路径里如果你加了 bin 后敲命令还是提示 not found用ls $MS_INSTALL_ROOT看一下实际结构把真实的 binaries 路径加到 PATH。5.2 MPI运行时选择MS自带的优先MS 8.0 服务端跑并行计算时Gateway 会把任务提交给 MPI 运行时执行。有些新装的服务器管理员图省事系统里装一个openmpi结果 MS 子程序一跑就崩或者提交任务后根本起不来并行进程。原因很简单MS 8.0 适配的是它自带的那套 MPI 运行时和配套的进程管理方式系统里的 OpenMPI 版本和它不一致时两边衔不上。我的做法是在 PATH 里让 MS 自带的 MPI 目录排在系统 MPI 前面优先调用 MS 自己的运行时。如果你不确定自带的 MPI 放在哪找一下安装目录里带mpirun或者mpiexec的路径比如常见的是$MS_INSTALL_ROOT/../Mpi/mpich/bin用find /opt/msi -name mpirun搜一下。找到后把对应 bin 目录加到环境变量的最前面。在 Gateway 的任务调度配置里进程管理器这一项也要选择本机直接执行方式而不是默认的远程 shell 方式。如果配置成需要 SSH 免密登录每次任务启动都要多一步 SSH 握手还容易因为免密没配好导致任务在启动阶段就卡死。5.3 并行实测4核、8核、16核的加速比与判断环境配好了但怎么确认并行真的生效我用过一个非常土的办法跑一个相同的小体系单点能任务分别设置 1、4、8、16 核记录每一轮的耗时。实测下来的数据大致长这样核数耗时(秒)相对单核加速比1520141603.38955.516707.4从这组数据能看出两件事一是有加速说明并行确实在起作用二是从 8 核到 16 核加速比提升很小说明这个体系太小已经出现并行通信开销大于计算收益的情况。如果你提交 8 核任务但耗时和单核一模一样那就要怀疑并行没生效。用top看一下运行时进程数量如果只有一个主进程在跑说明 MPI 配置有问题回到 5.2 检查运行时的选择。体系规模决定核数这是个特别重要的经验原子数不到一百的体系4 核基本就到头了几百个原子的体系8 核比较划算上千个原子的体系才值得上 16 核或更多。无脑加核只会让任务排队排得更久算得反而更慢。5.4 磁盘与内存规划静默失败的常见原因并行计算对内存和磁盘的要求比想象的更高。MS 子程序在计算过程中会在临时目录产生大量中间文件/tmp如果空间太小任务会在没有任何明确报错的情况下消失只在日志尾部留一行不明不白的错误。这一步我吃过亏当时一个 32 核任务跑了一个小时后突然退出查了半天最后发现/tmp只剩几百兆。解决办法是把临时目录指到大分区。在 MS 环境里设置export TMPDIR/scratch/ms8_tmp mkdir -p /scratch/ms8_tmp chown msi:msi /scratch/ms8_tmp如果/scratch是本地盘还能顺便减少 NFS 网络文件系统带来的 IO 瓶颈。并行任务如果工作目录挂在 NFS 上多个进程同时读写同一个网络目录非常容易出现锁冲突和文件同步问题。有条件的话把任务的本地工作目录放到计算节点的本地盘跑完再同步回共享存储这是老 HPC 管理员的基本素养。6. 高频问题排查从错误日志到解决方案的完整链路6.1 缺动态库用ldd定位而不是瞎猜启动 MS 子程序时最常听到的一句话是“报错说找不到一个 .so 文件”。报错信息五花八门有缺libXp.so.6的有缺libstdc.so.5的有缺libGL.so.1的。面对这类问题我的排查方式是先找到具体是哪个可执行文件起不来然后用ldd看它到底缺什么ldd /opt/msi/MaterialsStudio8.0/modules/CASTEP/bin/castepexe | grep not found绝大多数情况缺什么就用包管理器去找它属于哪个包而不是一次性装一堆包碰运气yum provides */libXp.so.6找到包名后yum install对应包的 i686 版本。这一套下来通常三五分钟就能解决。不要图省事直接把所有 32 位库装一遍万一装错版本或者引入了库冲突后面的排查才是真正的无底洞。6.2 图形界面显示异常字体与X环境的处理MS 安装器或者客户端连接后界面出现黑块、窗体空白、字体全是小方块这一般不是程序坏了而是图形环境和字体的问题。安装器黑屏时先确认DISPLAY有没有指向正确的 VNC 桌面再确认字体包是否齐全xset -q如果 VNC 分辨率太低Java 渲染也会出问题把 VNC 的分辨率调到1280x1024或更高。实在不行就退回文本模式安装./Install -console不需要 X 也能把主程序完整装上。装主程序和配 License 都不依赖图形界面图形界面只是给安装过程提供便利别被它卡住整个项目进度。6.3 Gateway无法启动端口与残留进程Gateway 是客户端连服务器的入口它的默认端口是 18888。如果你改了 Gateway 配置或者服务器重启后没正常关闭 Gateway再启动时会提示端口被占用最常见的场景是安装过程中没有把吉隆的旧进程清干净。排查链路很直接ps -ef | grep -i gateway ss -tlnp | grep 18888看到 18888 端口被某个 Java 进程占着要么把它停掉要么找到 Gateway 自带的启停脚本用正常方式重启。MS 8.0 网关目录下一般有gwstop、gwstart之类的脚本先执行 gwstop确认进程退出以后再 gwstart。启动后等几秒再检查一次端口监听是否正常。如果客户端连接时经常自动断开还要检查客户端到服务器的 18888 端口是否被防火墙拦了。6.4 License报错从日志往上游看License 相关的报错是安装后期的大头。常见的表象有任务一提交就提示 license 错误、客户端显示无法获得授权、Gateway 日志里写着 license server down。这些表面问题背后可能是完全不同的原因我的排查套路是从日志出发一层层往上游看先看 lmgrd 的日志tail -50 /var/log/lmgrd.log如果日志显示License server started说明服务正常问题可能出在客户端环境变量写的端口或主机名不对。如果日志根本没有启动记录那 lmgrd 进程可能没起来检查进程和端口。如果日志里有Invalid host字样那问题在授权文件绑定信息上去跟授权文件里的 HOSTNAME 逐一比对。如果日志里有EXPIRED字样查系统当前时间和日期FlexNet 对时钟漂移非常敏感节点时间被自动校时拨乱的时候授权服务会间歇性地报告过期。还有一个很容易忽略的坑修改了/etc/hosts的 hostname 映射后没有重启 lmgrd。lmgrd 在启动时会把主机名缓存下来你改了 hosts 但不重启它它用的还是老名字自然对不上授权。6.5 子程序中途消失内存、磁盘和权限的账任务提交后进程起来但跑着跑着就没了连个报错窗口都不弹这是最让人头疼的情况。这类问题的排查必须看系统层证据而不是反复重新提交任务。先看作业目录下的日志和输出文件尾部有没有异常。接着看系统日志里有没有内核杀进程的记录dmesg -T | tail -50如果看到Out of memory: Kill process那就是典型的内存不足子程序申请的内存超过了节点可用内存被内核 OOM 杀掉。解决办法是减少并行核数、换大内存节点或者优化计算的基组复杂度。如果内存没问题再检查磁盘df -h /tmp df -h /opt临时目录或安装目录满了程序写中间文件失败也会静默退出。磁盘没问题的话接下来检查权限。MS 子程序能不能在工作目录和临时目录写入取决于 MS 运行用户对这两个目录的权限。用ls -ld看目录属主用运行 MS 的用户实际去新建一个测试文件试试就知道。这套排查走完90% 的静默消失都能定位到原因。说实话MS 8.0 装好一次以后非常稳定我见过服务器上跑了好几年都不需要再动的。真正麻烦的从来不是安装本身而是安装前那些看着不起眼、关键时刻掉链子的前置检查。希望这篇记录能帮你少走几个我走过的弯路。
觉得有用,分享给同行:

为您的企业打造数字门面

稳重轻奢商务风格,端正雅致视觉,长效耐看不易过时。

立即咨询 →