보통의 HPC 클러스터는 마스터 노드와 여러 대의 계산 노드로 이루어져 있다. 그렇다면 각 노드에 설치되어 있는 운영체제(OS)는 어떻게 관리해야 할까? 각 노드마다 독립적으로 설치되어 있는 경우에는 각 노드마다 일일이 OS 를 설치해주어야 한다. 이후 각 노드에서 계산을 수행하기 위한 소프트웨어 설치 등 OS 환경을 동일하게 유지시켜야 하는 것도 일이다.
따라서 이를 해결하기 위한 방법을 하나 소개한다. 계산 노드에 독립적인 OS 이미지가 존재하지 않고, 마스터에 저장된 OS 이미지를 부팅 시 다운받아 구동하는 PXE boot 방법을 사용하는 OpenHPC 를 살펴보고자 한다.
OS 이미지 목록 확인
[root@rna1 slurm]# wwsh vnfs list
VNFS NAME SIZE (M) ARCH CHROOT LOCATION
centos7.7 398.1 x86_64 /opt/ohpc/admin/images/centos7.7
OS 이미지 재생성: wwwvnfs
다음의 경로가 바로 노드에 적용되는 OS 이미지가 들어있는 위치다.
[root@rna2 ~]# cd /opt/ohpc/admin/images/centos7.7/
[root@rna2 centos7.7]# pwd
/opt/ohpc/admin/images/centos7.7
[root@rna2 centos7.7]# ls -a
. bin dev extdata1 fastboot lib media opt root sbin srv tmp var
.. boot etc extdata2 home lib64 mnt proc run scratch sys usr
OS 이미지가 준비되어 있음을 확인 후, wwvnfs 명령어를 통해 노드에 배포되는 이미지를 재생성 한다. 이 명령어는 이미지 바이너리를 database 에 업데이트하는 역할을 한다.
[root@rna2 ~]# wwvnfs --chroot=/opt/ohpc/admin/images/centos7.7
Using 'centos7.7' as the VNFS name
Creating VNFS image from centos7.7
Compiling hybridization link tree : 0.30 s
Building file list : 0.70 s
Compiling and compressing VNFS : 76.59 s
Adding image to datastore : 145.53 s
Total elapsed time : 223.13 s
클러스터 재부팅
각 계산 노드들을 재부팅 한다.
[root@rna2 ~]# pdsh -w n[1-51] reboot
[root@rna2 ~]# ssh rna2a reboot
[root@rna2 ~]# ssh rna2b reboot
저장장치 마운트
부팅 후 마운트 스크립트를 실행해 준다.
위치는 /root/after_cluster_reboot.sh
에 있다.
스크립트의 내용은 다음과 같이 구성되어 있다.
#!/bin/bash
ssh rna2a systemctl start nfs-server
ssh rna2b systemctl start nfs-server
ssh rna2a mount /dev/sdc1 /extdata1
ssh rna2b mount /dev/sdb1 /extdata2
echo "/extdata1 *(rw,no_subtree_check,no_root_squash)" | ssh rna2a 'cat >> /etc/exports'
echo "/extdata2 *(rw,no_subtree_check,no_root_squash)" | ssh rna2b 'cat >> /etc/exports'
ssh rna2a systemctl restart nfs-server
ssh rna2b systemctl restart nfs-server
pdsh -w n[1-51] mount -t nfs 192.168.10.52:/extdata1 /extdata1
pdsh -w n[1-51] mount -t nfs 192.168.10.53:/extdata2 /extdata2
ssh rna2a mount -t nfs 192.168.10.53:/extdata2 /extdata2
ssh rna2b mount -t nfs 192.168.10.52:/extdata1 /extdata1
리부팅 후 상기 스크립트 실행시 각 노드에 nfs 마운트가 된다.
자주 접하는 에러들
Cannot open shared object file
어떤 프로그램을 실행하려고 할 때 필요한 공유 라이브러리를 찾을 수 없어 에러가 나는 경우는 흔히 겪는 문제이다. 아래와 같이 ‘cannot open shared object’ 라는 에러 메시지를 출력하는데, 이는 공유 라이브러리가 존재하는데도 찾지 못하는 경우와 실제로 공유 라이브러리가 설치되지 않은 경우로 나뉠 수 있다. 후자에 해당하는 경우 라이브러리를 설치해 주어야 한다.
bin/ucsc/bigWigToWig: error while loading shared libraries:
libpng12.so.0: cannot open shared object file: No such file or directory
클러스터의 경우에는 마스터 노드 뿐만 아니라 계산 노드에도 라이브러리를 설치해 주는 것을 잊지 말아야 한다. 많은 경우에 클러스터에 있는 모든 계산 노드를 통해 대규모 계산을 수행하려 할 때, 필요한 프로그램을 마스터 노드에만 설치해 놓는 경우가 종종 있다. 마스터 노드에서의 라이브러리 설치는 일반적인 리눅스 운영체제의 경우처럼 아래와 같이 설치하면 된다. libpng12.so 라는 공유 라이브러리가 없어서 에러난 경우를 가정하여 설명해 본다.
[root@rna2 ~]# yum install libpng12
하지만 계산 노드에 라이브러리를 설치할 때에는
OS 이미지가 저장되어 있는 경로를 root 로 가정한 설치를 진행해야 한다는 점이 다르다.
이 때에는 yum
명령어의 --installroot
옵션을 주어 노드의 이미지가 저장되어 있는 경로를 설정해주면 된다.
[root@rna2 ~]# yum --installroot=/opt/ohpc/admin/images/centos7.7/ install libpng12
자, 마스터 노드와 계산 노드에 모두 해당 라이브러리를 설치하였다. 이제 OS 이미지를 재생성 하고, 실제로 적용하기 위해 노드를 재부팅 시키면 된다.
[root@rna2 ~]# wwvnfs --chroot=/opt/ohpc/admin/images/centos7.7
...
[root@rna2 ~]# pdsh -w n[1-51] reboot
[root@rna2 ~]# ssh rna2a reboot
[root@rna2 ~]# ssh rna2b reboot