본문 바로가기
컴퓨터 & IT (Computer & IT)/Beowulf Cluster (Diskless Cluster)

[Diskless Cluster] 2.1 계산 서버 – 계산서버의 루트디렉토리 만들기

by Physics 2020. 6. 2.
728x90

2.1 계산 서버 – 계산서버의 루트디렉토리 만들기

우분투에서 계산서버의 리눅스 이미지를 만드는 방법은 크게 3가지이다. [7]**

- debootstrap으로 리눅스 이미지 생성
- 인스톨 CD등을 통해서 계산서버의 리눅스 설치
- 마스터 서버의 리눅스 이미지 복사

여기에서 우리는 마지막 방법을 사용하여 계산서버를 위한 루트 디렉토리를 만들 것이다. [2], [10] 번 출처에서도 동일한 방법으로 계산노드들을 위한 리눅스 이미지를 만들어 사용을 하였다.

 

** 출처는 Reference 페이지 참조바람

 

   ※ 커널관련 문제

많은 레퍼런스에서 계산노드의 커널을 마스터 노드와 다르게 설정한다. 그 이유는, 마스터 노드에서 필요하지만 계산노드에는 필요하지 않는 기능들이 있기 때문에, 많은 경우 계산노드의 커널을 설치할 때에는 그러한 불필요한 기능들을 해체하여 설치한다. 하지만, 우리는 계산노드와 마스터 서버의 커널이 동일하게 설정하였다. 그 이유는 아래와 같다.

   

       1) 초보자가 커널을 다루는 것은 위험할 뿐만 아니라 어렵다.

          커널관련 조사를 해보면서, 지금까지 조사한 자료에 비해서 굉장히 장벽이 높은 것을 느꼈다. 또한 리눅스 커널의
경우, 리눅스 시스템의 작동에 중요한 역할을 하므로 잘못 건드릴 경우, 시스템이 정상적으로 작동하지 않을 가능성이 크다. 따라서, 리눅스 커널에 대해서 잘 모르는 초보자의 경우, 커널을 조작하여 시스템이 정상적으로 작동되지 않을 가능성을 떠안기보다는 약간의 시스템 상 불이익을 가지더라도 안전하게 마스터 서버의 커널과 동일한 것을 사용하는 것이 낫다. (내가 생각했을 때, 시스템 상 불이익이란, 여러 출처를 참조했을 때 속도적인 부분을 의미하는 것 같다. 계산노드에서 굳이 작동할 필요가 없는 데몬들이 켜짐으로인해, 속도적인 부분에서 약간의 불이익을 받는 거라고 생각한다.)

 

       2) 마스터 서버와 계산 노드들의 커널을 동일하게 할 경우 설치가 굉장히 간편해진다.

          계산노드와 마스터 서버의 노드가 동일한 경우에는, 계산 노드들을 위한 별도의 설치가 필요없이 마스터 서버의 루트 디렉토리를 그대로 복사하면 끝이다. 따라서, 설치과정이 간단해진다. 또한 마스터 서버와 계산서버의 커널이 동일하므로, 계산서버의 부트로더들을 마스터 서버의 것을 그대로 복사하여 사용할 수 있다. (만일, 커널의 버전이 다를 경우에는 그것에 맞춰 부트로더를 설정해야하는 것으로 알고 있다.)

 

   2.1.1 계산서버의 루트 디렉토리 생성

      위에서 설명한 것처럼 계산서버의 루트디렉토리는 마스터 서버의 루트디렉토리를 그대로 복사하여 사용한다. 앞 장의 “”에서 우리가 사용할 CMT Cluster의 디렉토리구조에서 설명하였듯이, 계산노드들이 사용할 루트디렉토리는 마스터 서버의 /computation_node/nfsroot/로 지정할 것이다. 모든 계산노드들이 /computation_node/nfsroot/를 동일하게 사용할 것이다. 만약, 당신이 계산노드들마다 다른 리눅스 이미지를 만들 경우에는 /computation_node/node01/과 같이 만들 것을 추천한다.

      루트 디렉토리를 만들기 위해선, /bin이나 /sbin과 같이 필수적으로 존재해야하는 디렉토리들이 존재한다. 하지만, 존재할 필요가 없는 디렉토리도 존재하기에, 다음 아래의 명령어를 입력하여 마스터 서버의 특정 디렉토리들만 /computation_node/nfsroot에 복사한다.

 

- 마스터 서버의 디렉토리들 복사

$ mkdir /computation_node/
$ mkdir /computation_node/nfsroot 
$ cp -a /bin /dev /etc /lib /lib64 /sbin /srv /usr /var /computation_node/nfsroot/

 

- 빈 디렉토리로 /computation_node/nfsroot//proc, /home, /root,/sys,/tmp, /run 디렉토리 생성

$ mkdir /computation_node/nfsroot/{proc,home,root,tmp,sys,run}

