리눅스 서버 클러스터 설정하기: 1. 개요
https://novelism.tistory.com/424
리눅스 서버 클러스터 설정하기: 2. 파일 시스템 공유하기
https://novelism.tistory.com/425
저는 ubuntu 24를 사용 중이니 여기에 맞춰서 설명하도록 하겠습니다.
일단 서버는 모두 리눅스 설치가 완료되었다고 가정하겠습니다.
NFS(Network File System)는 서버 간 디스크를 공유하는 프로토콜입니다.
NFS 설정 전에 먼저 hosts 설정부터 하겠습니다.
/etc/hosts 파일은 미리 동일 네트워크상에 있는 컴퓨터의 IP와 host name (alias)를 기록해 두는 파일입니다.
이걸 설정하면 장점은 IP 주소를 직접 다 적지 않아도 host name을 입력하는 것으로 편리하게 사용할 수 있습니다.
ssh나 mount 등은 이런 host name을 지원합니다.
sudo vi /etc/hosts
sudo vi /etc/hosts
로 파일을 열어서 수정할 수 있습니다.
127.0.0.1 localhost
192.168.0.1 node00
192.168.0.2 node01
...
이런 식으로 ip 주소와 호스트 네임을 입력하면 됩니다.
이 파일은 모든 서버에서 다 설정해야 합니다. (그냥 전송을 하면 됩니다.)
예전에는 이 파일을 수정한 후 네트워크를 리스타트했던 것 같은데, 요즘은 아무것도 안 해도 자동으로 반영되는 것 같습니다.
잘 되었는지확인해보려면
ssh node02
같은 식으로 접속을 시도해볼 수 있습니다. 물론 접속하려는 서버에 ssh 서버가 작동 중이어야 하겠죠.
그러면 다음은 NFS 로 넘어가겠습니다.
NFS의 최신 버전은 NFS4 입니다.
다음 명령어로 nfs 서버와 클라이언트를 설치합니다.
sudo apt update
# 서버
sudo apt install nfs-kernel-server
# 클라이언트
sudo apt install nfs-common
서버에는 서버 버전만, 그외 컴퓨터는 클라이언트 버전만 설치하면 됩니다.
nfs 서버의 설정파일은 /etc/exports 입니다.
이 파일을 열어보시면 nfs 서버의 기본 설정폴더가 /srv/nfs4 임을 알 수 있습니다.
만약 하나의 디렉터리만 nfs로 공유할 것이라면 그 폴더 하나만 exports에 직접 입력해도 됩니다.
저는 /home 폴더와 /Data 폴더를 nfs로 공유하려고 합니다.
/home 폴더를 공유하면 여러 면에서 편해집니다.
anaconda 같은 것들도 한 컴퓨터에서만 세팅하면 되고 계산할 코드나 계산 결과도 전부 공유가 가능해지니까요.
2개의 서로 다른 디렉터리를 묶어서 nfs를 사용하려 할 때는 다음과 같이 할 수 있습니다.
/srv/nfs4 디렉터리 아래에 Data, home 폴더를 만들어줍니다.
sudo mkdir /src/nfs4
sudo mkdir /src/nfs4/home
sudo mkdir /src/nfs4/Data
그다음에 이 경로들에 bind 옵션으로 mount 합니다.
sudo vi /etc/fstab
다음 내용을 fatab 파일에 기록합니다.
/Data /srv/nfs4/Data none bind 0 0
/home /srv/nfs4/home none bind 0 0
그리고 sudo mount를 입력하면 마운트 됩니다.
이러면 /srv/nfs4/home 폴더는 home과 동일한 내용이 보일 것입니다.
이제 /etc/exports 파일을 세팅합니다.
sudo vi /etc/exports
저는 다음과 같은 한 줄을 추가했습니다.
/srv/nfs4 폴더를 공유할 것이고, 이때 전달받을 client는 node01입니다. 원래는 IP 주소를 직접 입력해야 하지만, hosts 파일을 설정했다면 이처럼 hostname을 사용할 수도 있습니다.
/srv/nfs4 node01(rw,sync,fsid=0,crossmnt,no_subtree_check)
파일에 위 문장을 추가했으면
다음 명령어를 실행하여 nfs export를 갱신합니다.
sudo exportfs -ar
이러면 서버 세팅은 완료되었고, 다음은 클라이언트 설정입니다.
/home 폴더는 이미 있으니 기존 폴더를 /home0으로 이름을 변경하고
새로 /home 폴더를 만들었습니다.
그리고 Data 폴더는 /nfs0라는 이름으로 받아올 예정이기에 이 폴더도 만듭니다.
sudo mv /home /home1
sudo mkdir /home
sudo mkdir /nfs0
sudo vi /etc/fstab
다음 fstab 파일을 읽어서 다음 내용을 기록합니다.
node00:Data /nfs0 nfs vers=4,defaults 0 0
node00:home /home nfs vers=4,defaults 0 0
좌측이 서버, 그다음이 mount 될 경로입니다.
nfs 서버에서 /src/nfs4 가 root(/)가 됩니다.
sudo mount 명령어로 마운트를 시도합니다.
클라이언트에서 ls /home 명령어를 실행하여 제대로 마운트 되었는지 확인합니다.
여기서 파일이 원활하게 공유되기 위해서 확인해야 하는 것이 user id, group id입니다.
리눅스는 사용자 별로 uid와 gid를 배정받고, 파일과 폴더들은 uid (user id)와 gid (group id)를 가지고 소유자를 식별합니다.
서버 클러스터에선 각 사용자의 uid와 gid는 모든 서버에서 동일해야 합니다.
예를 들어 node00에서 사용자의 uid가 1001이었는데 node01에선 동일한 사용자의 uid가 1002로 설정되었다고 합시다.
그러면 node00에서 정상적으로 권한을 가지고 있던 사용자가 node01에선 해당 파일에 대한 권한이 없다고 나옵니다.
따라서 각 서버들의 /etc/passwd 파일과 /etc/group 파일에서 uid와 gid를 동일하게 맞춰주어야 합니다.
'Computer' 카테고리의 다른 글
리눅스 서버 클러스터 설정하기: 1. 개요 (0) | 2025.01.05 |
---|---|
AMD B650-PLUS 하이닉스 DDR5 5600MHz 32GB*4 풀 뱅크 실패 (3) | 2023.09.29 |
adata 840 legend SSD 프리징, 렉 해결 윈도우 10, 11 (0) | 2023.04.22 |
linux 그래픽 드라이버 문제, ubuntu, nvidia_smi 에러, UEFI (0) | 2023.03.05 |
병렬 컴퓨팅, 멀티 프로세싱, python GIL (0) | 2023.03.05 |