본문 바로가기

3-3. Virtualization

Linux Virtual Server Project

무정지, 무제한 Web 서버를 만들자

Linux Virtual Server Project

& M$-WLBS

by Byoungjoon Shin

1999-9-9

vslogo-100.jpg (2965 bytes)

안녕하십니까? 신병준입니다.
요즘 인터넷의 기하 급수적인 증가량으로인해 기존의 Web서버의 성능이 사용자의 요구를 따라가지 못하는 상황이 발생하고 있습니다. Web서버의 upgrade를 생각해 볼 수가 있지만, 이것도 곧 부하가 모자라게 될 것이며, upgrade 과정도 상당히 복잡하고 비용도 만만하지가 않습니다.

기존의 방법으로는 Round-Robin DNS 나 고가의 IP 분배기장치들도 있지만, 이또한 가격이 만만하지가 않습니다.

그러면, SW만을 이용한 방법으로는 어떤것이 있을까 찾아보았더니, 제목과 같이 Linux 계열에서는 "Linux Virtual Server Project(http://proxy.iinchina.net/~wensong/ippfvs/)" 가 있고, M$의 계열에서는 WLBS가 있더군요.

이 두 SW모두 외부 사용자에게는 하나의 IP만을 보여주면서, 내부적으로는 n개의 서버를 돌리는 솔루션입니다.
즉, n개의 서버에 같은 web 서비스를 운영하면서, 부하가 증가하게 되면, 서버만 늘려서 성능을 향상시킬수 있는 방법입니다. 또한, n개의 서버가 동시에 죽지만 않느다면, 해당 서비스(web)는 절대 다운되지않는 무정지 시스템을 만들어 주게 됩니다.

우선, 개념도를 보면, LVSP(linux virtual server project)의 그림은 아래와 같습니다.

VirtualServer.gif (9149 bytes)

M$의 WLBS(Windows Load Balancing Server)는 아래와 같습니다.

wlbs2.gif (7153 bytes)

잠시 두 시스템을 비교해 볼까요?

항목 LVPS WLBS
운영환경 Linux/Unix 계열 Windows NT 4.0 Server
Windows NT 4.0 Server Enterprise Edition
(참고로 한국 M$에서는 Enterprise Edition에서만 된다고 주장하였음, 비싼 sw 팔아먹을려고, 나쁜 xx)
비용 무료 무료
최대연결수 100대 이상 64대
구성 1개의 Load Balancer(Real Server 가능)
n 개의 Real Server로 구성
n 개의 wlbs 서버로 구성
clustering 방법 Non-Shared cluster Non-Shared cluster
설치방법 Kernel patch Wlbs setup
적용범위 LAN/WAN LAN
스케줄방법 Round-Robin Scheduling
Weighted Round-Robin Scheduling
Least-Connection Scheduling
Weighted Least-Connection Scheduling
의 4가지 중에서 선택가능
비공개

각 sw의 자세한 내용은 해당 web 페이지에서 찾아 보시구요. 여기에서는 제가 설치하고, 테스트하고, 운영한 내용을 기준으로 설명하여 드리겠습니다.

0. 준비

우선 컴퓨터가 있어야 겠지요. 2대이상 + 클라이언트 1대 ^^
컴퓨터의 기종은 무엇이라도 상관이 없습니다. 각 OS가 운영가능한 최소한의 시스템이면 됩니다.

LVSP

Kernel 소스 2.2.12 로 테스트 하였습니다.
LVSP 홈페이지에서 최신버젼(테스트할 당시의 최신버젼  ipvs-0.8.2-2.2.12.tar.gz)을 받아 옵니다.

WLBS

Windows NT 4.0 Server
WLBS를 M$의 홈페이지에서 받아 옵니다.

1. 설치

LVSP

linux의 커널 컴파일에 대한 자세한 정보는 http://kldp.org에 가면 있습니다.
위에서 받아온 파일을 임의 디렉토리에 압축해제 합니다.

# tar xvzf ipvs-0.8.2-2.2.12.tar.gz (/usr/src 디렉토리에 풀었다고 가정합니다.)

# cd ipvs-0.8.2-2.2.12

# vi README

# cd ipvsadm-1.2     :     ipvsadm 설치를 위해서

# make

# make install

# cd /usr/src/linux

# cat <path-name>/ipvs-0.8.2-2.2.12.patch | patch -p1

           예) cat ../ipvs-0.8.2-2.2.12.patch | patch -p1

이 이후의 과정의 리눅스의 커널 컴파일 과정과 똑같습니다. 단지 몇가지 컴파일 옵션을 지정해 주어야 되는데, 저도 왜 지정해 주어야 하는지는 자세히 모르지만, 해당 사이트의 설명에 그렇게 되어 있기 때문에 지정해 주었습니다.

Linux 커널 컴파일과정 중에서

# make menuconfig   -- 커널 컴파일 설정 지정시

Kernel Compile Options:

Code maturity level options --->

[*] Prompt for development and/or incomplete code/drivers

Networking options --->

