前言
在上一篇中,我们了解了 IBM Spectrum LSF Suite 的架构全景。然而,架构落地的第一步是安装,而仅仅使用”默认配置”往往无法满足生产环境对高可用(HA)和复杂网络的需求。
本篇将深入实战,基于官方最佳实践,带您规避安装过程中的常见”坑”,确保您的集群地基稳固。
一、数据库高可用 (HA):从单点到 MariaDB Galera 集群
默认情况下,LSF Suite 会自动安装一个单节点的 MariaDB 实例。但这对于生产环境通常不够,为了避免单点故障,我们需要配置使用 Galera 的 MariaDB 高可用集群。
1. 准备工作与避坑
在开始之前,必须准备三台机器作为数据库节点,并确保网络互通。
避坑指南
| 问题 | 解决方案 |
|---|---|
| 旧数据库残留 | 不仅要卸载 RPM 包,还要手动删除 /var/lib/mysql 目录 |
| UID/GID 不一致 | 确保三台机器上 mysql 用户的 UID 和 GID 完全一致 |
1
2
3
4
5
6
# 彻底清除旧安装
yum remove -y MariaDB-server MariaDB-client
rm -rf /var/lib/mysql
# 检查 mysql 用户 ID
grep mysql /etc/passwd /etc/group
警告:如果旧安装导致 ID 不一致,必须手动修正
/etc/passwd和/etc/group,否则会导致初始化失败。
2. 配置 MariaDB 与 Galera
安装好 MariaDB-server 和 galera-4 后,核心配置在于 /etc/my.cnf.d/server.cnf 文件。我们需要在 [galera] 部分进行如下关键设置:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[galera]
wsrep_on=ON
wsrep_provider=/usr/lib64/galera-4/libgalera_smm.so
# 填入所有数据库节点的IP
wsrep_cluster_address="gcomm://10.10.10.20,10.10.10.21,10.10.10.22"
binlog_format=row
default_storage_engine=InnoDB
wsrep_cluster_name="galeracluster1"
# 允许监听所有接口
bind-address=0.0.0.0
# 设置当前节点的IP和名称(每台机器不同)
wsrep_node_address="10.10.10.20"
wsrep_node_name="dbhost01"
3. 初始化集群
这是最容易出错的一步。切记以下顺序:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
┌─────────────────────────────────────────────────────────────┐
│ Galera 集群初始化流程 │
├─────────────────────────────────────────────────────────────┤
│ │
│ 步骤 1: 仅在第一台主机上运行 │
│ $ galera_new_cluster │
│ ↓ │
│ 步骤 2: 确认端口 4567 处于监听状态 │
│ $ ss -tlnp | grep 4567 │
│ ↓ │
│ 步骤 3: 在其他主机上使用标准命令启动 │
│ $ systemctl start mariadb │
│ (它们会自动加入集群) │
│ │
└─────────────────────────────────────────────────────────────┘
验证集群状态
1
2
3
4
5
6
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_cluster_size';
+--------------------+-------+
| Variable_name | Value |
+--------------------+-------+
| wsrep_cluster_size | 3 |
+--------------------+-------+
如果返回值为 3,则表示 HA 集群搭建成功!
4. LSF 安装配置
数据库就绪后,在 LSF 的 Ansible 部署配置 lsf-conf.yml 中,需要将 JDBC 连接字符串指向您的数据库节点:
1
JDBC_string: jdbc:mariadb://dbhost01:3306/pac
启用故障转移
重要:部署完成后,还需要手动编辑 GUI 主机上的
/opt/ibm/lsfsuite/ext/perf/conf/datasource.xml文件,将连接字符串修改为故障转移模式:
1
2
3
4
5
<!-- 修改前 -->
<url>jdbc:mariadb://dbhost01:3306/pac</url>
<!-- 修改后:启用 sequential 故障转移 -->
<url>jdbc:mariadb:sequential://dbhost01,dbhost02,dbhost03/pac</url>
二、多网络环境规划:流量不迷路

