강좌
클라우드/리눅스에 관한 강좌입니다.
리눅스 분류

PVFS(Parallel Virtual File System) 설정 방법

작성자 정보

  • 웹관리자 작성
  • 작성일

컨텐츠 정보

본문

title.gif


icon01.giftitle01.gif

하드웨어

소프트웨어

CPU

펜티엄II 350 (서버 노드)

펜티엄MMX 166 x 3

운영체제

리눅스 6.2

RAM

64Mbyte (서버 노드)

32Mbyte

커널 버전

Kernel-2.2.16

HDD

4.3Gbyte(서버 노드)

2.1Gbyte

메시지 패싱 라이브러리

LAM-MPI.6.5.3

PVM.3.4.3

NIC

RTL8139 x 5

PVFS 버전

PVFS-1.5.0 pvfs-kernel-0.9.0

허브

5 Port 더미 허브

표 1 클러스터 사양



icon01.giftitle02.gif


PVFS를 구현하기 위해서 필요한 파일

- PVFS-1.5.0

- pvfs-kernel-0.9.0

- ftp://mirror.chpc.utah.edu/pub/pvfs/ <-- 다운 사이트



icon01.giftitle03.gif

[root@ime /root]# cp pvfs-1.5.0.tgz pvfs-kernel-0.9.0.tgz /usr/src

[root@ime /root]# cd /usr/src

[root@ime /usr/src]# tar xvzf pvfs-1.5.0.tgz

[root@ime /usr/src]# tar xvzf pvfs-kernel-0.9.0.tgz

[root@ime /usr/src]# ln -s pvfs-1.5.0 pvfs

VOPWQ001.GIF

[root@ime /usr/src]# cd pvfs

[root@ime /usr/src/pvfs-1.5.0]# ./configure

[root@ime /usr/src/pvfs-1.5.0]# make

[root@ime /usr/src/pvfs-1.5.0]# make install

[root@ime /usr/src/pvfs-1.5.0]# cd ../pvfs-kernel-0.9.0

[root@ime /usr/src/pvfs-kernel-0.9.0]# ./configure --with-libpvfs=./pvfs/lib

[root@ime /usr/src/pvfs-kernel-0.9.0]# make

[root@ime /usr/src/pvfs-kernel-0.9.0]# make install

[root@ime /usr/src/pvfs-kernel-0.9.0]# cp pvfs.o /lib/modules/2.2.16/misc



icon01.giftitle04.gif


[root@ime /]# mkdir /pvfs-meta

[root@ime /]# cd /pvfs-meta

[root@ime /]# /usr/local/bin/mkmgrconf

VOPWQ002.GIF

This script will make the .iodtab and .pvfsdir files

in the metadata directiory of a PVFS file system.

Enter the root directory(metadata directory):

/pvfs-meta

Enter the user in of directory:

root

Enter the group id of directory:

root

Enter the mode of the root directory:

777

Enter the mode of the root directory:

doom1

Searching for host...success

Enter the port number on the host for manager:

(Port number 3000 is the default)

3000

