Python学习【210】:NIS 与 NFS 的双层协作:高性能集群用户管理的本质逻辑
在高性能计算集群中,用户管理的核心问题从来不是“如何创建一个用户”,而是“如何让成千上万个计算节点同时认识这个用户”。当你登录一台个人电脑时,系统通过读取本地硬盘上的 /etc/passwd 文件来验证你的身份——这是一个简单而直接的机制。但在 HPC 集群中,面对 20 个、200 个甚至 2000 个计算节点,这种做法立即失效:你不可能登录每一台机器去执行 useradd,也不可能在每台机器的硬盘上维护一份同步的用户清单。高性能集群的用户管理,本质上是将用户身份从“本地存储”转移到“网络服务”的过程。它依赖两个核心服务协同工作:NIS 负责将用户身份信息“广播”到所有计算节点的内存中,NFS 负责将用户的家目录“挂载”到所有计算节点的文件系统中。两者的结合,使得计算节点在物理硬盘上既不存储用户信息,也不存储用户数据——所有的身份验证和文件访问都通过网络实时完成。本文将从两种创建用户的方法出发,从理论层面剖析 NIS 和 NFS 在高性能用户管理中的分工与协作,揭示“计算节点无状态化”这一 HPC 架构设计的本质逻辑。- 方法一:手动固定 UID/GID(精细化控制)这种方法要求在创建用户前,先规划好 UID 和 GID,然后通过命令行显式指定。

优点:用户身份在整个集群的生命周期内保持稳定,即使未来添加新的节点或服务,也不会因 UID 漂移导致文件权限错乱。缺点:需要提前规划 UID 范围,操作步骤相对繁琐,需要管理员手动管理 ID 分配表。 - 方法二:自动分配 UID/GID(简化操作)这种方法依赖系统自动分配 UID 和 GID,管理节点上只需执行最简命令。

优点:操作简单,无需记忆或查询 UID 分配情况,适合个人测试或小型集群。缺点:如果同一集群中存在多个管理节点或本地用户,可能会因 UID 分配不一致导致文件所有者显示异常。
两种方法的区别不在“最终效果”上——无论采用哪种方法,只要执行 make 同步,所有计算节点都能通过 NIS 查询到该用户。区别在于“管理粒度”:方法一是在规划层面保证一致性,方法二是在操作层面追求便捷性。在实际生产环境中,单 NIS 域、单管理节点的场景下,两种方法等效。只有当集群规模扩大、引入多管理节点或跨域认证时,固定 UID 才会成为强制要求。- NIS 的核心机制NIS(Network Information Service)是一种网络目录服务,其核心功能是将管理节点上的用户身份信息“发布”给所有计算节点。其工作流程如下:

- 计算节点本地硬盘上没有用户这是理解 HPC 用户管理最核心的一点:NIS 同步的是“身份信息”,但不会写入硬盘。在计算节点上执行:

输出为空。因为 user01 并没有被写入本地硬盘的 /etc/passwd 文件。但如果执行:
则能看到 user01:x:1001:1001... 的完整记录。因为这条信息是通过网络查询后缓存在内存中的,从未落盘。
NIS 将用户信息存储在内存中,意味着它高度依赖网络和管理节点的可用性:如果 NIS 服务停止:计算节点的内存缓存逐步过期,新登录请求会因“用户不存在”而被拒绝。如果网络中断:ypbind 无法连接服务端,系统进入“降级模式”,已登录的用户可以继续工作,但新用户无法登录。这种设计看似“脆弱”,实则是为了实现“集中管理”的必然代价。在一个拥有数百个计算节点的集群中,维护 200 台机器上 /etc/passwd 的一致性是极其困难的。NIS 用“依赖网络”换来了“一次修改,全局生效”的管理便利。- NFS 的核心机制NFS(Network File System)是一种网络文件共享协议,其核心功能是将管理节点上的一个目录“暴露”给所有计算节点,让它们可以像访问本地硬盘一样访问该目录。在典型的高性能集群中:管理节点:通过 /etc/exports 文件定义共享目录(如 /public),并通过 NFS 服务端(nfsd)对外提供访问。计算节点:通过 /etc/fstab 文件定义挂载点,在启动时或手动执行 mount 命令,将管理节点的 /public 挂载到本地的 /public。
- 计算节点本地硬盘上没有用户数据与 NIS 类似,NFS 也遵循“不落盘”的原则,但范围扩展到文件系统层面:你看到的 /public/user01 目录,在计算节点的本地硬盘上并不存在。它是通过网络协议“映射”到计算节点上的,实际物理位置在管理节点的 BeeGFS 存储上。计算节点上的 /public/user01 只是一个“窗口”——所有读写操作都通过网络转发到管理节点的磁盘上。
NIS 告诉系统:“user01 是合法用户,它的 UID 是 1001。”NFS 告诉系统:“user01 的文件在 /public/user01,你可以通过网络访问它。”系统内核将两者结合,完成一次完整的用户登录和数据读写。2.4 计算节点“无状态化”:HPC 用户管理的本质- 物理上什么都没有,逻辑上什么都有现在可以清晰地回答一个根本性问题:计算节点上到底有什么?从物理存储的角度看,计算节点的本地硬盘上:❌ 没有 user01 的 /etc/passwd 条目❌ 没有 user01 的 /etc/shadow 密码记录❌ 没有 /public/user01 目录和文件但从逻辑运行的角度看,计算节点上:✅ 内存中有 NIS 缓存的用户信息✅ 文件系统中有通过 NFS 挂载的 /public/user01 目录✅ 用户可以正常登录、编译、运行作业这就是“无状态计算节点”的含义:计算节点只是一个“执行引擎”,它不存储任何持久化数据,所有状态都通过网络从管理节点获取。
高性能集群的用户管理,本质上是将“用户身份”和“用户数据”从计算节点的本地硬盘中解放出来,通过 NIS 和 NFS 两个网络服务实现集中管理。为什么 cat /etc/passwd 看不到 user01? —— 因为它不在本地硬盘上,只在 NIS 缓存中。为什么 NIS 服务停了,user01 就消失了? —— 因为身份信息只在内存中,从不落盘。为什么在 cu01 上修改脚本,cu20 上立即看到? —— 因为它们读写的是同一个 BeeGFS 文件系统,而不是各自的本地副本。计算节点的本地硬盘上既没有用户,也没有数据——它只是一个通过网络获取身份、通过网络访问文件的执行单元。 这正是高性能集群用户管理的核心设计哲学,也是它能够在数千个节点上保持一致性、可维护性的根本原因。让我们保持学习的热情,2026年一马当先、马到成功!