====== 클러스터 구축하기 - 1.기본적 로드밸런싱 ======
내가 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도 설치해야 한다)
- mon (http://www.kernel.org/software/mon/)
- perl 모듈 (ftp://ftp.bora.net/pub/CPAN/modules/by-module)
- 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' 이라고 입력해서 확인해보자!
===== 여기서 주의할 점!! =====
또 다른 컹쿼러 브라우저를 실행시킬 때는 반드시 다시 클릭해서 띠우기 바란다. 만일 그냥 새창 띠우기로 하면, 제대로 테스트가 안될 수 있다.
----
{{indexmenu>:#1|skipns=/^(wiki|etc|diary|playground)$/ skipfile=/^(about|guestbook|todays)$/ }}
----