내가 4학년 1학기 프로젝트 수업으로 했던 리눅스를 이용한 클러스터 구축한 내용을 설명하고 있다. 그 때를 생각하면, 가장 어려웠던 것이 구축하는 것 보다도 클러스터에 이용할 컴퓨터를 구하는 일이었다. 클러스터는 저사양의 컴퓨터를 하나로 묶어서 고사양의 퍼포먼스를 내야 하는 기술이기 때문에 컴퓨터가 많으면 많을 수록 좋았다. 지금 기억에 내 컴퓨터 2 대와 동아리에서 2 대를 묶어서 총 3 ~ 4 대의 클러스터를 만들었던 것 같다.
준비운동 하기
벌써 세번째 수정판이다. 앞으로 어떻게 문서가 변경될 지 모르지만, 현재 이것이 최종판이다. 우선 필자의 환경은 다음과 같다.
Master Node X 1 대
CPU | 펜4 2.53G |
RAM | 512MB |
OS | RedHat 8.0 (여기선 바닐라 커널이 아닌, 2.4.18 커널을 사용했다) |
ETC | Lan Card 1장 |
Read Node X 2 대
First node
CPU | AMD 애슬론 900 |
RAM | 256MB |
OS | RedHat 8.0 (여기서도 마찬가지로 2.4.18 커널을 사용했다) |
ETC | Lan Card 1장 |
Second node
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 ----------------------------------------------
다음은 클러스터를 만드는 데, 필요한 소프트웨어들이다. 참고하기 바란다.
- 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도 설치해야 한다)
- fping (http://www.fping.com/download/) ← 이곳에 받은 fping에서만 컴파일에러가 나지 않았다. 반드시 최신버전을 받도록 한다.
mon (mon-0.99.2.tar.gz)
- 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' 이라고 입력해서 확인해보자!
여기서 주의할 점!!
또 다른 컹쿼러 브라우저를 실행시킬 때는 반드시 다시 클릭해서 띠우기 바란다. 만일 그냥 새창 띠우기로 하면, 제대로 테스트가 안될 수 있다.