※ /proc디렉토리는 램에 저장된 메모리들을 위한 가상 디렉토리이다. 따라서, 마스터 서버와 동일할 필요는 없다. 또한, 빈 디렉토리로 생성할 경우, 계산노드들이 정상적으로 부팅할 경우, 계산노드들이 실행한 프로세스 정보들이 자동으로 저장될 것이다.
※ /home, /root는 마스터 서버의 /home, /root 디렉토리를 마운트하여 사용할 것이므로, /computation_node/nfsroot 에서는 빈디렉토리로 만든다.
※ /sys 커널이 하드웨어 정보를 기입하는데 사용하는 디렉토리이고 램기반 파일시스템이다. 따라서 /proc과 동일하게 빈디렉토리로 만들면, 계산노드들이 부팅을 할 경우에 해당 디렉토리에 계산노드들의 하드웨어 정보들이 기록된다

 

2.1.2 NFS로 마운트할 디렉토리 설정: /compuation_node/nfsroot/etc/fstab 수정

위에서 만든 /computation_node/nfsroot/를 NFS로 설정을 하도록 설정을 해야 정상적으로 계산노드들이 /computation_node/nfsroot를 자신의 루트디렉토리로 인식을 한다. NFS 마운트하기 위해서 아래 파일을 다음과 같이 수정하자.
- /computation_node/nfsroot/etc/fstab 파일 수정

$ mkdir /computation_node/nfsroot/{proc,home,root,tmp,sys,run}
proc                                    	/proc   	proc    	defaults        0       0
master:/compuation_node/nfsroot/        	/       	nfs     	defaults        0       0
none                                    	/sys    	sysfs   	defaults        0       0
none                                    	/tmp    	tmpfs   	defaults        0       0
master:/home                          		/home   	nfs     	defaults        0       0
master:/usr                           		/usr   		nfs     	defaults        0       0
master:/root                          		/root   	nfs     	defaults        0       0

※ 마스터 서버의 /computation_node/nfsroot를 계산노드의 /로 마운트 

※ 마스터 서버의 /home, /usr, /root를 /computation_node/nfsroot/{home,usr,root}에 각각 마운트

※ proc, sys, tmp 디렉토리는 각자의 파일시스템에 맞게 마운트

※ 주의할 점: 절대로 마스터 서버의 /etc/fstab 파일을 건드리면 안된다. 착오로 /computation_node/nfsroot/etc/fstab 파일에 기록할 내용을 마스터 서버의 /etc/fstab 파일에 기록을 하게 될 경우, 마스터 서버를 재부팅할 때 정상적으로 부팅을 하지 못하게 된다. 그렇게 되면 처음부터 마스터 서버를 포맷하여 재설치해야 하므로 주의하자.   

     - 여기까지 한 후, 계산노드들을 부팅을 하게되면, 계산노드들이 정상적으로 부팅이 되는 것을 아래의 그림같이 확인할 수  있다.

       하지만 아래와 같은 문제점들이 있다.
        ▶ ssh로 계산노드들에게 접속을 하면, 모든 ssh의 hostname이 동일하다. 이 부분은 2.1.3에서 다시 다룬다.    
        ▶ ssh로 계산노드에 접속을 하거나 직접 계산노드들을 조작하는 경우에, 계산노드들이 외부 인터넷 망과 연결이     
           되질 않는 점을 확인할 수 있다. 이는 외부 인터넷 망이 오직 마스터 서버에만 연결이 되어있기 때문이며, 이를    
           해결하기 위해선, Masquerade라는 기법을 이용하면, 내부 인터넷 망에 속해있는 계산노드들도 외부인터넷 망과
           연결할 수 있다. 이는 2.2.1에서 다룰 것이다. 또한, 외부망에서 내부 계산노드로 접속을 하게되는 경우도 있다.
           이런 건, port forwarding을 통해서 이루어 질 수 있으며, 2.2.2에서 다룰 것이다. 

 

2.1.3 계산노드의 hostname 변경

 계산노드들이 부팅을 하면서 마스터 서버의 dhcp 서버로부터 dhcpd.conf내의 “option host-name”을 통해서 hostname을 할당받지만, 최종적으로는 루트디렉토리 내의 /computation_node/nfsroot/etc/hostname에 기입된 hostname을 받게 된다. 이는 아래의 isc-dhcp-server의 공식 매뉴얼을 통해서 알 수 있다. [15]

 

       "An option host-name statement within a host declaration will override the use of the name in the host declaration.

It should be noted here that most DHCP clients completely ignore the host-name option sent by the DHCP server, and there is no way to configure them not to do this. So you generally have a choice of either not having any hostname to client IP address mapping that the client will recognize, or doing DNS updates. It is beyond the scope of this document to describe how to make this determination."


  따라서, dhcpd.conf에서 각각의 계산노드들에게 개별적인 hostname을 부여했음에도 불구하고 ~/etc/hostname에 기입된 hostname을 가지게 되므로 모든 계산노드들이 동일한 hostname을 가지게 된다. 이를 해결하는 방법은 굉장히 간단하다. /computation_node/nfsroot/etc/hostname 파일을 삭제하면 된다. 삭제 후, 계산노드들을 재부팅하면 dhcpd.conf에서 할당한 hostname을 정상적으로 받는 것을 확인할 수 있다.

728x90

댓글