Enter the I/O nodes:(can use form node1, node2, ...or nodename #-#, #, #)

doom1, doom2, doom3, doom4

Searching for hosts...success

I/O nodes: doom1 doom2 doom3 doom4

Enter the port number for the iods:

(Port number 7000 is the default)

7000

Done!

[root@ime /pvfs-meta]# ls -al

VOPWQ003.GIF

그림 3과 같이 mkmgrconf 파일을 실행하여 설정을 마쳤을 경우 .iodtab, .pvfsdir 파일 숨겨진 형태로 자동으로 생성한다.



icon01.giftitle05.gif

[root@ime /]# mkdir /pvfs-data

[root@ime /]# chmod 700 /pvfs-data

[root@ime /]# chown nobody.nobody /pvfs-data

[root@ime /]# cp /usr/src/pvfs/system/iod.conf /etc/iod.conf

[root@ime /]# ls -al /etc/iod.conf



icon01.giftitle06.gif

 

[root@ime /]# /usr/local/sbin/mgr

[root@ime /]# /usr/local/sbin/iod



icon01.giftitle07.gif

[root@ime /]# /usr/local/bin/iod-ping -h doom1

doom1:7000 is responding

[root@ime /]# /usr/local/bin/mgr-ping -h doom1

doom1:3000 is responding

VOPWQ004.GIF



icon01.giftitle08.gif

[root@ime /]# mkdir /mnt/pvfs

[root@ime /]# touch /etc/pvfstab

[root@ime /]# chmod a+r /etc/pvfstab

VOPWQ005.GIF

[root@ime /]# /bin/mknod /dev/pvfsd c 60 0

[root@ime /]# /sbin/insmod pvfs

[root@ime /]# /usr/local/sbin/pvfsd

[root@ime /]# /sbin/mount.pvfs doom1:/pvfs-meta /mnt/pvfs



icon01.giftitle09.gif

[root@ime /]# cp /etc/iod.conf /mnt/pvfs

[root@ime /]# more /mnt/pvfs/iod.conf

#Blank IOD config file -- IOD will use builtin defaults

[root@ime /]# /usr/local/bin/pvstat /mnt/pvfs/iod.conf

/mnt/pvfs/iod.conf: base = 0, pccount = 4 , ssize = 65536

위 내용을 클러스터를 구성하는 각 컴퓨터마다 전부 설치한다.

VOPWQ006.GIF

VOPWQ007.GIF

그림 6의 설정은 컴퓨터를 재부팅했을 경우 다시 클러스터를 구성하는 모든 컴퓨터에서 똑같이 실행해야 PVFS가 제대로 작동하게 된다. 그러나 이런 불편한 점을 스크립 화일을 이용臼?간편하게 설정을 할 수 있고, 스크립 파일을 /etc/rc.d/rc.local 파일 내용에 추가하면 부팅 시 자동으로 설정할 수 있다. 그러나 필자는 그렇게 하지 않고 클러스터의 모든 컴퓨터가 부팅완료 했을 경우에 pvfsexe 스크립 파일 하나를 실행하여 PVFS가 작동하도록 하였다.

VOPWQ008.GIF




icon01.giftitle10.gif

PVFS(Parallel Virtual File System)은 표면적인 작동은 NFS(Network File System)과 같아 보인다. 그러나 내부적으로 동작하는 방법은 커다란 차이가 있다.

VOPWQ009.GIF

그림 9는 클러스터에서 서버노드와 클라이언트노드의 디스크요량을 표시한 것으로 위 붉은색 상자안의 내용이 서버의 디스크 용량으로 서버는 3.8G로 되어 있고, 아래 분홍색 상자 안의 클라이언트노드로 디스크 용량은 1.8G이다.
클라이언트노드에서 연두색 부분이 NFS로 마운트되어 있는 부분으로 디렉토리 위치가 서버의 디렉토리를 나타내고 있으며, 용량도 서버의 용량을 표시하고 있다.
이 의미는 클라이언트에서 서버의 디렉토리에 접근하여 읽기, 쓰기가 가능하지만 파일이 읽고, 저장하는 위치는 서버노드인 것이다.
그에 비해 PVFS는 클러스터로 구성된 모든 컴퓨터의 하드디스크 용량이 표시되어 있다.
다시 말하면 서로 다른 디스크에 분산하여 저장된다는 의미?받아 들일 수 있다.
따라서 표면적인 작동은 PVFS나 NFS가 같아 보이지만 내부적인 작동은 PVFS는 파일을 여러 개의 서로 다른 디스크에 병렬로 저장하는 것으로 RAID와 비슷하게 동작한다고 할 수 있고, NFS는 단순히 서버의 디렉토리를 공유하여 사용하는 것이지 병렬로 저장되는 것이 아님을 알 수 있다.



icon01.giftitle11.gif

지금부터 필자가 말하고자 하는 것은 필자의 주관적인 판단으로 나름대로 클러스터와 PVFS에 대해 접근하려고 합니다. 본 글은 여러 사이트에서 참조하고, 보고, 생각하고, 질문하고, 구현한 결과를 바탕으로 기술하는 것이며, 혹시 본 글이 마음에 들어 다른 글 작성에 참고 및 인용 할 경우에는 단순히 필자에게 메일로 통보하고 마음대로 사용하기 바랍니다.

본 글에서는 편의상 존댓말을 사용하지 않았으며, 끝으로 본 글을 인용 및 참고로 인해 불이익을 당한 것에 대한 책임을 절대로 지지 않음을 알려드립니다.

현재 필자는 표1의 컴퓨터를 이용하여 과학계산용(HPC) 클러스터와 NAT 방식의 부하분산 클러스터를 같이 구현하여 사용하고 있으며, 클러스터의 파일 시스템을 더 편하게 관리하기 위해서 PVFS를 사용하게 되었다.
그 동안 클러스터를 구현하면서 나름대로 더 좋은 방법을 구현하기 위해 한 시스템에 여러 방법의 클러스터를 구현하게 되었는데, 클러스터를 구현할수록 뭔가 허전한 느낌을 떨쳐버릴 수가 없었다. 아마 다른 사람들도 클러스터를 구현해보고 한번쯤은 생각해 보지 않았나 생각된다.

그러면 이제부터 클러스터와 PVFS의 관계에 대해 언급하겠는데, 필자의 어설픈 생각을 바로 잡아 주실 분은 메일을 통해 의견을 보내주시기 바랍니다.
우선, 과학계산용인 HPC 클러스터를 살펴보면, HPC는 하드 장착 여부에 따라 두 가지로 구현 할 수 있다.
필자의 경험으로는 Diskless 방법이 훨씬 어려운데, rarp와 root mount 때문에 엄청 고생했었다.
그리고, HPC의 사용 목적은 대규모 연산을 하는데 사용되는데, 요즘은 3D 랜더링 및 영화의 특수 효과에도 사용된다고 한다.
예를 들면 클러스터를 사용하여 영화 타이타닉에 그래픽 작업에 사용한 예가 바로 그것이다.
HPC 클러스터에서 Diskless 클러스터의 구조는 수퍼컴퓨터와 거의 비슷하다.
2001년 8월 23일에 서울대학교에서 HPC 수퍼컴퓨터에 대한 강의가 있어서 청강하게 되었는데, 강사님의 말씀은 현재 서울대학교에 있는 수퍼컴퓨터와 Diskless 클러스터의 구조는 거의 같다고 하였다.
단지 규모가 크기 때문에 cpu, 램 , 하드디스크의 용량과 네트워크 장비, 속도가 다를 뿐이란 말씀을 하셨다.
즉, 클러스터는 병렬 컴퓨터 중에서 MPP(네트워크로 메시지를 주고 받는 형태의 컴퓨터) 머신의 구조로 구현한 것이다.
그럼 이번에 동작에 관해 말하면 클러스터는 여러 대의 컴퓨터가 한 대처럼 동작하도록 설계한 것이다.
그러나 여러 대가 한 대 처럼 완벽한 하나의 시스템이 되는 건 아니다. 어디까지나 여러 대의 컴퓨터에서 램과 CPU를 사용하는 것뿐이다.
필자는 HPC 클러스터를 구현했을 때 굉장히 허무함을 느꼈다.
왜냐하면 클러스터 구현에 필요한 것은 rshell, NFS, MPI, 그리고 네트워크 장비 및 설치 이것이 전부였기 때문이다.
더욱더 간단하게 구현한다면 두 대의 컴퓨터를 네트워크로 연결하고, MPI를 다운 받아 설치하고 세팅하면 그것이 HPC 클러스터이다.
이 얼마나 허무한 구현인가.
따라서 HPC에서 클러스터라고 할 수 있는 부분은 CPU이다.
즉, 여러 대의 컴퓨터에 있는 CPU를 하나로 묶은 것이 HPC라고 주관적인 판단을 하게 되었다.
무슨 말인가 하면 계산을 목적으로 하기 때문에 컴퓨터에서 계산에 필요한 부분은 CPU와 램뿐이며, 극단적으로 램을 제외시키고 컴퓨터에서 연산을 하는 부분을 생각하면 그것은 바로 CPU이다.
그렇기 때문에 HPC는 네트워크를 통해 CPU를 클러스터링 하는 것이라고 필자는 주장하고 싶다.
두 번째로 부하분산 클러스터를 살펴보면 부하분산(Linux Virtual Server) 클러스터는 구현 방법에 따라 DR, NAT, Tunneling 이렇게 세 가지 방법으로 구현된다. 세 가지 방법을 살펴보면 구현에 있어서 리얼 IP를 사용하는가 사설 IP를 사용하는가에 따라 작동 방법과 명칭이 달라지게 된다.
그럼 부하분산 클러스터는 어떠한 구조로 되어 있는가에 대한 질문을 해 볼 수 있는데, 생각해 보면 부하분산 클러스터와 각 컴퓨터에 하드디스크가 장착된 HPC 클러스터와 다를게 없다.
그럼 어떤 부분이 전혀 다른 기능의 클러스터가 되는가라는 질문을 다시 할 수 있다.
그것은 사용하는 소프트웨어에 있다.
다시 말해 하드웨어적으로는 HPC와 LVS의 차이가 전혀 없으며, 사용하는 소프트웨어와 설정 방법이 전혀 다른 기능의 클러스터가 되는 것이다.
필자는 ipvsadm를 설치하여 구현하였는데, 설정 방법은 굉장히 간단하다.
전 클러스터 구현 강의에서 부하분산 클러스터의 구현에 필요한 설정을 보면 간단한 것을 알 수 있다.
LVS의 동작 원리를 간단하게 살펴보면 첫 번째 DR(Direct Routing) 방법은 각 컴퓨터에 사용하는 IP주소는 전부 리얼 IP를 사용한다.
그럼 리얼 IP를 사용하는 방법이 있으니 사설 IP를 사용하는 방법은 없는가 라고 질문한다면 당연히 있다.
다시 동작 방법을 보면 외부 클라이언트에서 어떤 요청을 하게 되면 여러 대의 컴퓨터중에서 요청을 분산해주는 역할의 부하분산 서버(load balancing 이라고도 한다)가 나머지 실제 요청을 처리하는 서버(real server 이하 실제 서버)에 분배하면 실제 서버가 그 요청을 처리한다.
이 부분은 세 가지 방법 모두 같다.
그러면 어디에서 틀리는가 하는 질문에 대한 답은 그 후의 요청을 처리하는 실제 서버에 있다.
위에서 처음 언급한 리얼 IP와 사설 IP의 사용으로 실제 서버가 요청에 대한 응답 처리 방법이 달라지게 된다.
즉, DR 방식으로 구현 LVS는 실제 서버가 처리한 요청을 직접 클라이언트에 응답을 하게된다.
두 번째로 NAT(Network Address Translation) 방식의 LVS는 부하분산 서버를 제외한 모든 실제 서버에 사설 IP를 사용한다.
사설 IP를 사용한 컴퓨터는 외부 인터넷을 하지 못하기 때문에 부하분산 서버로부터 분배받은 요청을 처리하여 직접 응답하는 것이 아니라 응답을 부하분산 서버를 통해 클라이언트에게 응답하는 방법이다.
Tunneling 방법은 DR과 NAT의 혼합된 형태로 외부의 요청을 부하분산 서버가 실제 서버에게 분배할 때 사설 IP를 사용하여 분배하며, 분배받은 요청을 처리하는 실제 서버는 요청을 처리하여 리얼 IP를 통해 직접 응답하는 방법을 사용하고 있다.
다시 한번 설명하면 그림 10의 DR 방식은 외부 요청을 실제 서버가 직접 응답하는 형태로 동작하고, 그림 11의 NAT 방식은 외부 요청을 실제 서버가 처리하여 그 응답을 부하분산 서버를 통해 클라이언트에 응답하는 형태로 동작하며, Tunneling 방법은 표면적인 동작은 DR과 같지만 내부 동작은 위에서 설명했듯이 부하분산 서버가 요청을 실제 서버에 분배할 때는 사설 IP를 통해 전달하고, 실제 서버가 처리한 응답은 리얼 IP를 통해 직접 클라이언트에 응답하게 된다.
이로써 부하분산 클러스터를 간단하게 살펴보았다.
그럼 필자가 말하고 싶은 것이 무엇인가 하는 의문이 생길 것이다.
누구나 다 아는 거 아니냐 하는 물론 앞으로 설명하고자 하는 것도 알지 모르겠다.
필자가 말하고 싶은 것은 그럼 LVS에서 무엇을 클러스터링 한 것인가에 대한 것이다.
하드웨어 구조가 HPC와 같다면 무언인가 다른게 있지 않는가라고 생각할 수 있는데, 벌써 생각하고 있는 분도 계시리라. 그것은 바로 IP다.
LVS에서는 IP를 클러스터링 한 것이다.
LVS에서 어떤 것을 클러스터링 한 것인지를 필자는 강조하고 싶다.
HPC에서는 CPU를 클러스터링 한 것이지만 LVS에서는 IP를 클러스터링 한 것이다.
전 강의 내용에서 부하분산 클러스터 구현의 설정에 보면 IP를 설정하는 것으로 되어 있다.
물론 ipvsadm 소프트웨어를 사용하고 있지만 설치 후 LVS가 동작하기 위해서는 IP를 설정해야 한다.
IP 설정 중에 공통으로 들어가는 IP가 있는데, 여러 대의 컴퓨터에 리눅스를 설치할 때 각각 IP를 부여하여 설치 하지만 서로 다른 IP를 하나로 묶을 수 있는 IP

VOPWQ010.GIF

가 필요했던 것이다. 표 2를 보면 210.106.86.97 IP가 거의 모든 줄에 들어가 있는 것을 볼 수 있다.

/sbin/ifconfig eth0:0 210.106.86.97 netmask 255.255.255.255 broadcast 210.106.86.97 up

/sbin/route add -host 210.106.86.97 dev eth0:0 echo 1 > /proc/sys/net/ipv4/ip_forward

/sbin/ipchains -A forward -j MASQ -s 192.168.100.0/24 -d 0.0.0.0/0

ipvsadm -A -t 210.106.86.97:80 -s wrr

ipvsadm -a -t 210.106.86.97:80 -r 192.168.100.1 -m

ipvsadm -a -t 210.106.86.97:80 -r 192.168.100.2 -m

ipvsadm -a -t 210.106.86.97:80 -r 192.168.100.3 -m

2 NAT 방식 IP 설정내용


이 IP의 사용 목적은 외부에서 접속했을 때 표면적으로 보여지는 IP로 조금 다르지만 예를 들어 daum에 접속하기 위해서는 www.daum.net 이라는 도메인을 사용하지만 IP는 하나가 아닌 여러 개를 사용한다.
즉, 여러 대의 컴퓨터를 사용하기 때문에 각각의 컴퓨터에 IP가 있지만, 표면적인 것은 하나로 보이는 것이다.
설명이 조금 부족한 듯 한데, 머리에는 맴돌지만 정확히 어떻게 표현해야 할지 모르겠다.
그래서 다시 한번 설명해 보면 어떠한 단체에는 단체를 대표할 수 있는 명칭이 있다.
예를 들어 daum 카페에서와 같이 음악나라, 동창회, 리눅스 사모회 등 각 단체의 고유 명칭이 있다.
하지만 단체를 구성하는 것은 개성 있는 개인 여러 명이 모여 있기 때문에 하나의 단체가 된 것이다.
LVS도 이와 같이 여러 대의 컴퓨터에 각각 설정한 IP가 있지만 그 컴퓨터가 하나의 시스템이 되기 위해 사용할 IP가 필요한 것이다.
그래서 표 2에서 210.106.86.97이 하나의 시스템으로 동작하기 위해 사용한 IP가 되며, 그 밑의 192.168.100.1∼3까지의 IP가 각 컴퓨터의 IP인 것이다.
따라서 필자가 말하고 싶은 것은 LVS를 대표하는 IP가 서로 다른 IP를 사용한 컴퓨터를 묶기 위한(클러스터링) IP이며, LVS내의 여러 컴퓨터가 알아들을 수 있는 IP가 되는 것이다. 그래서 필자는 LVS에서는 IP를 클러스터링 한다고 말하고 싶은 것이다.


VOPWQ011.GIF


세 번째로 PVFS에 대해 언급하겠다. 클러스터에서 클러스터링을 하는 것은 용도와 기능에 따라 다르다.
하지만 위 두 가지 클러스터는 File System을 배제한 클러스터이다.
하지만 클러스터를 구현해 본 분들은 알겠지만 그럼 File System은 어떻게 묶어야 하는가에 관심을 갖게 된다. LVS의 경우에는 중복된 html 파일을 모든 컴퓨터에 복사하여 사용하게 된다.
이렇게 되면 파일 관리에 많은 어려움이 있고 특히 수정, 삭제, 업데이트, 복사 등의 작업을 할 경우 상당한 작업 시간이 필요하면서 단순한 작업을 해야한다.
이러한 불편을 덜기 위한 것이 NFS이다.
그러나 위에서 언급했듯이 NFS와 PVFS는 엄연한 차이가 있다.
PVFS는 독립적으로 떨어져 있는 하드디스크를 클러스터링하기 위해 사용한 것이다.
필자는 언뜻 소프트웨어적인 RAID라고 생각했고 구현한 결과 그림 9와 같이 확인할 수 있었다.
그러나 구현해 본 분들은 알겠지만 PVFS가 실행되고 있는 상태에서 하드디스크의 어떤 부분이라도 상관없이 아무곳에 파일 저장하면 병렬로 되는가라고 생각할지 모르겠지만, 결론부터 말하면 그렇지 않다.
PVFS는 /mnt/pvfs 또는 /pvfs-meta 디렉토리에 저장해야 여러 대의 컴퓨터에 병렬로 저장하게 되는 것이다. PVFS의 동작을 살펴보면 먼저 필요한 것이이 metadata server, I/O server가 필요하다.
metadata server의 주요 역할은 파일 및 디렉토리 위치, 파일 소유자, 여러 대의 컴퓨터의 어느 위치에 분산되어 저장되어 있는 정보를 갖고 있는 metadata를 관리한다.
그리고 metadata server가 실행하기 위한 데몬은 mgr이다.
I/O server가 실행하기 위한 데몬은 iod 이며, 역할은 여러 대의 컴퓨터에 분산 저장되어 있는 파일 및 디렉토리 접근을 제어하는 것으로 읽고, 쓰기, 저장, 검색을 담당하게 된다.
즉, PVFS는 하드디스크를 RAID와 같이 하나로 묶어주는 역할을 하는 것으로 다르게 생각하면 PVFS를 하나의 클러스터라고 생각할 수 있으며, 클러스터링 하는 대상이 하드디스크 인 것이다.
현재 필자는 PVFS를 구동시켜 PVFS 디렉토리에 계정을 생성하여 몇 개의 html 문서를 저장하여 테스트 중이다. PVFS를 이용하면 LVS에서의 중복된 파일을 각각의 컴퓨터에 복사, 삭제, 수정해야 하는 불편이 줄어들게 되는데, 파일 하나를 저장하면 클러스터내의 다른 컴퓨터에 복사하지 않아도 모든 노드에서 인식하게 되며, 읽기, 쓰기를 마음대로 할 수 있게 된다.
이러한 편리한 이점 때문에 cgi 및 DB 생성 파일을 PVFS에 저장하게 된다면 수정, 삭제, 복사, 업데이트를 하는데 걸리는 시간이 단축된다.

마지막으로 클러스터는 사용 용도에 따라 구현 방법이 다르다는 것을 지금까지 말해왔다.
그동안 클러스터는 과학계산용(HPC), 부하분산(LVS), 고가용성(언급을 안 했음)이 있지만 PVFS도 개인적인 관점으로는 하나의 클러스터라고 볼 수 있으며, 구현에 있어서 클러스터링하는 대상이 다르다는 것을 말해 왔다. 그동안의 클러스터는 완전히 하나의 시스템이다라고 말하기에는 File System 부분 때문에 미약했다. 하지만 PVFS가 등장하면서 클러스터가 점점 하나의 시스템으로 되어 가고 있다.

참고로 필자의 클러스터는 HPC + LVS(NAT 방식) + PVFS 이며 앞으로 고가용성 클러스터를 적재함으로써 더욱 완벽한 클러스터를 구현하려고 한다.

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,076 명
  • 현재 강좌수 :  36,001 개
  • 현재 접속자 :  558 명