SLB(Server Load Balancing)

SLB란

Image

  • Server의 Load를 Balancing하는 기법
  • LB(Load Balancer)와 VIP(Virtual IP)로 구성
  • 클라이언트는 각각의 서버가 아닌 VIP를 대상으로 요청(하나의 서버와 통신한다고 생각)
  • LB의 기법
    • RR
    • Least Connection: 현재 connection의 개수가 가장 적은 서버를 선택
    • RTT: RTT이 가장 작은 서버를 선택
    • Priority: 우선순위가 높은 서버를 선택
  • Session의 처리: LB가 Session을 파악하기 위해서는 전달받은 패킷들이 동일한 클라이언트로부터 전송되었다는 사실을 파악해야 함.
    • 최소 L4 Layer Stack을 인지하고 있어야 함.
  • LB는 주기적으로 서버의 상태를 파악하여 장애가 난 서버를 파악해야 함.

Inline 기법

Image

  • 서버가 클라이언트로부터 받는 Inbound Packet과 서버가 클라이언트에게 전달하는 Outbound Packet 모두 LB를 거침.
    • LB에서 Inbound Packet은 실제 Server에 전달하기 위해 DNAT을 수행.
    • LB에서 Outbound Packet은 다시 SNAT을 통해 Src IP를 VIP로 변환
  • 패킷의 모니터링, 필터링에 유리하지만 LB에 큰 부하가 발생

DSR(Direct Server Routing) 기법

  • Inline 기법의 LB 부하를 줄일 수 있는 기법
  • 대부분의 서비스는 Inbound Pacekt보다 Outbound Packet의 양이 더 많음.
  • Outbound pacekt이 LB를 거치지 않고 바로 클라이언트에 전달하게 만들어 LB의 부하를 줄임.

L2DSR

Image

  • Inbound Packet의 Dst MAC 을 바꾸는 기법.
1. Inbound Packet의 MAC Address를 서버의 MAC Address로 변환한 후 실제 서버에게 전달
2. 실제 서버는 VIP 주소를 갖고 있는 Loopback 인터페이스를 통해 Src IP를 변환하여 클라이언트에게 바로 Outbound Packet을 전달
  • Inbound Packet의 MAC Address만 바꾸기 때문에 LB와 Server들은 반드시 같은 네트워크에 속해야 한다.

L3DSR

Image

  • Inbound Pacekt의 Dst IP를 바꾸는 기법.
  • 서버가 VIP의 정보를 알 수 있게 Inbound Packet의 DSCP Field를 변경하거나, Inbound Pacekt을 Tunneling한다.
1. LB는 Inbound Packet의 DST IP를 실제 Server IP로 변환한다
2. LB는 Packet의 DST IP 정보와 Mapping Table 정보를 바탕으로 DSCP 값도 변경한다.
3. 서버에게 패킷을 전달한다.
4. 패킷을 받은 서버는 Mapping Table과 Loopback Interface를 통해 Src IP를 변경하고 DSCP 값을 0으로 만들어 Client에게 바로 전달함.

GSLB(Global Server Load Balancing)

Image

  • GSLB는 DNS 기반의 로드 밸런싱 기법
  • 서비스를 제공하는 서버들이 여러 지역에 분리되어 완전히 다른 네트워크에서 운용될 때 이용하는 기법
  • GSLB + SLB 형태로 로드밸런싱을 수행할 수 있다.
  • 일반적인 DNS는 서버나 네트워크의 상태를 전혀 고려하지 않지만 GSLB는 아래와 같은 순으로 서버를 선택하기 때문에 지능형 DNS라고 이해하면 쉽다.
    • Server Health
    • SLB session / Network Capacity Threashold
    • Network Proximity
    • Geographic Proximity
    • SLB Connection Load
    • Site Preference
    • Least Selected
    • Static Load Balancing

출처

  • https://ssup2.github.io/theory_analysis/SLB