내가 4학년 1학기 프로젝트 수업으로 했던 리눅스를 이용한 클러스터 구축한 내용을 설명하고 있다. 그 때를 생각하면, 가장 어려웠던 것이 구축하는 것 보다도 클러스터에 이용할 컴퓨터를 구하는 일이었다. 클러스터는 저사양의 컴퓨터를 하나로 묶어서 고사양의 퍼포먼스를 내야 하는 기술이기 때문에 컴퓨터가 많으면 많을 수록 좋았다. 지금 기억에 내 컴퓨터 2 대와 동아리에서 2 대를 묶어서 총 3 ~ 4 대의 클러스터를 만들었던 것 같다.

준비운동 하기

벌써 세번째 수정판이다. 앞으로 어떻게 문서가 변경될 지 모르지만, 현재 이것이 최종판이다. 우선 필자의 환경은 다음과 같다.

CPU 펜4 2.53G
RAM 512MB
OS RedHat 8.0 (여기선 바닐라 커널이 아닌, 2.4.18 커널을 사용했다)
ETC Lan Card 1장
CPU AMD 애슬론 900
RAM 256MB
OS RedHat 8.0 (여기서도 마찬가지로 2.4.18 커널을 사용했다)
ETC Lan Card 1장
CPU 펜티엄 MMX-200
RAM 64MB
OS RedHat 8.0 (여기서도 마찬가지…)
ETC Lan Card 1장

위의 사양에 너무 신경쓰지 않길 바란다. 당시 필자에게 가장 어려운 점은 클러스터를 만들 컴퓨터를 구하는 것이었다. 사담을 조금 하자면, Real Node의 컴퓨터는 모두 동아리 선배의 컴퓨터이다. ㅎㅎㅎ
다음은 사용한 IP 내역이다.

----------------------------------------------
Master Node : 210.119.108.177 , 210.119.108.173(가상 IP 이다.)
Read Node : 210.119.108.170 , 210.119.108.175
----------------------------------------------

