Linux 集群成功的关键在于网络、时间、用户、存储四大地基:需同二层网络与双网卡隔离流量,chrony 精准授时(±10ms),统一 UID/GID 普通用户免密 SSH,NFS 仅用于静态资源而状态服务须用本地盘或专业集群存储。

Linux 集群不是简单把几台机器连上网就完事,核心在于服务协同、状态一致和故障隔离。很多新手卡在“能连通但跑不起来”这一步,问题往往出在基础设计上。
网络配置:别只盯着 IP 通不通
集群节点间不仅需要互通,更要满足低延迟、高带宽、无单点故障。常见误区是直接用办公网或 NAT 环境搭集群——结果心跳超时、数据同步卡顿、选举失败频发。
- 所有节点必须在同一二层网络(推荐 VLAN 隔离),禁用跨 子网 通信做集群 后端
- 至少配双网卡:一块走业务流量,一块专跑心跳 / 共识协议(如 Corosync、etcd)
- /etc/hosts 里必须静态映射所有节点主机名,禁止依赖 DNS——集群启动早于 DNS 服务
时间同步:不是“差不多准”就够
分布式协调(如 Pacemaker、Kubernetes etcd)对时间偏差极其敏感。误差超过 500ms 就可能触发误判脑裂,误差超 1s 常导致证书失效或日志乱序。
- 统一使用 chrony(非 ntpd),配置为同一台内网 NTP 服务器,且所有节点禁用 systemd-timesyncd
- 检查 chronyc tracking 与 chronyc sources -v,确保 offset 稳定在±10ms 内
- 集群部署前先运行 chronyc makestep 强制校正,避免首次启动因时间跳变被拒绝加入
用户与权限:root 不是万能钥匙
很多教程让所有操作切 root 执行,结果导致 SSH 密钥混乱、sudo 策略冲突、容器挂载权限异常。集群组件(如 Slurm、MPI、K8s kubelet)实际需要的是明确的 UID/GID 一致性,而非盲目提权。
- 所有节点创建同名普通用户(如 clusteradm),UID/GID 全集群统一(如 1001:1001)
- SSH 免密登录必须基于该用户,且~/.ssh/config 中指定 User,禁用 root 直接登录
- 关键目录(/var/lib/pacemaker、/etc/kubernetes、/shared)用 ACL 或 gid+sgid 保障组写权限,不依赖 chmod 777
存储共享:NFS 不是集群文件系统的替代品
新手常把 NFS 当“集群盘”挂给所有节点跑数据库或调度器——结果出现元数据锁竞争、缓存不一致、静默数据损坏。
- 仅用 NFS 存放只读配置、镜像、脚本等静态资源;状态类服务(MySQL、Redis、etcd)必须用本地盘或专业集群存储(Ceph RBD、GlusterFS、Lustre)
- 若必须 NFS,服务端启用 no_root_squash + sync + hard + intr,并在客户端加 nfsvers=4.2、rsize=1048576、wsize=1048576
- 所有节点 mount 点路径、选项、挂载顺序必须完全一致,建议用 autofs 或 systemd mount unit 统一管理
基本上就这些。不复杂但容易忽略——网络、时间、用户、存储四块地基打歪一点,上层应用就会反复报错重启。先验好这几项,再装软件,省下的调试时间够重装三遍系统。