[*] Network firewalls
....
[*] IP: firewalling
[*] IP: always defragment (required for masquerading) (NEW)
....
[*] IP: masquerading
....
[*] IP: masquerading virtual server support (EXPERIMENTAL)(NEW)
(12) IP masquerading table size (the Nth power of 2)(NEW)
<*> IPVS: round-robin scheduling(NEW)
<*> IPVS: weighted round-robin scheduling(NEW)
<*> IPVS: weighted least-connection scheduling(NEW)
<*> IPVS: persistent client connection scheduling(NEW)
....
[*] IP: aliasing    : 이부분의 lvsp 홈에는 없는데, 지정안해주면 안되더군요.

 

컴파일이 완료된 후에 새로운 컴파일로 리부팅합니다. 이것을 설치가 완료된 것입니다.

 

WLBS

M$ 사이트에서 받아온 wlbs의 파일(wlbs22_i386.exe)의 압축을 임의의 디렉토리에 풀어줍니다.

readme.txt를 확인해 보시구요.

압축을 푼 디렉토리에 wlbs.hlp 파일을 보시면 자세한 설치에 관한 정보가 있습니다. 그림과 함께...

2. 설정

먼저, 가상 IP(사용자에게 보여질 IP)와 각 서버에 할당된 IP가 아래와 같다고 합시다.

가상 IP    :     172.26.20.110

서버 #1의 IP    :     172.26.20.111

서버 #2의 IP    :     172.26.20.112

LVSP

LVSP에서는 Load balancer 컴퓨터와 Real Server의 설정이 약간 다릅니다.

Load balancer (Linux Director) 컴퓨터에서 아래와 같이 명령을 줍니다.

ifconfig eth0 172.26.20.111 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig eth0:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev eth0:0
ipvsadm -A -t 172.26.20.110:23 -s  wlc   (WLC scheduling is used for this virtual service)
ipvsadm -a -t 172.26.20.110:23 -R 172.26.20.112 -g

Real Server의 수만큼 마지막 라인을 반복해서 주어야 합니다.
또한 Load balancer 컴퓨터를 real server로도 사용할려면,

ipvsadm -a -t 172.26.20.110:23 -R 127.0.0.1 -g

이렇게 명령을 추가로 줍니다.

 

다음으로 각 Real Server에서는 아래와 같이 명령을 줍니다.

ifconfig eth0 172.26.20.112 netmask 255.255.255.0 broadcast 172.26.20.255 up
route add -net 172.26.20.0 netmask 255.255.255.0 dev eth0
ifconfig lo:0 172.26.20.110 netmask 255.255.255.255 broadcast 172.26.20.110 up
route add -host 172.26.20.110 dev lo:0

여기까지가 설정의 전부 입니다.

 

WLBS

wlbs의 설정의 도움말의 설정방법을 그대로 따라하면 쉽게 가능합니다. 다만 아래의 그림에서 한가지만 바꾸어 주면 됩니다.

wlbsconf.gif (13623 bytes)

Primary IP address    :    가상 IP    172.26.20.110
Subnet mask            :      255.255.255.0    ( C 클래스인 경우)
Full Internet name     :     DNS서버에서 설정한 이름
Multicast support    :  만약 Lan card를 1개로 사용한다면 설정해 주십시오.

Priority(ID)            :      각 서버중에서 찾아갈 순서
Dedicated IP address    : 각 서버의 실제 IP      172.26.20.111


Filtering mode    : 각 서버가 동일 시스템이 아닌경우에는 Load percentage를 설정합니다.

[Add]버튼을 눌러주고, [OK]버튼을 누릅니다.

위의 과정을 각 서버에서 똑같이 해주면서 서버의 실제 IP만 바꾸어 줍니다.

또한 도움말에 보면, Network 환경의 등록정보중에서 Binding에 관련된 설정을 바꾸는 것이 있습니다. 이것을 도움말의 그림과   똑같이 설정하여 줍니다.

설정이 완료되면, 리부팅하여 이벤트 표시기를 확인하십시오.

 

3. 테스트

테스트 방법은 두 시스템이 동일합니다.

먼저, 두대 서버모두를 랜에 연결되어 있는 상황에서, 각 서버의 web 초기 페이지를 눈으로 확인할 수 있도록 다르게 만들어 줍니다.

각 서버가 살아 있는지 확인합니다.

ping 172.26.20.111
ping 172.26.20.112

이번에는 가상 IP로 ping을 해 봅니다.

ping 172.26.20.110

이 세개의 테스트에서 전부 응답이 있으면 제대로 실행되는 것입니다. 다만, 가상 IP로의 ping이 어느 시스템으로 가는지는 알수가 없습니다.

이번에는 브라우져를 띄우고,

각 서버의 IP를 url 주소에 적어서 web서버가 살아 있고, 각 서버의 처음 페이지가 다른 지를 확인합니다.

확인이 됐으면, 가상 IP를 url에 적어줍니다.  이제 어는 서버가 갔는지를 확인 할 수 있을 것입니다.

해당 서버의 lan 케이블을 뽑아두고, 브라우져에서 '새로고침'을 하여 보십시오.

이번에는 다른쪽 서버의 web화면이 나올 것입니다.

 

자, 이제 무정지, 무제한 web서비스를 할 준비가 된 것입니다.

이것은 꼭 Web서비스 뿐만 아니라 TCP/IP를 사용하는 대부분의 서비스에 응용할 수가 있습니다.

그럼, 도움되셨기를 뵙니다.

 

1999년 9월 9월

신병준 (bolero@dooin.co.kr)
http://bolero.dooin.co.kr