![使用(可能)无盘从属节点设置低成本开发集群](https://linux22.com/image/561503/%E4%BD%BF%E7%94%A8%EF%BC%88%E5%8F%AF%E8%83%BD%EF%BC%89%E6%97%A0%E7%9B%98%E4%BB%8E%E5%B1%9E%E8%8A%82%E7%82%B9%E8%AE%BE%E7%BD%AE%E4%BD%8E%E6%88%90%E6%9C%AC%E5%BC%80%E5%8F%91%E9%9B%86%E7%BE%A4.png)
考虑以下:
我(假设)有一个重量级服务器/主节点,其中有几个磁盘,以及一组在 10 千兆 LAN 上的轻量级无盘客户端/节点。
服务器正在运行:DHCP 和 TFTP,通过 PXE 向客户端提供内核。PXE 内核在主服务器上加载并安装 NFS 作为根文件系统。
我将所有互联网访问路由到主服务器,并将其与客户端共享,以防止可能出现的安全问题,因为我想最大化节点和主服务器之间的 I/O,从而创建一个不受保护的私人可信网络和一个受防火墙保护的公共网络。这可以通过我的主节点有 2 个千兆以太网端口来实现。
目标是以不到四千美元的价格为大约六人建立一个软件开发实验室。其想法是尽可能多地共享硬件。
我的问题是:直接在 NFS 挂载上进行编译,还是在 tmpfs(完全在 RAM 中且没有后备存储的文件系统)上进行编译,然后将交换放在主节点上(希望我不必过多使用它),哪个更好?或者是否值得只为从属节点获取 SSD,以便它们可以进行本地编译,然后将结果保存到主节点上的 NFS 挂载上,请记住,这非常昂贵并且与设置目标背道而驰。
答案1
我已经设置了多个这样的系统。还有一个启动盘/USB 可以访问 DHCP 和 TFTP 站点,将映像加载到您想要临时添加到集群的任何随机系统中,这也很方便。您还可以设置工作站,使其每晚自动重新启动到集群(以获得一些非高峰处理能力),并在白天重新启动到任何其他操作系统。顺便说一句,如果您手动执行此操作,有很多工具包可以提供帮助。
回答您的问题,在这样的系统上进行编译的一般方法是使用所有磁盘在前端进行编译,并将主目录 NFS 从那里安装到计算节点。如果将其放在 tmpfs 上,则每次重新编译时都必须重建一个节点。如果您扩展到数百或数千个节点,NFS 可能无法扩展到那么高,但 autofs 等工具可以帮助您实现这一点,并且 nfs 可以满足您的需求。我假设您正在设置此系统以运行某种并行作业(MPI、hadoop 等)。我提到这一点是因为您可能希望 6 个用户以有效的方式共享此并行资源。我建议对作业使用排队系统,以便单个计算节点不会同时由多个用户共享(并且单个作业可以跨越许多/所有计算节点)。
SSD 可能不错,但我认为它们完全违背了您拥有廉价并行计算资源的目标。只要您有足够的 RAM 来保存小图像并运行作业,NFS 就可以很好地将应用程序代码传递给它们。如果您无法将作业放入内存中,那么您将面临完全不同的境地。在这种情况下,请考虑需要多少个计算节点才能将作业放入内存中(毕竟这是并行作业,希望它能够扩展到这么远)。无论如何,RAM 都比 SSD 快,因此,在昂贵的 SSD 上多花的钱通常最好花在具有更多 RAM 的更多计算节点上。