Ch1. 다중화/부하분산의 기본

1.1 다중화의 기본
다중화 : 장애가 발생해도 예비 운용장비
로 시스템의 기능을 계속할 수 있는 것
다중화의 본질
- 장애를 상정한다.
- 라우터 장애로 서비스가
정지
한다.
- 서버 장애로 서비스가
정지
한다.
- 예비 운용장비를 준비한다.
- 운용체제의 정비 ( 장애발생시 예비 운용장비로 교체한다. )
Cold Standby
- 장애가 발생하면 예비 운용장비를 연결하는 운용체제
- 현재 장비와 예비 장비의 설정을 동일하게 해두어야 한다. ( Active-Standby )
=> ColdStandby
Hot Standby
- 웹 서버의 경우 사이트 내용 갱신, 버전업 등의 이유로 중지되어 있는 예비 장비에 계속 수행하기 번거롭다.
- 웹 서버의 예비 운용장비는 항상 전원을 켜두고 네트워크에 연결해두는 것이 좋다.
=> Hot Standby
전원이 켜있는지 여부에 따라 Cold / Hot
-> Hot Standby는 즉시 교체가 가능하다.
장애 극복
- VIP ( Virtual IP)를 통해 운용 장비를 손쉽게 가르킬 수 있다.
장애검출 ( Health Check )
- ICMP 감시 ( Layer 3)
- ping
- 모든 사이트에서 지원하는 것이 아니다.
- 라우터가 확실히 패킷을 전송할 수 있는가를 검사
- 포트 감시 ( Layer 4)
- telnet
- TCP로 접속해 접속할 수 있는지 체크한다.
- 과부하 상태로 응답할 수 없거나 에러를 반환하는 것은 감지할 수 없다.
- 서비스 감시 ( Layer 4)
- curl
- 실제로 HTTP 요청을 보내 정상적인 응답이 돌아오는지를 체크한다.
- AWS LB에서 이렇게 체크함.
-> 서비스 감시를 어느단 까지 하는게 좋을까 ? ( NGINX, Django )
Active/Backup 구성 만들기
- ARP (Address Resolution Protocol )
- IP 주소를 지정해서 MAC 주소를 조회하기 위한 프로토콜이다.
- 한번 얻은 MAC주소는 ARP 테이블에 저장해서 일정시간 캐싱한다.
- 다른 서버에 같은 IP주소가 할당되더라도 ARP테이블이 갱신될 때까지는 그 서버와 통신할 수 없다.
ARP 테이블을 갱신하는 방법
- gratuitous ARP
- 내 IP주소와 MAC 주소는 이것이다. 라고 다른 서버에 통지하기 위함
1.2 웹 서버의 다중화
DNS 라운드로빈
-
DNS를 이용해 하나의 서비스에 여러 대의 서버를 분산시키는 방법
-
하나의 DNS에 여러 레코드를 등록시켜 처리한다.
-
모바일 사이트에서 문제가 되는 경우가 있음
- 캐리어 게이트웨이라는 프록시를 공유
- 캐싱되어서 문제가 발생
- TTL을 짧게 설정해서 개선 가능
결론은 로드밸런서
1.3 웹 서버의 다중화
IPVS를 이용한 로드밸런서
- LB는 하나의 IP주소에 대해 요청을 복수의 서버로 분산할 수 있다.
- 글로벌 주소를 절약할 수 있다.

L4 스위치
- TCP(4계층) 까지의 정보를 분석하므로 IP주소나 포트번호에 따라 분산 서버를 지정할 수 있다.
- naver.com
- 10.xxx.xxx.1
- 10.xxx.xxx.2
L7 스위치
- Application(7계층) 까지의 정보를 분석하므로 클라이언트로부터 요청된 URL에 따라 분산대상 서버를 지정할 수 있다.
- naver.com/api/1
- naver.com/api/1
- or header
IPVS
- 리눅스 커널에서 동작하는 소프트웨어 로드밸런서
- 백엔드(플랫폼)으로 Netfilter를 사용하며, TCP/UDP 요청을 처리할 수 있다.
ipvsadm
- 가상서버를 정의하고 리얼서버를 할당할 수 있다.
- 설정내용이나 접속상황을 확인할 수 있다.
keepalived
L4 vs L7

L4
- Client <-> Real Server
- 성능 추구
- NAT
- 패킷의 수신지 주소를 변경해 리얼서버로 전송
- DSR
- 응답 패킷의 IP주소를 되돌릴 필요가 없어 L4를 경유하지 않고 응답할 수 있다.
- 병목, 높은 트래픽에 견디기 위해서는 DSR 사용
L7
- Client <-> LB <-> Real Server
- 유연한 설정
동일 서브넷에서 NAT 구성을 사용할 수 없는 이유
NAT
- 출발지 또는 목적지 IP를 변경하여 트래픽을 다른 네트워크로 전달하는 역할을 한다.
- 동일 서브넷에서는 트래픽이 NAT 장비를 경유하지 않고 직접 통신하려고 한다.
- ARP로 인해 발생하며, NAT가 IP를 변환할 기회를 갖지 못한다.
ARP
- 동일 서브넷 내의 호스트는 직접 통신하기 위해 ARP를 이용해 MAC 주소를 확인
- NAT를 경유하려면 패킷이 NAT 장비로 전달되어야 하지만, 동일 서브넷에서는 NAT가 트래픽 흐름에 개입할 수 없음
- NAT 목적
- 다른 네트워크 간의 통신을 위해 설계되었다.
- 동일 서브넷은 이미 직접 통신이 가능하므로 NAT의 기본 목적과 맞지 않는다.
1.4 라우터 및 로드밸런서의 다중화
VRRP ( Virtaul Router Redundancy Protocol )
- 게이트웨이 이중화 구성
- 마스터 노드가 정상적으로 가동 중인지 여부를 체크해서, 만일 정지되었다면 백업 노드가 VIP를 인계받아서 장애를 극복한다.
헬스 체크
- 역으로 접근해 마스터 노드의 가동을 감시한다.
- 마스터 노드는 정기적으로 VRRP패킷을 멀티캐스팅 주소로 계속해서 송신한다. ( 정상 작동 중임을 광고 )
- LB가 여러대여도, 멀티캐스팅 주소는 동일한데, ID로 구분해서 사용한다.
가상 MAC 주소
- 가상 IP 주소와 별개로 가상 MAC 주소가 정의되어 있다.
- IP주소뿐 아니라 MAC 주소도 함께 인계되도록 설계되어 있다.
모든 장비의 ARP 테이블을 변경해주지 않기 위해