1.7 Load Balancer 기타가이드

1.7.1 Load Balancer IP(VIP)의 멀티포트 설정

□ 멀티포트(1 개 VIP 에 대해 여러 개의 서비스 포트 설정) 지원

KT Cloud 로드밸런서는 로드밸런서가 사용하는 하나의 가상 IP(VIP)에 동시에 여러 개의 서비스 포트를 지정할 수 있습니다.

위 그림은 멀티포트를 사용하는 적절한 예 중 하나로 실제 사용하시는 방식에 따라 다양한 형태로 구성될 수 있습니다. 고객이 서비스 영역 내에서 웹 서비스를 http와 https를 동시에 운영 하고자 할 때, 로드밸런서에 동일한 VIP를 사용하고 PORT 숫자(e.g. 80/443)를 구분하여 back-end 서버와 매핑할 수 있습니다. 같은 방식으로 전혀 다른 웹 서비스를 운영하면서 동일한 VIP를 사용하게 하고자 할 때에도 PORT 번호를 달리하여 사용할 수 있습니다. 주의사항은 로드밸런서 신규 생성 시 같은 VIP에 같은 PORT가 중복이 되어서는 안됩니다. 즉, VIP상위의 네트워크인 인터넷-로드밸런서 구간 사이에서는 IP와 PORT를 동시에 중복시킬 수 없습니다.

 

1.7.2 TCP OFFLOAD

□ TCP Multiplexing을 사용한 TCP Offload

 

KT Cloud 로드밸런서는 클라이언트의 전송 계층(TCP/IP)에 대한 요청을 back-end 서버를 대신하여 수행하며, 재사용 가능한 연결 유지 풀을 관리 합니다. 상세한 수행 과정은 다음과 같습니다.

  1. 새로운 클라이언트 요청이 들어오면 로드밸런서는 직접 클라이언트와 3-way handshake를 진행하고, 풀 안에서 사용 가능한 back-end 연결 정보가 있는지 확인합니다.
  2. back-end에 대한 연결(Connection)이 풀 안에서 사용 가능한 경우, 해당 연결을 통해 고객의 요청 처리요청을 보내고 처리 받은 데이터를 서버에서 받아 와 클라이언트에 전달합니다.
  3. 만약, 풀 안에 사용 가능한 연결이 존재하지 않는 경우, 로드밸런서가 back-end 서버와 새 연결을 생성합니다.
  4. 기존 연결을 재사용하거나 새로운 연결을 생성하고 해당 연결에 대한 요청 처리가 종료 되면, 해당 연결은 연결 유지 풀안에 일정 시간 유지되며 새로운 요청이 들어왔을 때 지속적으로 재사용합니다.

이와 같은 TCP Multiplexing 기술을 사용한 TCP Offload 수행과정은 클라이언트의 요청을 최적화 할 수 있습니다. 이 최적화는 TCP 연결을 진행하는 전송계층(Transport Layer)과 데이터를 교환하는 응용계층(Application Layer) 데이터에 대한 간섭을 최소화 할 수 있습니다.
기존 웹 서버가 처리해야 했던 전송 계층(TCP/IP)의 프로세스를 로드밸런서에 넘기게 되어(Offload) back-end 서버의 CPU 사용률을 현저히 낮추는 효과를 기대할 수 있습니다. 이 기능은 HTTP 로드밸런서 사용 시 자동으로 적용 되며, back-end 서버에서 OS 종류에 따라 아래의 환경 설정을 적용 하시기 바랍니다.

 

□ 웹 서버에 TCP Offload 설정하기
○ MS Windows Server (IIS 7.0)

[서버 관리자] 실행 - [역할] 선택 - [IIS(인터넷 정보 서비스 관리자)] 선택 - 적용하고자하는 사이트 영역 선택 - [홈] 대쉬보드 에서 [HTTP 응답헤더] 선택 - [일반적인 헤더 설정] 선택 - 'HTTP 연결 유지' 선택 후 저장

 

○ Linux OS(Apache 2.0)

/etc/apache2/apache2.conf 에서 다음과 같이 설정합니다. (configuration 파일 경로는 설치 방법에 따라 다소 차이가 있을 수 있습니다.)

         KeepAlive On

설정 파일 편집 후, 데몬을 재기동해야 변경 사항이 정상적으로 적용 됩니다.

아래 내용은 웹서버 성능 향상을 위한 설정값으로써 Apache에서 제공하는 권고하고 있는 사항입니다. 관련하여 더 자세한 사항은 아파치 성능 튜닝에 관한 공식 링크를 참고하시기 바랍니다.

- Apache 1.3 이전 버전의 경우

         StartServers 256

         MinSpareServers 50

         MaxSpareServers 100

         ServerLimit 8192

         MaxClients 5000

         MaxRequestsPerChild 4000

- Apache 2.x 이후 버전의 경우

         MaxRequestsPerChild 30

         KeepAliveTimeout 5

 

 

1.7.3 X-Forwarded Header

□ 개요

HTTP 헤더는 클라이언트의 요청에 대한 메타 정보를 포함하고 있습니다. HTTP 헤더에 대한 필드(Field) 종류는 표준/비표준을 혼용하여 사용할 수 있습니다.
클라이언트의 요청은 로드밸런서와 같은 프록시(Proxy)환경에서 클라이언트 IP(CIP)를 구분해야 하는 경우가 존재할 수 있습니다. 이에 대해 오랜 기간동안 클라이언트 IP정보를 담을 수 있는 Forwarded 헤더를 비표준으로 사용해 왔으며, 현재 사실상 표준(De Facto Standard)으로 인정 받고 있으며 RFC 7239로 정의 되어 있습니다.
KT Cloud 로드밸런서는 back-end 서버에 클라이언트의 요청을 전달할 때, 클라이언트의 요청을 받아 출발지 IP나 프로토콜에 대한 내용을 X-Fowarded 헤더로 저장하여 전달합니다.

□ X-Fowarded-For

X-Forwarded-For 헤더의 필드값 을 확인하여 클라이언트 IP를 확인할 수 있습니다. 로드밸런서는 클라우드 서버에서 최소의 세션으로 클라이언트의 요청에 응답할 수 있도록 세션을 새로 만들어 사용합니다. 서버에서 로드밸런서가 아닌 클라이언트의 IP를 확인할 수 있도록, 로드밸런서는 클라이언트 IP주소를 헤더에 저장하여 서버로 전달합니다. X-Forwarded-For 헤더의 형식은 다음과 같습니다.

         X-Forwarded-For: <client ip address>

 

□ X-Fowarded-Proto (지원예정)

X-Forwarded-Proto 헤더의 필드값 을 확인하여 클라이언트와 로드밸런서 간 사용된 프로토콜(HTTP 또는 HTTPS)를 확인할 수 있습니다. 이를 통해 최초 클라이언트가 요청한 프로토콜을 확인할 수 있습니다. 단, 로드밸런서의 타입을 SSL인증서를 로드밸런서에 직접 등록하는 HTTPS 방식으로 사용하시는 경우, back-end 서버에서는 X-Forwarded-Proto 헤더 안에 HTTP로 확인 됩니다. X-Forwarded-Proto 헤더 형식은 다음과 같습니다.

         X-Forwarded-Proto: <client origin protocol>