3가지 방법이 있다.
* Virtual Server via NAT
* Virtual Server via IP Tunneling
* Virtual Server via Direct Routing
다음은 NAT(network Address Translation), 터널링(Tunneling), 직접라우팅(Direct Routing)을 비교한 표이다.
|
NAT |
Tunneling |
Direct Routing |
서버 |
제약없음 |
터널링 |
비ARP 장치 |
서버 네트워크 |
사설 |
LAN/WAN |
LAN |
서버 가용범위 |
10~20 (확장성 제약) |
무한 |
무한 |
게이트웨이 |
로드밸랜서 |
자신의 라우터 |
자신의 라우터 |
NAT를 이용한 버츄얼 서버
NAT 방식의 유리한점은 실제 서버들은 TCP/IP 프로토콜을 지원하는 어떤 운영체제도 사용할 수 있다는 점이다. 실제 서버에는 내부 주소가 부여되고 로드밸랜서에만 공인 IP가 필요하다.
NAT 방식의 단점은 확장성에 한계가 있다는 점이다. 로드밸랜서는 서버의 수가 20 이상일 때 병목으로 작용한다. 왜냐하면 요구하는 패킷과 응답하는 패킷이 모두 로드밸랜서에서 재구성 되야 하기 때문이다.
TCP 패킷의 평균길이가 536 바이트(Bytes)라면 한 개의 패킷을 재구성하는데 소요되는 시간은 평균 60 us 이고 (펜티엄 프로세서일 경우. 고성능 프로세서라면 단축될 수 있다) 로드밸랜서의 최대 처리속도는 8.93 Mbytes/s 이다. 실제 서버의 평균 처리량이 400K bytes/s 라면 로드밸랜서는 22개의 실제 서버들을 관리할 수 있다.
NAT 방식은 많은 서버의 용량을 지원하지 못한다. 로드밸랜서가 병목현상을 일으켰을 때 두 가지 해결 방법이 있는데 DNS-RR을 이용한 로드밸랜서를 추가하거나, 터널링이나 Direct 라우팅 방법이다.
DNS-RR은 로드밸랜서는 Round-Round DNS에 의하여 하나의 도메인네임 그룹으로 구성된다. 높은 확장성을 필요로 하면 터널링이나 Direct 라우팅을 사용할 수 있고 중첩 부하 평형방식도 가능하다. 이 경우 맨 앞단은 터널링 혹은 Direct 라우팅 평형기이고 2번 계층에 여러 개의 NAT 부하평형기가 위치하면 이들이 자신의 클러스터를 갖는다.
IP 터널링 버츄얼서버
NAT 방식은 요청과 응답 패킷이 모두 로드밸랜서를 통과한다. 서버의 노드가 20이상 증가하게되면 로드밸랜서에서 병목 현상을 일으킨다. 왜냐하면 네트워크 인터페이스의 처리속도에는 한계가 있기 때문이다. 우리는 종종 인터넷 서비스에서 요청 패킷은 짧고 응답 패킷은 매우 많은 것을 볼 수 있다.
터널링의 경우는 로드밸랜서는 요청에 대해 실제 서버의 지정만을 담당하고 실제 서버가 직접 사용자에게 응답을 한다. 따라서 로드밸랜서는 많은 양의 요청을 처리할 수 있다. 100 개 이상의 실제 서버를 관리할 수 있다. 터널링에서는 로드밸랜서는 병목요인이 아니다. 터널링에서는 한 개의 로드밸랜서가 관리하는 서버 노드를 상당히 늘릴 수 있다. 비록 로드밸랜서가 100Mbps 전이 중 네트워크 인터페이스를 갖고 있어도 버츄얼서버의 최대 용량은 1 Gbps 이상이 가능하다.
IP 터널링 기능은 고성능 버츄얼서버 구성에 사용할 수 있다. IP 터널링 기능은 특히 고성능 프락시 서버의 생성에 적합하다. 프락시 서버는 대상을 가져오기 위해 직접 인터넷에 연결하고 이를 사용자에게 제공한다.
그러나 모든 서버는 IP 터널링 프로토콜을 설정해 주어야 한다. 나는 리눅스에서 IP 터널링을 테스트했다.
직접 라우팅 버츄얼서버
터널링에서와 같이 Linux Director는 직접 라우팅 방식도 연결의 절반만 처리한다. 그리고 반응 패킷은 사용자에게 별도의 네트워크 경로로 도달한다.. 이것은 버츄얼서버의 용량을 크게 증가 시킬 수 있다.
터널링에 비해 이 기법은 터널링상에 부하가 없다는 이점이 있다. 그러나 로드밸랜서와 서버의 인터페이스카드가 물리적으로 같은 세그먼트에 있어야 한다.