본문 바로가기

사는 이야기/펌킨도서관

펌킨네트웍스 AEN 시리즈의 SLB 서비스 소개, 동작 원리 및 방식별 장단점

펌킨네트웍스 기술팀 김하늘 님이 작성한 AEN 시리즈의 SLB 서비스를 소개합니다.

SLB는 ‘Server Load Balance’의 약자로L4 스위치의 핵심 역할로 널리 쓰이는 기능입니다. 해당 서비스의 목적에 대하여 예시를 들자면 많은 이용자가 몰리는 서비스의 경우 1대의 서버 자원만으로는 서비스 제공엔 한계가 있습니다. 이때, 서버를2대 이상 확장하게 될 텐데 같은IP 주소, 같은 도메인 명의 동일한 서비스를 운영할 경우 여러 대의 서버를 하나의 서비스로 이용하기 위하여 각각의 서버로 분산시켜 접속할 수 있도록 할 수 있습니다.



각각 서버로 트래픽을 분산하는 방식은 기존 스위치의 라우팅 방식과 DNS 서버를 설정해도 가능하지만 Icmp 방식으로만 체크하기 때문에 서버의 서비스 포트가 다운된 상황에서도 이를 감지 못하고 분배를 지속하게 되어 서비스 장애를 일으킵니다.L4 스위치에서는 서비스 포트(tcp or udp) 및 출발지/목적지 IP의 체크 방식에 따라 헬스체크 패킷을 서버로 전송하여 분배 중인 서버의 상태를 체크한 뒤 서비스 가능 여부를 결정합니다.




펌킨네트웍스의 L4 스위치에서 수행되는 SLB 서비스의 동작 플로우를 그림으로 그려보면 다음과 같습니다.



먼저prefilter(부하분산을 하지 않도록 별도로 설정한 패킷)에 등록되지 않은 패킷 기준으로 부하분산이 필요한 서비스 패킷인지 확인한 뒤 서비스 필터에서 출발지/목적지/포트 등의 일정 조건을 만족하는지 대조 후에 새로 세션을 맺으며, 설정해 둔 스케줄링 방식과 라우팅 방식에 맞게 서버에 분배하게 됩니다.

이때 사용되는 스케줄링 방식이란 L4 스위치가 서버에 분배하는 일종의 우선순위인데, 방식은 크게 RR, LC, HS 3가지로 나뉩니다. 먼저RR은 ‘Round Robin’의 약자로L4 스위치에 등록된 모든 서버에 순차적으로 분배하는 방식으로서 서버들의 누적 세션이 같다는 특징이 있습니다.

LC는 ‘Last Connection’의 약자로 현재 맺고 있는 서비스 세션이 가장 적은 서버를 가려내어 우선 분배하는 방식입니다. HS는 ‘Hashing’의 약자로 서비스를 요청하는 출발지의 IP 정보를 Hash 함수를 이용하여 분배하는 방식으로서 출발지 IP를 이용하기 때문에 한번 서버와 연결되어 세션이 맺어지면
해당 서버가 다운되지 않는 이상 최초에 세션이 맺어진 서버로만 분배가 이루어지는 특징이 있습니다.

라우팅은 분배가 이뤄지는 패킷을 전송하는 방식을 결정하는 부분으로 NAT와DSR 방식으로 나누어집니다. 본 포스팅에서는 기본적으로NAT 방식에 대하여 서술하며, DSR 방식은 다음에 별도로 포스팅할 예정입니다.



NAT 방식은 ‘Network Address Transalaion’의 약자로 서비스 요청 패킷의 목적지 IP 주소를 변경하여 분배 트래픽을 전송하는 방식으로서 서버와 L4가 각자 다른 IP 대역에 존재해도 구성할 수 있어 기존에 사용 중인 토폴로지에도 추가 및 확장을 할 수 있다는 장점이 있습니다. 분류는IP 주소 변경 대상에 따라 DNAT와 FNAT로 나뉩니다. DNAT은 패킷의 목적지 IP 주소를 변경하는 방식으로 외부에서 서버의 Real IP를 알지 못하여 서버 보안 관리가 쉬운 장점이 있습니다. 다만 이 방식으로 설정할 시에는 L4 스위치 하단의 서버들 간의 부하분산 서비스는 불가능하며 일반 통신만 가능하다는 것을 구성할 때 고려해야 합니다.




FNAT은 DNAT 방식보다 패킷의 출발지, 목적지IP 주소를 모두 변경하는 방식으로서Proxy IP라는 중계 IP가 별도로 존재하여 서버들 간의 부하분산 서비스가 가능한 차이점이 있습니다. 이상으로 펌킨네트웍스 L4 스위치에서 제공하는 SLB 서비스의 기능 소개와 동작 원리에 대해 다뤄봤습니다. 펌킨 L4 스위치를 통한 SLB 서비스 시 얻을 수 있는SLB 서비스의 장점은 다음과 같습니다.

- 트래픽 분산으로 인한 서버에 가해지는 부하 감소
- 특정 서버에 장애가 생겨도 서버의 분산제외 조치로 서버 및 서비스 이중화 가능 (서버 간failover)
- 다양한 헬스체크로 서버의 서비스별 상태 체크 가능 ( icmp , tcp , udp , arp , link 상태 , contents )
- 가상 IP를 이용한 서비스로 서버의 실제IP주소를 보호 ( 외부 클라이언트에서 서버Real IP를 알지 못함 )