前言

在上一篇中,我们了解了 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-servergalera-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>

二、多网络环境规划:流量不迷路

image-20251212180354560

在典型的 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-inventorylsf-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 检测的健康检查清单》中,我们将介绍系统管理员必须掌握的一系列检查命令和测试方法。

参考资料

  1. IBM Spectrum LSF Suite - Installation Best Practices Guide (Redbooks)
  2. MariaDB Galera Cluster Documentation
  3. IBM Spectrum LSF Documentation