[주제] 서버 이중화 구조와 로드 밸런싱(Load Balancing)
지난 기술칼럼들을 통해 웹 브라우저가 웹 서버와 통신하는 과정 및 기본 구조 등을 알아보았습니다.
이번 기술칼럼에서는 기본 웹 서버 구조가 어떻게 심화되어 대용량 트래픽을 감당할 수 있는지 살펴보겠습니다. (이중화, 로드밸런싱 등)
1. 서버 이중화 및 로드 밸런싱
서버를 이중화하는 목적은 장애 발생 시 빠른 서비스 재개를 진행하여, 오류가 발생하더라도 사용자가 인지하지 못하도록 하기 위함입니다.
또한, 클라이언트가 한두명인 경우에는 서버가 여유롭게 사용자가 원하는 결과를 응답해줄 수 있지만,
만약 클라이언트가 수천명이 넘어간다면, 서버는 모든 요청자에게 응답을 해주려고 노력하더라도 결국 부하로 인해 동작을 멈추게 될 수도 있습니다.
이러한 문제를 해결하기 위해 아래와 같은 조치를 취할 수 있습니다.
1) Scale-up
하드웨어 성능을 올려 Server가 더 빠르게 동작하게 하는 방법
2) Scale-out
Server를 증설하여, 여러 대의 Server가 나눠서 일을 하는 방법
서버를 한 대 추가하는 비용이 하드웨어 향상보다 적게 들고, 여러 대의 서버로 운영할 경우, 무중단 서비스를 제공할 수 있는 장점이 있습니다.
è 이렇게 여러 대의 서버에 균등하게 트래픽을 분산시켜주는 역할을 수행하는 것을 로드 밸런서(Load Balancer)라고 합니다.
2. 서버 이중화 구조
1) Active-Active
- 부하분산을 목적으로 활용합니다.
- L4 스위치 같은 하드웨어 장비가 로드 밸런서 역할을 하며, 받은 트래픽을 정해진 기준에 따라 서버 2대가 나눠서 처리할 수 있도록 보내줍니다.
이를 로드 밸런싱(Load Balancing)이라고 합니다.
2) Active-Standby
- Active 서버에서 장애 발생 시, 이를 대신하여 Standby서버로 페일오버되어 동작합니다.
※ 페일오버(failover) : 장애 초지 기능으로, 서버, 시스템, 네트워크 등에서 이상이 생겼을 때 예비시스템으로 자동 전환되는 기능입니다.
운영되고 있는 시스템은 액티브(Active) 서버, 같은 세팅으로 구성된 대기하는 시스템은 패시브(Passive) 서버 or 스탠바이(Stand by) 서버라고 하는데,
액티브에 문제가 발생하면 스탠바이 시스템이 액티브 상대로 변경되면서 서비스를 이어서 운영하게 됩니다.
3. 로드 밸런서가 동작하는 방법
사용자가 인터넷상에서 서비스에 접속하면, 앞단의 네트워크 장비(Load Balancer)가 이 이벤트를 받아서
트래픽 상황에 따라 1, 2, 3번 서버 중 어떤 서버에 접속시킬지 판단하여 그 서비스에 요청을 보내고 응답하도록 합니다.
아래 이미지를 기반으로 상세한 내용을 더 정리해보겠습니다.
① 사용자가 목적지 IP주소인 로드밸런서로 서비스를 요청합니다.
② 로드밸런서는 NAT기술을 이용하여 목적지 IP주소를 실제 서버 IP주소로 변환하고, 실제 서버로 트래픽을 요청합니다.
※ NAT(Network Address Translation) : IP주소를 변환해주는 기능입니다.
예를 들어, 내부 네트워크에서 사용하던 사설 IP주소를 로드밸런서 외부의 공인 IP주소로 변경해줍니다. (반대로도 가능)
이렇게 하면 여러 개의 호스트가 하나의 공인 IP 주소를 통해 접속할 수 있고, 부족한 공인 IP주소를 효율적으로 사용할 수 있고,
내부 네트워크에서 사용하는 IP 주소와 외부에 드러나는 주소를 다르게 유지할 수 있습니다.
③ 서버가 로드 밸런서로부터 받은 요청에 대한 응답을 전달합니다.
④ 로드 밸런서는 NAT 기술을 이용하여 출발지(실 서버) IP주소를 로드 밸런서의 가상 IP주소로 변환하고, 사용자에게 전달하며 통신이 완료됩니다.
4. 로드 밸런서가 서버를 선택하는 방식 (알고리즘 종류)
로드 밸런서가 서버로 요청을 넘겨줄 때, 이중화 혹은 다중화 되어있는 여러 개의 서버들 중 라우팅 알고리즘을 사용해 요청을 넘겨줄 서버를 결정합니다.
여러가지 방법 중, 가장 많이 사용되는 Round Robin(라운드 로빈), Least Connections(최소 연결) 방식을 알아보겠습니다.
1) Round Robin(라운드 로빈) : 로드 밸런서가 들어오는 요청을 각 서버에 번갈아가며 보냅니다.
서버가 3개 있다고 가정했을 때, 로드 밸런서는 요청 1을 서버 1로, 요청 2를 서버 2로, 요청 3을 서버 3으로 보낸 뒤 순환 루프를 시작하고,
따라서 요청 4는 다시 서버 1에서 처리하는 방식으로 계속 진행됩니다.
→ 여러 대의 서버가 동일한 스펙이고, 서버와의 세션이 오래 지속되지 않는 경우에 적합한 방식입니다.
2) Least Connections(최소 연결) : 로드 밸런서가 각 서버의 현재 연결 수를 추적합니다.
요청이 들어오면 활성 연결이 가장 적은 서버, 즉 현재 연결 수가 가장 적은 서버로 요청을 보냅니다.
동적인 분산 알고리즘으로 각 서버에 대한 현재 연결 수를 카운트하여, 서버 부하를 분산시킬 수 있습니다.
→ 세션이 길어지거나, 서버에 분배된 트래픽들이 일정하지 않은 경우에 적합합니다.
이 외에도 가중 라운드로빈 방식, IP해시 방식, 최소 응답시간 방식 등 많은 방법들이 있으며, 서버 및 서비스 환경에 따라 적합한 방식을 찾는 것이 중요합니다.
'일 > 개발, IT정보' 카테고리의 다른 글
DB 이상현상, 정규화 과정 (3) | 2024.10.14 |
---|---|
대용량 DB 관리하는 방법 및 개념 (0) | 2024.07.28 |
Web ↔ WAS 구조 및 동작 과정 (0) | 2024.07.26 |
도메인(URL) 입력 시 IP와 통신하는 과정 / 개념 (0) | 2024.07.22 |
WAS DB OS 메모리 Min/Max 동일한 값으로 설정 시 (0) | 2024.07.20 |