在典型的 HPC 环境中,通常存在多种网络平面:
| 网络类型 | 用途 | 典型网段 |
|---|---|---|
| 管理网络 (Management) | IPMI 等硬件管理 | 10.0.0.0/24 |
| 低延迟网络 (InfiniBand) | MPI 计算流量 | IPoIB |
| 私有网络 (Private) | 节点间通信,LSF 流量 | 192.168.1.0/24 |
| 公共网络 (Public) | 用户访问入口 | 172.16.0.0/24 |
核心挑战
如何确保 LSF 的内部通信走私有网络,而用户又能通过公网访问 GUI?
解决方案
通过部署节点上的 lsf-inventory 和 lsf-config.yaml 文件来控制。
1. 定义主机名
在 inventory 文件中,不同角色使用不同网络的主机名:
1
2
3
4
5
6
7
8
9
10
11
12
# GUI 主机和 LSF 客户端使用公网主机名
[GUI_Hosts]
master1.public.network.name
[LSF_Clients]
login1.public.network.name
# LSF 服务器(计算节点)使用私有网络主机名
[LSF_Servers]
server1.private.network.name
server2.private.network.name
server3.private.network.name
2. 锁定 IP 范围
在 lsf-config.yaml 中,设置 Private_IPv4_Range 参数:
1
2
# 强制 LSF 在初始化时优先绑定该网段的 IP 地址
Private_IPv4_Range: 192.168.1.0/24
这会防止 LSF 流量溢出到管理网或公网。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
┌──────────────────────────────────────────────────────────────┐
│ 网络流量规划示意图 │
├──────────────────────────────────────────────────────────────┤
│ │
│ 用户 ───────→ 公网 (172.16.x.x) ───→ GUI / Login 节点 │
│ │ │
│ ↓ │
│ GUI ←─────── 私网 (192.168.1.x) ←── LSF Master │
│ ↑ ↓ │
│ └─────── 计算节点 ←────┘ │
│ │
│ 管理网 (10.0.0.x) ─── 仅用于 IPMI/带外管理 │
│ │
└──────────────────────────────────────────────────────────────┘
三、用户权限管理:定制 lsfadmin
LSF Suite 默认创建的 lsfadmin 用户 UID 为 495,GID 为 491。但在已有的企业环境中,这些 ID 可能已被占用。
避坑指南
| 时机 | 建议 |
|---|---|
| 安装前 | ✅ 使用 Ansible 预创建指定 ID 的用户和组 |
| 安装后 | ❌ 极其困难且不推荐修改 UID/GID |
操作步骤
1. 修改 inventory 文件
暂时注释掉 [local] 角色,避免在部署节点上重复创建。
2. 批量创建用户组
1
2
3
# 在所有节点上创建指定 GID 的组
ansible all -i lsf-inventory -m group \
-a "name=lsfadmin local=yes system=yes gid={Your_GID}"
3. 批量创建用户
1
2
3
# 在所有节点上创建指定 UID 的用户
ansible all -i lsf-inventory -m user \
-a "name=lsfadmin create_home=no group={Your_GID} local=yes system=yes uid={Your_UID}"
注意:如果安装后发现 ID 错误,唯一的办法是使用
lsf-uninstall.yml卸载重装。
四、安装调试神器:预部署检查
在正式运行庞大的部署脚本前,强烈建议先运行 lsf-predeploy-test.yml。
检查项目
| 检查项 | 说明 |
|---|---|
| 端口冲突 | 检查 8443、6080 等关键端口 |
| DNS 解析 | 验证主机名能正确解析 |
| 节点连通性 | SSH 和网络连通性测试 |
| 磁盘空间 | 确保有足够的安装空间 |
1
2
# 运行预部署检查
ansible-playbook -i lsf-inventory lsf-predeploy-test.yml
调试技巧
如果检查失败(例如 failed=1),默认的报错信息可能不够详细。此时,加上 -e show_debug=Y 参数再次运行:
1
2
# 启用详细调试输出
ansible-playbook -i lsf-inventory lsf-predeploy-test.yml -e show_debug=Y
这样您将能看到具体是哪个端口被占用,或者是缺少了哪个命令(如 lsof),从而快速定位并解决问题。
总结
本文涵盖了 LSF Suite 安装过程中的四大关键领域:
| 领域 | 关键配置 | 避坑要点 |
|---|---|---|
| 数据库 HA | MariaDB Galera 集群 | 清除旧安装、UID/GID 一致性 |
| 多网络 | Private_IPv4_Range | 按角色分配不同网络主机名 |
| 用户权限 | lsfadmin UID/GID | 必须在安装前预创建 |
| 预检查 | lsf-predeploy-test.yml | 使用 show_debug=Y 获取详情 |
下期预告:
基础设施搭建完毕后,如何验证集群是否真正健康?如何确认 GPU 资源已被正确识别?在下一篇《IBM Spectrum LSF Suite 最佳实践 (3):从服务状态到 GPU 检测的健康检查清单》中,我们将介绍系统管理员必须掌握的一系列检查命令和测试方法。