웹 서버를 두 대로 늘리려면?
- 로드 밸런싱!
- 고가용성!
-> L4 스위치
-> HAProxy
L4 스위치?
- 다나와 검색결과.. 아주 아주 매우 비싼 장비..
- IP 와 TCP/UDP 포트를 보고
적절한 서버
로 패킷을 전송하는 장비 - L4가 적절한 서버 고르는 방법 (로드 밸런싱 알고리즘)
Least Connection
- 현재 세션이 가장 적은쪽으로 세션을 보내줌 * 세션을 고려하기 때문에 약간의 메모리 자원이 소비된다.
- 거의 5:5로 분산이 가능하지만, 경로 보장이 되지 않음.
RoundRobin
* 서버로 세션을 순차적으로 맺어주는 방식. * 거의 5:5 분산이 가능하지만, 경로 보장이 되지 않음.Hash
* L4 자체 해싱 알고리즘을 사용하여 로드밸런싱 하는 기법. * 만일 해당 서버에 오류가 발생하거나, 서버 그룹에서 제외되거나, 추가된 경우 재할당된다. * 동일한 유저의 서비스 요청은 동일한 서버로 연결됨. * 경로가 보장되고, 메모리를 적게 사용하고 요구 절차가 간단. * 세션이 5:5로 분산되기 어렵기때문에 진정한 의미의 로드 밸런싱은 아님.Minmiss
* Hash와 유사한 방식을 사용 * 만일 해당 서버에 오류가 발생하거나, 서버 그룹에서 제외되거나, 추가된 경우, 해당 서버에 할당된 사용자에에 대해서만 재할당 작업을 한다.
RoundRobin & L7 health check
RoundRobin 방식으로 Load Balancing 적용
L7 health check 적용
- Layer 7 계층의 어플리케이션 응답을 체크하는 방식
- 1분마다 한번씩 지정 URI에 Request를 날려서 건강한 서버인지 체크
- 모니터 URI : GET /monitor/l7check
- 예상 상태코드 : 200
- 주기적으로 서버와 세션을 맺기 때문에 부하가 발생.
- But 어플리케이션 상태까지 체크가능하기 때문에 L4 health check 보다 더 서비스 안정성 보장!
DSR(Direct Server Return) 모드
- L4가 양방향 proxy일 경우, 모든 웹 서버가 받는 트래픽을 L4가 다 받아야 하는 문제가 생김 –>
DSR 모드!
- (기존) Client -> L4 -> Server -> L4 -> Client * (DSR) Client -> L4 -> Server -> Client * 응답이 로드밸런서를 경유하지 않고 직접 사용자에게 제공되도록 구성할 때 사용하는 방법 * 요청 패킷이 적은 케이스에 적합함
- 일반적인 웹 요청 * 파일 다운로드
- (기존) Client -> L4 -> Server -> L4 -> Client * (DSR) Client -> L4 -> Server -> Client * 응답이 로드밸런서를 경유하지 않고 직접 사용자에게 제공되도록 구성할 때 사용하는 방법 * 요청 패킷이 적은 케이스에 적합함
L4 적용
- 기존 서비스의 System Architecture
- L4를 적용한 System Architecture
- 최종 System Architecture