개발관련 도서/IT엔지니어를 위한 네트워크 입문

로드 밸런서(구성 방식, 동작 모드)

prden 2022. 3. 21. 10:51

서비스의 안정성이나 가용량을 높이기 위해 서비스를 이중화할 때는 서비스 자체적으로 HA 클러스터(High Availabilty Cluster)를 구성하기도 하지만 복잡한 고려 없이 이중화를 손쉽게 구현하도록 로드 밸런서가 많이 사용된다. 

로드 밸런서에서는 서비스를 위한 가상 IP를 통해 각 서버로 접근한다. 

 

1. 부하 분산이란?

*FWLB(Fire Wall Load Balancing)

서버에 대한 부하 분산(SLB, Server Load Balancing)뿐만 아니라 방화벽을 액티브-액티브로 구성하기 위해 로드 밸런서를 사용하기도 한다. 

방화벽은 자신을 통과한 패킷에 대해 세션을 관리하는 테이블을 갖고 있다. 방화벽을 통과하는 패킷에 대해서 방화벽 정책을 확인해 허용되는 정책이면서 그 정보를 세션 테이블에 기록한다. 응답 패킷은 방화벽 정책을 확인하는 것이 아니라 세션 테이블에서 해당 패킷을 먼저 조회한다. 세션 테이블에 응답 패킷이 없으면 요청한 적이 없는 패킷에 대한 응답으로 간주하고 해당 패킷을 폐기해버린다. 이런 경우는 출발지와 목적지간 경로가 두 개 이상 있어 비대칭 경로가 만들어질 때도 발생할 수 있다. 이런 비대칭 동작으로 인해 방화벽이 정상적으로 동작하지 않을 수 있다. 이 문제를 해결하고 이중화된 방화벽을 모두 사용하기 위해 FWLB가 사용된다. 한 번 방화벽을 지나갔던 세션이 다시 같은 방화벽을 거치도록 트래픽을 분산하는 것이다. FWLB를 사용하더라도 방화벽에 장애가 발생하는 경우를 대비하기 위해 방화벽에서 설정이 필요하다. 방화벽끼리 세션 테이블을 동기화하거나, 방화벽에서 첫 번째 패킷이 SYN이 아니어도 허용하는 기능을 사용해 방화벽의 장애로 인해 기존 세션 테이블에 없던 트래픽이 들어오더라도 처리할 수 있도록 설정해야 한다. 

 

2. 헬스 체크

 가. ICMP( VIP에 연결된 리얼 서버에 대해 ICMP(ping)로 헬스 체크를 수행하는 방법, 단순히 서버가 살아있는지 여부만 체크하므로 잘 사용하지 않는다. 

 

나. TCP 서비스 포트

 로드 밸런서에 설정된 서버의 서비스 포트를 확인하는 것으로 로드 밸런서에서 서버의 서비스 포트를 2000번으로 등록했으면 로드 밸런서에서 리얼 IP의 2000번 포트로 SYN을 보내고 해당 리얼 IP를 가진 서버로부터 SYN, ACK를 받으면 서버에 다시 ACK로 응답하고 FIN을 보내 헬스 체크를 종료한다. 

TCP 서비스 포트 : Half Open , 정상적인 3방향 핸드 셰이크를 거치게되기 전에 헬스 체크로 인한 부하를 줄이거나 정상적인 종료 방식보다 빨리 헬스 체크 세션을 끊기 위해 정상적인 3방향 핸드 셰이크와 4방향 핸드 셰이크가 아닌 TCP Half Open 방식을 사용하기도 한다. 

 

다. HTTP 상태코드를 통한 헬스체크

 

라. 콘텐츠 확인(문자열 확인)

 

바. 헬스체크 주기와 타이머 : 헬스 체크 주를 볼 때는 응답시간, 시도횟수, 타임아웃 등 다양한 타이머를 고려해야한다. 

 

3. 부하 분산 알고리즘

로드 밸런서가 리얼 서버로 부하를 분산할 때, 로드 밸런서에서는 사전에 설정한 분산 알고리즘을 통해 부하 분산이 이루어진다.  

 가. 라운드 로빈 : 특별한 규칙없이 현재 구성된 장비에 순차적으로 돌아가면서 트래픽을 분산한다. 

 나. 최소 접속 방식 : 서버가 가진 세션 부하를 확인에 그것에 맞게 부하를 분산하는 방식이다.  로드 밸런서에서는 서비스 요청을 각 장비로 보내줄 때마다 세션 테이블이 생성되므로 각 장비에 연결된 현재 세션 수를 알수있다.

다. 해시 : 서버의 부하를 고려하지 않고 클라이언트가 같은 서버에 지속적으로 접근하도록 하기 위해 사용하는 부하분산방식이다. 

 

4. 로드 밸런서 구성방식

 가. 원암 구성 : 

  로드 밸런서가 중간 스위치 옆에 연결되는 구성이다.  부하 분산을 수행하는 트래피에 대해서만 로드밸런서를 경유하고 부하 분산을 수행하지 않는 트래픽은 로드 밸런서를 경유하지 않고 통신할 수 있다. 

 

 나. 인라인 구성 : 

 서버로 가는 경로 상에 로드 밸런서가 연결되는 구성이다. 부하 분산을 포함한 모든 트래픽이 로드 밸런서를 경유하는 구성이다. 

 

5. 로드 밸런서의 동작모드

가. 트랜스패런트(Transparent : TP) 또는 브릿지(Bridge) : 

 트랜스패런트 구성은 로드 밸런서가 OSI 2계층 스위치처럼 동작하는 구성이다. 즉, 로드 밸런서에서 서비스하기 위해 사용하는 VIP 주소와 실제 서버가 동일한 네트워크를 사용하는 구성이다. 

 

나. 라우티드(Routed):

라우티드 구성은 로드 밸런서가 라우팅 역할을 수행하는 모드이다. 즉, 사용자 방향과 서버 방향이 서로 다른 네트워크로 분리된 구성이다. 라우티드 모드는 보안 강화 목적으로 서버쪽 네트워크를 사설로 구성해 서버에 직접 접속하는 것을 막는 용도로 사용된다. 

 

다. DSR(Direct Server Return)

사용자의 요청이 로드 밸런서를 통해 서버로 유입된 후에 다시 로드 밸런서를 통하지 않고 서버가 사용자에게 직접 응답하는 모드이다. DSR모드는 다른 모드와 달리 서버에서도 추가 설정이 필요하다. 

사용자는 서비스 IP인 VIP로 서비스를 요청한다. 로드 밸런서로 들어온 서비스 요청 패킷은 앞에서 알아본 트랜스 패런트나 라우티드 방식의 경우, 목적지 IP 주소가 로드밸런서를 거치면서 실제 서버의 IP로 Destination NAT가 되고 응답할 때는 다시 VIP로 Source NAT를 수행한다. 하지만, DSR 모드에서는 서버에서 로드 밸런서를 거치지 않고 응답해야 하므로 응답할 때 로드 밸런서를 통한 출발지 IP를 변경하는 Source NAT를 수행할 수 없다. 

따라서 서버에서 1. 루프백 인터페이스 설정 2. 리눅스 커널 파라미터 수정(리눅스)/네트워크 설정변경(윈도)가 필요하다. 

 

P508 로드 밸런서 유의사항 ~