메뉴 바로가기 검색 및 카테고리 바로가기 본문 바로가기

한빛출판네트워크

IT/모바일

리눅스 웹 서버의 부하 분산에 관한 연구

한빛미디어

|

2004-02-25

|

by HANBIT

13,302

저자: 임영규 / GnomeRnD 기술연구소 소장

1. 서론

본 연구에서는 현재 웹 기반의 여러 서비스를 담당하고 있는 각종 서버 시스템의 부하를 분산하기 위한 방법을 제시한다. 일반적으로 리눅스 시스템에서 웹 서비스를 하기 위하여 아파치 웹 서버를 사용한다. 아파치 웹 서버 프로그램은 부하 분산을 위하여 가상 호스터 기능을 제공한다. 또 다른 방법으로 DNS를 이용한 부하 분산과 페킷 제어를 통한 부하 분산을 사용할 수 있다.

2. 웹 서버의 부하 분산 방법

웹 서버의 부하를 분산하기 위한 방법은 아파치 웹 서버 프로그램을 이용하는 방법과 DNS를 이용하는 방법, 그리고 리눅스 가상서버를 이용하는 방법이 있다.

2.1 아파치를 이용한 IP 기반 가상 호스트 (IP-Based Virtual Hosting)

IP 주소를 기반으로 한 서비스 방법을 말한다. 이것은 서버에 가상의 IP가 가상 호스트로 서비스되고 있는 만큼 IP를 가지고 있어야 한다는 뜻이기도 하다. 따라서 IP 기반 가상 호스팅 방법은 많은 IP 주소를 가지고 있는 곳이나 사설 IP를 이용하여 인트라넷 환경을 구성한 곳에 적합하다. 하나의 NIC에 여러 IP 주소를 매핑하는 방법을 말한다. 이를 구현하기 위해서는 ifconfig, route 명령을 사용한다.

예)
# ifconfig eth0:0 192.168.1.1 netmasj 255.255.255.0 up
# route add -host 192.168.1.1 dev eth0:0
# ifconfig -a

하나의 NIC에 부여할 수 있는 최대 가상IP는 eth0:0--eth0:255까지 가능하다.

2.2 이름 기반의 기반 가상 호스트 (Name-Based Virtual Hosting)

이 방법은 하나의 NIC IP를 이용하여 여러 개의 도메인 주소를 매핑하는 방법이다. 이 방법을 사용하기 위하여 아파치 웹 서버 프로그램의 환경 설정 파일인 httpd.conf 파일의 가상 호스트 부분을 적절히 수정할 필요가 있다.

ServerName 도메인-이름
NameVirtualHost IP주소

.
. 각 항목은 원하는 대로 수정한다.
..


2.3 아파치를 이용한 IP 기반 + 이름 기반의 가상 호스트 (Name-Based Virtual Hosting)

이 방법은 이름 기반 가상 호스팅과 IP 기반 가상 호스팅을 혼합하여 사용할 수 있는 방법으로 두개 이상의 IP주소로 웹 호스팅을 하고자 하는 경우에 사용할 수 있다. 이것은 특정한 IP가 필요로 하지 않는 호스트에 대해서는 이름기반으로 하되 그렇지 않은 경우 IP 기반으로 웹 서비스를 하고자 하는 경우에 사용한다.

2.4 DNS를 이용하는 방법

DNS에 웹 서비스를 이용하고자 하는 호스트를 구성한 다음 이것을 기반으로 웹 서비스를 분산하는 방법이 있다. 이 방법은 DNS znoe, rev-zone 파일에 웹 서비스를 담당하는 서버를 등록해 두는 방법으로 매우 간단하다. 이 방법은 DNS 서비스를 구현해 주는 BIND 프로그램의 버전이 9에서 가능한 방법이다. 도메인의 zone파일에 다음과 같이 TTL (Time to Leave)값을 설정하여 트래픽 부하를 분산 할 수 있다. TTL값은 DNS 케싱 서버에 각각의 요청 웹 서버에 대한 응답 중 한 가지만 오래 남아 있지 않도록 설정하는 값이다. 설정 예제는 DNS 환경 설정 파일에 다음과 같이 구성 할 수 있다.

www 60 IN A 210.220.230.30
IN A 210.220.230.40
IN A 210.220.230.50

이 방법은 아파치 프로그램을 이용한 가상 호스팅 방법과 달리 여러 대의 웹 서버를 풀(Pool)로 구성한다는 점이다. 아파치를 이용하는 방법은 단일머신으로 구성하는 점에서 실제 시스템에 미치는 부하 절감 효과는 그리 좋은 편은 못된다. 그러나 이 방법은 실제 여러대의 서버가 각각 웹 서비스를 행하므로 부하 분산 효과가 있다고 할 수 있다.

2.5 LVS(Linux Virtual server(이하 LVS)를 이용하는 방법

LVS를 이용하여 웹 서버의 부하를 분산하는 방법은 패킷을 직접 조작하여 요청 웹 서버로 곧 바로 패킷을 전송해 주는 방법으로, 위 두가지 경우보다는 매우 효율적인 부하 분산을 할 수 있다. LVS를 이용하는 부하 분산 방법에는 NAT 방법, 터널링 방법, 직접 라우팅 방법이 있다. 이것은 iptable을 적절히 조정하여 요구에 대한 응답을 보내는 방법이다. 따라서 보안에 대한 신뢰도 향상을 가져 올 수 있다. 이 방법에 대한 개략적 그림은 다음과 같다.


[그림 1] NAT 방식


[그림 2] 터널링 방식


[그림 3] 라우팅 방식

3. 결론

본 연구에서 살펴본 웹 서비스 부하 분산에 관하여 시스템 관리자는 적절한 방법으로 웹 서버를 구성 할 수 있다. 부하 분산, 보안, 시스템 효율 등을 잘 고려하여 적적한 서비스를 할 수 있도록 시스템을 설계하는 것이 중요하다고 하겠다. 실제 아파치 의존적인 부하 분산의 의미는 그리 좋지 않다고 생각한다. 무리하게 가상 IP를 사용하게 되면 NIC 자체에 분배되는 부하가 상대적으로 늘어나기 때문이다. 또 BIND에 의존하게 되는 경우는 아파치 보다는 상대적으로 NIC에 대한 부하 분배를 감소 시킬 수 있으므로 더 효율적일 수 있다. LVS의 경우 부하 분산을 위한 LoadBalnce(부하 분배가)를 별도로 갖추어야 하는 불편함도 발생할 수 있다. 그러나 NIC의 정보를 보다 낮은 계층(OSI)에서 제어함으로써 위 방법 중에서 분산 효율은 가장 좋다고 하겠다. 물론 LVS가 제공하는 3가지 모형에 대하여 어떤 자료를 웹 서버가 서비스 하느냐에 따라 각각의 효율은 서로 달라질 수 있다. 과제가 있다면 웹 서비스를 하기 위한 자료의 동기화 측면에서는 어떤 것이 더 효율적인지 확인하는 것이다.
TAG :
댓글 입력
자료실

최근 본 책0