가상 서버는 세가지 방식으로 사용할 수 있다. 리눅스다이텍터(** 로드 밸런싱 서버를 의미하는 듯함) 에 함께 존재하는 IP 부하분산에는 세가지 기법(패킷 포워딩 방법)이 있다. NAT, IP 터널링, 다이렉트 라우팅 등. 개별적으로 작동 원리 및 설정방법은 개별 링크를 참고하기 바란다.
커널을 어떻게 설정하고 어떻게 사용할지는 각 자료에 상세하게 나와있다. 다음의 내용은 각 기법의 장단점을 설명하고 있다.
TCP/IP 프로토콜을 지원하는 어떠한 운영체제에서로 실제 서버로 사용할 수 있다. 실제 서버는 사설 IP를 써도 되며 오직 부하분산 서버만 실제 IP를 사용하면 된다.
단점은 확장성에 제한이 있다는 것이다. 일반적인 PC서버 기준으로 했을 때 서버노드가 20개 이상으로 증가할 경우 부하분산서버에서 병목이 생길 수 있다. 왜냐하면 패킷이 들어오고 나갈때마다 부하분산서버에서 패킷을 변경해야하기 때문이다. 다음과 같이 가정해보자. TCP 패킷의 평균 길이가 536Bytes 이다. 패킷 변경에 의한 지연시간은 60us(펜티엄 프로세서 기준이며 이보다 더 뛰어난 프로세서를 쓰면 지연시간이 감소될 것이다)이고 부하분한서버의 최대 처리량이 8.93MBytes/s이다. 실제 서버의 평균 처리량이 400Kbytes/s 일때 부하분산서버는 22개의 실제 서버를 스케쥴링할 수 있다.
NAT를 이용한 가상서버에서 아주 많은 서버를 처리해야 할 경우가 있다.부하분산서버 자체가 전체 시스템에서 병목현상을 보이겠지만 이를 해결할 두가지 방법이 있다. 한가지는 혼합적인 방식을 사용하는 것이며 또 하나는 IP 터널링을 이용하거나 다이렉트 라우팅을 이용하는 것이다. DNS를 이용하는 경우, 서버클러스터를 구성하는 다수의 부하분한서버를 도입하고 그 부하분산서버를 Round-Round DNS로 이용해 묶는 것이다. 확장성을 위해 VS-터널닝이나 VS-다이렉트라우팅을 사용할 수 있으며 복합적인 부하분산방법을 생각할 수 있다. 전면에는 터널링이나 다이렉트 라우팅을 하는 부하분산서버를 구성하고 그 다음으로 NAT를 이용해 부하분산서버를 구성할 수 있다.
NAT를 이용할 경우 패킷이 들어오고 나갈때마다 부하분산서버를 거쳐야한다. 네트웍 인터페이스의 처리량은 제한되어있기 때문에 서버 노드가 20대이상 늘어날경우 부하분산서버가 병목현상의 새로운 주범이 될 수 있다. 일반적으로 웹 서비스같은 인터넷 서비스는 들어오는 요청는 작아도 그에 대한 응답은 자료양이 큰 경우가 대부분이다.
IP터널링을 이용하는 경우, 부하분산서버는 단지 들어오는 요청에 대하여 각기 다른 실제 서버로 할당만을 할 뿐이고 실제 서버가 사용자에게 직접 응답을 보낸다. 그래서 부하분산서버에서 더 많은 요청를 처리할 수 있으며 100개 이상의 실제 서버를 다를 수 있다. 또한 부하분산서버자체가 시스템의 병목지점이 되는 현상도 없앨 수 있다. 이렇게 IP 터널링을 이용하면 부하분산서버에서 사용할 수 있는 서버 노드의 수를 크게 늘릴 수 있다. 설사 부하분산서버가 100Mbps full-duplex(전복조) 네트웍 어댑터를 가졌어도 가상 서버의 최대 처리량은 1Gbps에 달할 수 있다. (** 정말 놀랍지 않은가...)
IP 터널링의 이러한 특성을 이용하면 아주 높은 성능의 가상 서버를 구축할 수 있으며, 특히 가상 프록시 서버에 적합하다. 프록시 서버에서 요청을 받는 경우, 인터넷에 직접 연결하여 개체를 가져오고 그것을 바로 사용자에게 보내줄 수 있다.
그러나, 모든 서버에서 "IP 터널링"(IP Encapsulation)을 지원해야하며, 나(**저자)는 리눅스에서만 테스팅을 했다. IP터널링을 지원하는 다른 운영체제를 사용하여 가상 서버를 사용한다면 나에제 알려주면 고맙겠다. (** IP 터널링은 솔라리스에서도 지원하는 것으로 들었는데요. 터보리눅스사에서 봤던가? 정확한 정보는 아닙니다)
IP터널링을 이용한 가상서버와 마찬가지로, 리눅스다이렉터는 다이렉트 라우팅을 이용해 가상 서버로 가는 연결만 처리를 한다. 그리고 분리되어있는 네트웍 라우터를 통해 사용자에게 응답 패킷을 보낸다. 이런 방법을 이용해 가상 서버의 확장성을 매우 높일 수 있다.
IP 터널링 방식에 비해 터널링에서 생기는 과부하가 없다. (실제로 이러한 과부하도 대부분 아주 작다) 그러나 부하분산서버에서 하나의 인터페이스가 더 필요하고 실제 서버의 인터페이스는 물리적인 세그멘트안에 있어야한다.
(** 거꾸로 말해서 IP 터널링에서는 굳이 갈은 네트웍안에 있을 필요가 없다는 말이다.)
Created on: 1998/12/5