DevOps

다중화(Redundancy) - 3 웹 서버의 다중화 (IPVS를 이용한 LB)

게임이 더 좋아 2023. 12. 21. 22:45
반응형
728x170

LB와 DNS 라운드로빈 차이

LB

→ 하나의 IP 주소에 대해 복수의 서버로 분산

 

 

DNS 라운드로빈

→ 웹 서버마다 다른 글로벌 주소를 할당해야했음

→ 웹 서버 측면에서의 다중화 구성이 필요

 

-> LB가 나온 배경

 

 

도입 장벽을 낮추기 위한 SaaS 상품이 많지만 유지 비용이 들어감

직접 OSS로 구축하는 방법도 존재

AWS - ELB를 많이 써봤다면 어떤 것인지 짐작이 갈 것임

 

예를 들면 아래와 같은 IPVS를 이용할 수 있음


IPVS

Linux에서는 특별한 소프트웨어 없이 라우터로 이용 가능

방화벽으로서도 충분히 운용가능한 패킷 필터링 기능이 있음

IPVS(IP Virtual Server) 라는 부하분산 기능을 제공하는 모듈도 포함되어 있음

 

 

LB의 종류

크게 L4, L7로 나눔

 

L4

→ IP 주소 또는 포트 번호에 따라 서버 지정 가능

 

L7

→ 클라이언트로 요청된 URL에 따라 분산대상 서버 지정 가능

 

*Linux에서 사용하는 IPVS는 L4 스위치의 역할을 함

 


스케줄링 알고리즘(부하분산)

 

 

*가중치는 각 서버간의 성능이 다를 때 적절하게 섞어쓸 수 있음

 

 

IPVS사용

아래 소프트웨어를 사용하여 가능

ipvsadm

keepalived

 

 

L4 스위치와 L7 스위치

 

 

L4 에서는 클라이언트가 통신하는 곳은 리얼 서버

 

L7 스위치에서는 로드밸런서와 클라이언트 TCP 세션을 전개함

→ 즉, L7에서는 2개의 TCP 세션이 전개됨

 

 

 

L4 스위치의 NAT 구성과 DSR 구성

 

 

L4 스위치의 구성

NAT - Network Address Translation

DSR - Direct Server Return

 

**응답을 클라이언트에 직접 하느냐 LB에서 Translation을 하느냐의 차이

 

 

NAT의 경우

L4 스위치는 클라이언트로부터 도착한 패킷의 dest 주소를 변경해서 리얼 서버로 전송한다.

 

DSR의 경우

L4 스위치는 주소 변경하지 않는다.

→ 주소가 변경되지 않으므로 리얼서버가 응답을 직접 클라이언트에게 할 수 있음

 

 

로드밸런서가 병목이 되는 것을 걱정하거나 높은 트래픽에 견디는 부하 분산이 필요하다면

DSR로 구성하는 것이 좋음

 

다만 DSR 구성에서는 가상서버를 향한 패킷이 리얼서버에 그대로 도달하므로 리얼서버가 글로벌 주소를 처리할 수 있어야 함

 

→ 즉, NAT 구성으로 동작하고 있는 시스템에 대해 로드밸런서의 설정만 DSR로 변경한다고 해도 부하 분산이 되지 않음

 

NAT 구성에서는 로드밸런서가 클라이언트로부터 도착한 패킷의 목적지 주소를 변경하여 리얼 서버로 전송함
-> 따라서 리얼 서버는 클라이언트로부터 도착한 패킷의 목적지 주소 자신의 주소가 아니라는 것을 알고 있음

DSR 구성에서는 로드밸런서가 패킷의 목적지 주소를 변경하지 않음
-> 따라서 리얼 서버는 클라이언트로부터 도착한 패킷의 목적지 주소가 자신의 주소라고 생각함

 

 

리얼 서버가 클라이언트로부터 도착한 패킷의 목적지 주소가 자신의 주소가 아니라는 것을 인식할 수 있도록 해야 함

 

 

아래가 이를 위한 방법임

  1. 가장 손쉬운 설정 방법은 리얼 서버의 루프백 인터페이스(loopback interface)에 가상서버의 IP 주소를 할당하는 것
  2. 다른 방법으로는 netfilter 기능을 이용하여 가상 서버를 향한 패킷을 리얼 서버 자신을 향한 것처럼 목적지 주소를 변경하는 DNAT( 목적지 NAT) 방법이 있음

 

 

동일 서브넷인 서버를 부하분산할 경우 주의사항

지금까지는 인터넷 상에 공개할 웹 서버의 부하분산을 생각함

 

LB는 그것뿐만 아니라 서버들 간의 통신에서도 부하분산을 할 수 있다

→ 내부 서버(서브넷)

 

 

 

하지만 동일 서브넷인 서버에 대해서는 NAT 구성을 사용할 수 없음

 

NAT 구성에서는 LB가 목적지 IP 주소를 변경하기 때문에 메일 서버가 받는 패킷은

  • 수신측 주소 192.168.0.151
  • 송신측 주소 192.168.0.1

즉, 메일서버가 반환하는 응답 패킷의 송신측은 192.168.0.151이 되고 수신측은 192.168.0.1이 된다.

여기서 수신측이 192.168.0.1은 동일 서브넷인 IP 주소이므로 로드밸런서를 경유하지 않고 웹 서버로 직접 송신된다.

결국 NAT에 의해 변경된 IP 주소를 원래대로 돌릴 수 없으므로 정상적인 통신이 불가능

 

이와 같은 내부 통신의 경우에는 DSR 방식이 좋을 것임

DSR의 경우 로드밸런서는 IP 주소를 변경하지 않으므로 메일 서버가 직접 웹 서버에 응답을 반환해도 문제가 없음

반응형
그리드형

'DevOps' 카테고리의 다른 글

다중화(Redundancy) - 2. 웹서버 다중화(LB 없이)  (0) 2023.12.20
다중화(Redundancy) - 1. 다중화 개념  (1) 2023.12.20
Redis 백업  (1) 2023.07.08
Logging Application 비교  (0) 2023.01.21
SVN_Command  (0) 2023.01.21