다음은 클러스터를 만드는 데, 필요한 소프트웨어들이다. 참고하기 바란다.

  1. linux-2.4.18-ipvs-1.0.4.patch , ipvs-1.0.4.tar.gz , hidden-2.4.5-1.diff(모두 http://www.linuxvirtualserver.org 에서 다운 받을 수 있다. 마지막 hidden 파일은 http://www.linuxvirtualserver.org/~julian/ 에서 다운 받을 수 있다. mon 과 이를 설치하기 위한 Perl 모듈이 필요하다! 또한 테스트를 위해 fping도 설치해야 한다)
  2. fping (http://www.fping.com/download/) ← 이곳에 받은 fping에서만 컴파일에러가 나지 않았다. 반드시 최신버전을 받도록 한다.
  • Time::Period (Period-1.20.tar.gz)
  • Time::HiRes (Time-HiRes-1.4.2.tar.gz)
  • Convert::BER (Convert-BER-1.31.tar.gz)
  • Mon::* (Mon-0.11.tar.gz)fping (fping.tar) ← 압축을 풀면 fping-2.4b2_to

자~아 위의 것들이 모두 준비되었다면, 본격적으로 설정을 해보자!!

커널 컴파일 및 설정하기 (Master Node)

마스터 노드는 기본적인 커널이 아닌 따로 2.4.18을 받아서 패치를 가한 뒤에 재컴파일해서 쓸 것이다.
우선 그 전에 커널 2.4.18 을 받아 놓기 바란다.
새로운 커널(2.4.18)을 다운 받았다면, 다음과 같이 압축을 풀어주고 특정 디렉토리로 복사해 준 뒤에, 패치를 해주자!!

#tar xzvf linux-2.4.18.tar.gz
#mv linux linux-2.4.18
#cp -rf linux-2.4.18 /usr/src
#cd /usr/src
#rm linux-2.4 (또는 linux)    -> 심볼릭 링크를 바꾸어주는 과정이다.
#ln -s linux-2.4.18 linux
#ln -s linux-2.4.18 linux-2.4
#cp linux-2.4.18-ipvs-1.0.4.patch /usr/src/linux
#cp hidden-2.4.5-1.diff /usr/src/linux
#cd /usr/src/linux
#cat ./linux-2.4.18-ipvs-1.0.4.patch | patch -p1   -> 패치를 해준다.
#cat ./hidden-2.4.5-1.diff | patch -p1   -> 이것 역시..
#cp /boot/config-2.4.18-26.8.0 /usr/src/linux/.config#make menuconfig (또는 xconfig)

필자가 추가한 옵션은 아래와 같다. 참고하기 바란다.

☞ 제대로 패치가 되었다면, 'Networking option' 메뉴 안에 'Virtual server configuration' 설정부분이 생겼을 것이다. 컴파일시에 웬만한 Networking option 설정은 모두 커널에 포함시키도록 한다. virtual 과 netfilter 도 마찬가지다.

Code maturity level options  --->
[*] Prompt for development and/or incomplete code/drivers  
 
      Networking options  --->    
            <*>Packet socket
[ ]   Packet socket: mmapped IO
[*] Kernel/User netlink socket
[*]   Routing messages
< >   Netlink device emulation
[*] Network packet filtering (replaces ipchains)
[*]   Network packet filtering debugging[ ] Socket Filtering
<*> Unix domain sockets[*] TCP/IP networking
[*]   IP: multicasting
[*]   IP: advanced router
[*]     IP: policy routing
[*]       IP: use netfilter MARK value as routing key
[ ]       IP: fast network address translation
[ ]     IP: equal cost multipath
[ ]     IP: use TOS value as routing key
[ ]     IP: verbose route monitoring
[ ]     IP: large routing tables
[ ]   IP: kernel level autoconfiguration
<*>   IP: tunneling
< >   IP: GRE tunnels over IP
[*]   IP: multicast routing
[ ]     IP: PIM-SM version 1 support
[ ]     IP: PIM-SM version 2 support
[ ]   IP: ARP daemon support (EXPERIMENTAL)
[ ]   IP: TCP Explicit Congestion Notification support
[ ]   IP: TCP syncookie support (disabled per default)
IP: Netfilter Configuration  --->
IP: Virtual Server Configuration  --->
< >   The IPv6 protocol (EXPERIMENTAL)
< >   Kernel httpd acceleration (EXPERIMENTAL)
[ ] Asynchronous Transfer Mode (ATM) (EXPERIMENTAL)---
< > The IPX protocol
< > Appletalk protocol support
< > DECnet Support
< > 802.1d Ethernet Bridging
< > CCITT X.25 Packet Layer (EXPERIMENTAL)
< > LAPB Data Link Driver (EXPERIMENTAL)
[ ] 802.2 LLC (EXPERIMENTAL)
[ ] Frame Diverter (EXPERIMENTAL)
< > Acorn Econet/AUN protocols (EXPERIMENTAL)
< > WAN router
[ ] Fast switching (read help!)
[ ] Forwarding between high speed interfacesQoS and/or fair queueing  --->
 
IP: Netfilter Configuration  ---> 모두 체크해주었다.  
	<*> Connection tracking (required for masq/NAT)
<*>   FTP protocol support
< > Userspace queueing via NETLINK (EXPERIMENTAL)
<*> IP tables support (required for filtering/masq/NAT)
<*>   limit match support
<*>   MAC address match support
<*>   netfilter MARK match support
<*>   Multiple port match support
<*>   TOS match support
<*>   tcpmss match support
<*>   Connection state match support
<*>   Unclean match support (EXPERIMENTAL)
<*>   Owner match support (EXPERIMENTAL)
<*>   Packet filtering
<*>     REJECT target support
< >     MIRROR target support (EXPERIMENTAL)
<*>   Full NAT
<*>     MASQUERADE target support
<*>     REDIRECT target support
<*>   Packet mangling
<*>     TOS target support
<*>     MARK target support
< >   LOG target support
< >   TCPMSS target support
 
                IP: Virtual Server Configuration  -> 이것 역시 모두 체크해주었다.
<*> virtual server support (EXPERIMENTAL)
[*]   IP virtual server debugging
(12) IPVS connection table size (the Nth power of 2)--- IPVS scheduler
<*>   round-robin scheduling
<*>   weighted round-robin scheduling
<*>   least-connection scheduling scheduling
<*>   weighted least-connection scheduling
<*>   locality-based least-connection scheduling
<*>   locality-based least-connection with replicationscheduling
<*>   destination hashing scheduling
<*>   source hashing scheduling--- IPVS application helper
<*>  FTP protocol helper
 
#make dep
#make clean
#make bzImage
#make modules
#make modules_install
#depmod -a 2.4.18
#cd arch/i386/boot/bzImage /boot
#vi /etc/grub.conf 파일 추가

커널 컴파일을 다시 경우 /lib/modules/2.4.18 디렉토리를 지워주어야 한다.

또한가지! 만일 새로 만든 커널이 kernel panic 이라는 메세지를 띄우고 멈췄다면,
/etc/grub.conf 라는 파일을 확인해본다.
'kernel /bzImage ro root=/dev/hda3 hdc=ide-scsi' 여기서 'root' 지정이 Label로 되어 있는지 확인해본다.
만일 Label로 되어 있다면 위와 같이 '/dev/hda3' 같이 바꾸어 준다.
위의 과정을 성공적으로 마쳤다면, 새로운 커널로 부팅한다.부팅하자마자, 다음을 확인해보자!!

#cd /proc/sys/net/ipv4/conf/all/  <- 여기에서 hidden파일이 있는지 확인한다.

파일이 있다면, hidden패치가 제대로 된 것이다. 위에서 받았던 ipvs-1.0.4를 설치해보자!

#tar xzvf ipvs-1.0.4.tar.gz
#cd ipvs-1.0.4/ipvs
#make
#make install
#ipvsadm
IP Virtual Server version 0.9.14 (size=4096)
Prot LocalAddress:Port Scheduler Flags 
-> RemoteAddress:Port         Forward Weight ActiveConn InActConn

이것으로 마스터노드를 설정하기 위한 모든 준비는 끝났다. 자세한 설정은 뒷 부분에서 알아보기로 하자! 이제는 리얼 노드에 대한 설정이다.

커널 컴파일 및 설정하기 (Real Node)

레드햇 6.2의 경우 커널 2.2.x 를 사용한다. 그렇기 때문에 ARP패치를 해주지 않아도 된다. 그러나 2.4.x 커널의 경우 반드시 ARP패치를 해주어야 함을 잊지 말도록 하자!!
따로 손 봐 줄 곳이 없다. 하지만 보시다시피, 필자의 경우, 리얼노드 모두 2.4.X 커널이다.
그러므로 번거럽지만, 다음과 같이 재컴파일을 해주어야 한다.

마스터 노드때와 다른 점이 있다면, hidden-2.4.5-1.diff 패치만 해주면 된다는 것이다.
이제 마스터 노드와 리얼노드 기본적인 설정이 끝났다.
본격적인 설정에 들어가 보자!!

본격적인 설정하기

우선 마스터 노드부터 보기로 하자! 필자는 아래와 같은 쉘 스크립트를 사용했다.

------------------masternode----------------------
echo 1 > /proc/sys/net/ipv4/ip_forward
ifconfig eth0:1 210.119.108.173 netmask 255.255.255.255 broadcast 210.119.108.173 up
route add -host 210.119.108.173 dev eth0:1
echo 1 > /proc/sys/net/ipv4/conf/all/hidden
echo 1 > /proc/sys/net/ipv4/conf/eth0/hidden
ipvsadm -A -t 210.119.108.173:80 -s wlc
ipvsadm -a -t 210.119.108.173:80 -r 210.119.108.170 -i
ipvsadm -a -t 210.119.108.173:80 -r 210.119.108.175 -i
----------------------------------------------

실행 권한을 준다. (755)
이번엔 리얼 노드에 대한 설정이다. 이번에도 역시 쉘 스크립트를 이용했다.

------------------------realnode-----------------
/sbin/ifconfig tunl0 210.119.108.173 netmask 255.255.255.255 broadcast 210.119.108.173 up
/sbin/route add -host 210.119.108.173 dev tunl0
/bin/echo 1 > /proc/sys/net/ipv4/conf/all/hidden
/bin/echo 1 > /proc/sys/net/ipv4/conf/lo/hidden
/usr/local/program/apache/bin/apachectl start    <- 웹서버는 설치되어있다고 가정
----------------------------------------------

역시 실행권한을 755로 준다.
자~아 이제 모든 준비가 끝났다. 이제 제대로 돌아가는 지 테스트를 해보자!!
준비물은 다음과 같다.

  • 리눅스가 설치되어 있는 컴퓨터 1 대 (반드시 컹쿼러 브라우저가 있어야 한다)

우선 컹쿼러 브라우저를 실행시켜서 설정에서 '쿠키' 와 '프록시' 옵션을 모두 비활성화 시킨다.
그리고 나서, 주소창에 '210.119.108.173' 이라고 입력해서 확인해보자!

또 다른 컹쿼러 브라우저를 실행시킬 때는 반드시 다시 클릭해서 띠우기 바란다. 만일 그냥 새창 띠우기로 하면, 제대로 테스트가 안될 수 있다.

  • computer/networking/클러스터_구축하기_-_1.기본적_로드밸런싱.txt
  • Last modified: 3 years ago
  • by likewind