[네트워크] 로드 밸런서 (부하 분산기)
로드 밸런서
로드 밸런서(load balancer)란 서비스의 안전성을 위해 서버에 유입되는 트래픽을 여러 대의 서버로 분산시키는 부하 분산 역할을 수행하는 네트워크 장비이다. 로드 밸런서는 트래픽 부하 분산 뿐만 아니라 서비스의 고가용성을 위해 각 서버에 대한 헬스 체크를 수행하여 정상적인 상태의 서버에 대해서만 유입된 트래픽을 전달하는 역할을 수행한다.
로드 밸런서는 여러 대의 서버를 대표하는 가상 IP(virtual IP, VIP)를 갖는다. 클라이언트는 각 서버의 IP에 접근하는 대신 로드 밸런서의 VIP에 접근한다. 또한 로드 밸런서의 포트 번호는 실제 서버들의 포트 번호와 다르게 설정할 수도 있다.
로드 밸런서의 인라인(inline) 구성에서는 클라이언트의 요청 트래픽과 서버의 응답 트래픽 모두 로드 밸런서로 유입된다. 반면 원 암(one-arm) 구성에서는 클라이언트의 요청 트래픽과 서버의 응답 트래픽이 로드 밸런서로 유입되거나, 그렇지 않고 바로 클라이언트와 실제 서버 간 직접적인 통신이 가능하다. 인라인 구성에서는 모든 트래픽이 로드 밸런서를 거치므로 로드 밸런서의 부하가 높아진다는 단점이 있다.
원 암 구성에서 서버의 응답 트래픽이 로드 밸런서를 거치도록 하기 위해서는 요청 시에는 로드 밸런서 IP에서 실제 서버의 IP로의 목적지 NAT, 그리고 응답 시에는 실제 서버 IP에서 로드 밸런서 IP로의 도착지 NAT가 로드 밸런서에서 이루어져야 한다. 클라이언트의 입장에서 서비스를 요청한 IP 주소(로드 밸런서 IP)가 아닌 다른 IP(실제 서버 IP) 주소로부터 응답이 올 경우 정상적으로 처리되지 않으므로 출발지 NAT 과정이 필요하다.
로드 밸런서의 동작 모드는 다음과 같다.
- 트랜스패런트(transparent) 모드
- 라우티드(routed) 모드
- DSR(direct server return) 모드
트랜스패런트 모드에서는 로드 밸런서가 실제 서버들과 동일한 네트워크에 위치한다. 이때 원 암 구성에서는 정상적인 응답 트래픽을 위해 출발지 NAT가 필요하다.
라우티드 모드에서는 로드 밸런서를 기준으로 네트워크가 분리된다. 로드 밸런서는 클라이언트의 요청이 유입되는 네트워크와 서버로 요청을 보내는 네트워크를 라우팅으로 서로 연결하는 역할을 수행한다.
DSR 모드는 클라이언트의 요청 트래픽은 로드 밸런서를 거쳐 실제 서버로 전달되지만 서버의 응답 트래픽은 로드 밸런서를 거치지 않고 클라이언트에게 직접 전달되는 방식이다. DSR은 응답 시 로드 밸런서를 경유하지 않으므로 원 암 모드로 구성한다. 로드 밸런서는 클라이언트가 보내는 요청 트래픽에 대해서만 처리한다.
DSR 외에 다른 로드 밸런서의 동작 모드는 로드 밸런서의 설정만 필요하지만 DSR은 로드 밸런서 설정 외에 실제 서버에 추가 설정이 필요하다. DSR 모드에서는 서버 응답 시 로드 밸런서를 거치지 않으므로 출발지 NAT가 불가능하다. 출발지 NAT가 수행되지 않기 때문에 클라이언트 입장에서는 서비스를 요청했던 IP 주소(로드 밸런서의 VIP)가 아닌 실제 서버 IP로 응답을 받는다. 요청 했던 IP 주소와 응답을 해주는 IP 주소가 다르기 때문에 클라이언트는 비정상적인 응답으로 간주하고 패킷을 처리하지 않는다. 따라서 DSR 모드에서 로드 밸런서는 요청을 받은 후 목적지 IP 주소를 실제 서버 IP 주소로 변경하지 않고 VIP 주소 그대로 유지하고 목적지 MAC 주소만 실제 서버의 MAC 주소로 변경해 서버로 전송한다. 서버가 패킷을 수신할 때 목적지 IP 주소가 서버의 주소와 맞지 않으면 해당 패킷이 폐기되므로 루프백 인터페이스를 생성해 VIP 주소를 할당하는 것이 필요하다. 요청 트래픽이 들어오는 인터페이스에 설정한 IP가 아닌 루프백에 설정된 IP 주소이더라도 패킷을 수신할 수 있도록 서버에 루프팩 인터페이스를 설정한다.
DSR 모드의 실제 패킷 흐름은 다음과 같다.
- 사용자는 서비스 IP인 VIP 주소로 요청
- 로드 밸런서는 목적지 IP를 VIP 주소로 그대로 유지하고 목적지 서버의 MAC 주소만 변경해 실제 서버로 전송
- 루프백 인터페이스에 VIP와 동일한 IP 주소가 설정된 실제 서버는 목적지 IP가 루프백 IP와 동일한 경우에도 패킷을 수신
출발지 IP가 서버의 인터페이스 IP 주소가 아닌 루프백 인터페이스의 IP 주소, 즉 사용자가 요청했던 VIP 주소로 설정하여 패킷이 서버로 정상적으로 전송될 수 있도록 해야 한다. 이러한 이유로 인해 DSR 모드의 로드 밸런서 구성을 위해서는 실제 서버에 루프백 인터페이스 설정이 필요하다.
Comments