集群设置与配置指南

在集群计算中,为了高效地进行分布式计算和资源管理,需要对各个节点进行一系列的设置与配置。本指南详细描述了如何完成无密码登录、静态 IP 设置、NFS 配置、作业调度与性能监控等任务。


1. 设置无密码登录、静态 IP 以及修改 hostshostname

1.1 生成 SSH 密钥并分发到节点

在主管理节点(假设为 master 节点)上生成 SSH 密钥对:

ssh-keygen -t rsa -b 2048

分发公钥到各个节点以便无密码登录:

sshpass -p 节点登录密码 ssh-copy-id -i ~/.ssh/id_rsa.pub username@节点ip

Note

分发的密钥应由普通用户生成,而不是 root 用户。此外,确保 sshpass 已安装。


1.2 批量修改节点 IP 和主机名的脚本示例

以下是一个批量修改脚本的示例,可设置静态 IP 和主机名:

#!/bin/bash
IPS=("172.26.96.117" "172.26.96.118" "172.26.96.119")
HOSTNAMES=("node1" "node2" "node3")
NEW_IPS=("192.168.1.201" "192.168.1.202" "192.168.1.203")

for i in "${!IPS[@]}"; do 
   IP=${IPS[$i]} 
   HOSTNAME=${HOSTNAMES[$i]} 
   NEW_IP=${NEW_IPS[$i]}
   
   ssh root@$IP "hostnamectl set-hostname $HOSTNAME"
   ssh root@$IP "echo '$NEW_IP $HOSTNAME' >> /etc/hosts"

   ssh root@$IP "cat <<EOF > /etc/netplan/01-netcfg.yaml
   network:
     version: 2
     ethernets:
       ens33:
         dhcp4: no
         addresses: [$NEW_IP/24]
         gateway4: 192.168.1.1
         nameservers:
           addresses: [8.8.8.8, 8.8.4.4]
   EOF"
   
   ssh root@$IP "netplan apply"
done

Important

根据实际网卡名称和网关地址修改脚本中的 ens33gateway4 参数。


2. 配置 NFS(网络文件系统)

2.1 在管理节点安装 NFS 服务

安装 NFS 服务器端:

sudo apt-get install nfs-kernel-server

2.2 配置共享目录

假设 /opt 是要共享的目录,并且 172.16.0.0/24 是允许访问的网络范围:

echo "/opt 172.16.0.0/24(rw,sync,no_root_squash)" | sudo tee -a /etc/exports

重启服务并设置开机自启:

sudo systemctl restart nfs-kernel-server
sudo systemctl enable nfs-kernel-server

Tip

为了提高 NFS 性能,可以在配置中使用 async 参数,但需要注意可能会带来数据一致性问题。


2.3 在节点挂载共享目录

安装 NFS 客户端:

sudo apt-get install nfs-common

挂载共享目录:

sudo mount -t nfs 管理节点IP:/opt /opt

为了挂载持久化,可在 /etc/fstab 文件中添加以下行:

管理节点IP:/opt /opt nfs defaults 0 0

Warning

确保共享目录有正确的权限,避免节点间因权限问题导致挂载失败。


3. NIS (Network Information Service) 配置

NIS 用于集群范围的用户账户管理。确保所有节点使用相同的用户信息。

3.1 管理节点配置

  1. 安装 NIS 服务器:
sudo apt update
sudo apt install -y nis
  1. 配置 NIS domain:
# 编辑 /etc/defaultdomain
echo "cluster.domain" | sudo tee /etc/defaultdomain

# 配置 NIS server
sudo sed -i 's/NISSERVER=false/NISSERVER=master/' /etc/default/nis
  1. 设置 NIS 服务:
echo "domain cluster.domain server master.cluster.domain" | sudo tee /etc/yp.conf
  1. 初始化 NIS 数据库:
sudo /usr/lib/yp/ypinit -m
  1. 重启服务并验证:
sudo systemctl restart ypserv ypbind
sudo systemctl status ypserv ypbind

3.2 计算节点配置

  1. 安装 NIS 客户端:
sudo apt install -y nis
  1. 配置 NIS client:
# 设置 domain
echo "cluster.domain" | sudo tee /etc/defaultdomain

# 配置 yp.conf
echo "domain cluster.domain server master.cluster.domain" | sudo tee /etc/yp.conf
  1. 启动服务并验证:
