2022-09-15
로드 밸런서와 시스템 확장
로드 밸런서와 시스템 확장 방법에 대해 알아보자!
로드 밸런서
서비스 서버들을 주기적으로 헬스 체크해 정상 서버에 부하를 분산하고 비정상 서버가 정상으로 돌아올 때
해당 서버에 트래픽이 전송되도록 해주는 장비다.
VIP(Vitural IP)를 생성해 RIP(Real IP)이 바인딩 되고 요청을 전달한다.
서비스 종류에 따라 다른 VIP로 구성할 수 있으며 각 서버를 분산해 묶을 수 있다.
예를들어 http(80), https(443)을 10.10.10.1, 10.10.10.2 VIP 설정해 각 서버를 바인딩할 수 있다.
헬스 체크
서비스 서버 부하를 다양한 방법을 통해 주기적으로 정상, 비정상 서버를 확인한다.
헬스 체크 종류
- TCP 서비스 포트: 로드 밸런서에 설정된 서비스 포트를 확인하는 방법이다.
예로 80번일 경우RIP
에 80포트로 3-way handshake을 거친다. - TCP 서비스 포트(Half Open): 빠르게 헬스 체크 세션을 종료하기 위해 사용되는 방법이다.
3-way와 동일하지만 세션을 끊을 때 RST를 보내 세션을 끊는다. - HTTP 상태 코드: 서비스 포트는 정상적으로 열리지만 웹 서비스에 대한 응답이 비정상일 경우가 있다.
따라서 HTTP 상태 코드를 확인하기 위해 3-way를 거치고, HTTP를 요청해 정상적으로 응답하는지 여부를 확인한다. - 콘텐츠 확인: 서버로 콘텐츠를 요청하고 응답받은 내용을 확인해 정상적으로 응답했는지 확인하는 방법이다.
3-way를 거치고 HTTP 요청에 의한 콘텐츠를 응답받아 확인한다.
주기와 타이머
헬스 체크의 주요 사항
이며 다양한 타이머를 함께 고려해야 한다.
- 시도 횟수 (Retries): 헬스 체크 최대 실패 횟수를 의미한다. 성공 시 초기화 한다.
- 주기 (Interval): 서버로 헬스 체크 패킷을 보내는
주기
를 의미하며응답 시간
보다 크게 설정해야 한다. - 응답 시간 (Response): 패킷을 전송하고 응답을 기다리는 시간이다. 해당 시간까지 응답이 없으면 실패로 간주한다.
- 타임아웃 (Timeout): 헬스 체크 실패시 최대 대기 시간을 의미한다. 시간 내에 성공하지 못하면 해당 서버는 다운된다.
단적인 예로 주기 3초, 응답시간 1초, 시도 횟수 2회일 때 = 3 * 3 + 1 = 10초가 타임아웃시간이 된다.
- 서비스 다운 주기 (Dead Interval): 서비스 다운 시 헬스 체크 주기를 의미한다.
부하 분산 알고리즘
- 라운드 로빈 (Round Robin): 특별한 규칙 없이
순차적
으로 돌아가며 트래픽을 분산 방식이다. 모든 서버의 총 누적 세션 수가 같다. - 최소 접속 방식 (Least Connection): 로드 밸런서에는 세션 테이블에 각 서버의 세션 수를 알 수 있기 때문에
알맞게 부하를 분산
할 수 있다. 모든 서버의 누적 세션이 비슷하게 분산된다. - 해시 (Hash): 서버의 부하를 고려하지 않고 클라이언트가
같은 서버에 지속적으로 접속
하기 위해 사용되는 방식이다. 스티키 옵션을 주어 해시와 최소 접속 방식을 묶어 사용할 수 있다.
로드 밸런서 구성 방식
서버로 가는 모든 트래픽이 로드 밸런서를 경유하는지 하지 않아도 되는지에 따라 구분된다.
- 원암 구성:
로드 밸런서가 스위치 옆에 위치한 형태이며 부하 분산을 수행하는 트래픽만 로드 밸런서를 경유한다.
불필요한 트래픽이 경유하지 않음으로 로드 밸런서의 부하가 줄며 확장에 유리하다.
또한 로드 밸런서에 장애가 발생해도 일반적인 흐름에는 문제가 없으므로 서비스 장애를 예방할 수 있다. - 인라인 구성:
모든 트래픽이 로드 밸런서를 경유하며 구성이 직관적이다.
로드 밸런서의 부하가 높아지며 이에 따른 성능을 고려해야 한다.
시스템 확장과 축소
확장 방법
데이터 양, 동시접속자 부하, CPU 메모리 사용량이 늘어 하나의 서버로 운영이 불가능할 때 확장을 진행할 수 있다.
- 스케일 업:
기존 시스템에 하드웨어를 더이상 확장할 수 없는 경우 더 큰 용량의 시스템에 옮기는 방법이다.
확장의 한계가 존재하며 많은 비용이 발생하고 기존 시스템을 버리기 때문에 낭비가 발생한다. - 스케일 아웃:
동일한 용량의 시스템을 다수로 배치하여 병렬적으로 운영하는 방법이다.
분산을 위한 별도의 프로세스나 로드 밸런서가 필요하다.
축소 방법
- 스케일 다운: 기존 시스템 보다 작은 용량으로 옮기는 방법이다.
- 스케일 인: 여러 시스탬을 하나의 시스템으로 합하여 운영하는 방법이다.