sudo systemctl restart ypbind
sudo systemctl status ypbind
ypwhich # 验证是否连接到正确的 NIS 服务器

4. Munge 认证配置

Munge 为 SLURM 提供节点间的认证服务。所有节点必须使用相同的 Munge 密钥。

4.1 管理节点配置

  1. 安装 Munge:
sudo apt install -y munge libmunge-dev
  1. 生成 Munge 密钥:
sudo dd if=/dev/urandom bs=1 count=1024 > /etc/munge/munge.key
sudo chown munge:munge /etc/munge/munge.key
sudo chmod 400 /etc/munge/munge.key
  1. 启动服务并验证:
sudo systemctl restart munge
sudo systemctl status munge
munge -n | unmunge # 测试 Munge 是否正常工作

Tip

  • 确保所有节点的系统时间同步
  • 检查 /var/log/munge/ 下的日志文件排查问题
  • 使用 ls -l /etc/munge/munge.key 验证密钥权限

5. 安装和配置 Slurm

Slurm 是一款强大的集群资源管理与作业调度工具。

5.1 安装 Slurm

在所有节点安装 Slurm:

sudo apt install slurm-wlm

5.2 配置 Slurm

在管理节点配置 /etc/slurm-llnl/slurm.conf 文件:

ClusterName=cluster_name
SlurmdPort=7003
SlurmctldPort=7002
SlurmdAddr=管理节点IP
SlurmctldAddr=管理节点IP

启动 Slurm 服务:

sudo systemctl start slurmctld
sudo systemctl enable slurmctld

Caution

确保 slurm.conf 中的节点名称与实际节点一致,否则服务无法正常启动。


6. 安装 MPI 并进行测试

MPI 用于并行计算,可与 Slurm 结合使用。

6.1 安装 Open MPI

在所有节点安装 Open MPI:

sudo apt-get install openmpi-bin openmpi-common libopenmpi-dev

6.2 配置环境变量

在每个节点的 .bashrc 文件中添加:

export PATH=/usr/lib/openmpi/bin:$PATH
export LD_LIBRARY_PATH=/usr/lib/openmpi/lib:$LD_LIBRARY_PATH

6.3 测试 MPI 程序

运行测试程序:

mpirun -np 4 hello_world

Tip

如果运行失败,检查 MPI 环境变量配置是否正确,以及节点间的通信是否正常。


7. 性能监控与调优

Important

性能监控和调优是集群稳定运行的关键环节,应定期检查集群的运行状态。


通过以上步骤,集群的基本配置就完成了。如果您有其他问题或需求,请随时留言讨论! 😊

8. 安装并配置 Ganglia(集群监控)

安装 Ganglia

在管理节点上安装 Ganglia 的监控工具:

sudo apt-get install ganglia-monitor gmetad ganglia-webfrontend

然后安装 Ganglia 监控客户端:

sudo apt-get install ganglia-monitor

配置 Ganglia

配置监控服务器和客户端的配置文件:

udp_send_channel {
  host = 管理节点 IP
  port = 8649
}

启动 Ganglia 服务

启动 gmetadgmond 服务:

sudo systemctl start gmetad
sudo systemctl enable gmetad
sudo systemctl start ganglia-monitor
sudo systemctl enable ganglia-monitor

配置 Ganglia Web 前端

启动 Web 服务器来访问监控界面:

sudo systemctl start apache2
sudo systemctl enable apache2

访问 http://管理节点 IP/ganglia,即可查看集群状态和性能指标。


9. 配置作业调度与负载平衡

作业调度

配置 Slurm 后,您可以通过 srun 命令来调度作业。例如,提交一个使用 4 个节点并行计算的作业:

srun -n 4 --mpi=pmi2 ./your_mpi_program

这将启动一个 MPI 程序,使用 4 个节点并行计算。

负载平衡

Slurm 会根据计算节点的负载情况自动进行负载平衡。例如,提交作业时,Slurm 会将作业分配到负载较低的节点。

如果您希望更精确地控制负载平衡,可以配置 Slurm 的 partitionsjob scheduling policies,这将允许您设置作业的优先级和资源分配规则。


10. 性能调优与监控

对于大型集群,性能监控和调优至关重要。


11. 集群安全性

确保集群的安全性是一个持续的任务。以下是一些基本的安全措施:

❤️ 转载文章请注明出处,谢谢!❤️