1. 로드 밸런싱이란?
로드 밸런싱은 네트워크 및 서버 부하 분산을 위한 기술로, 여러 대상 서버 간에 트래픽을 균형있게 분배하여 가용성을 향상시키고 성능을 최적화한다. 로드 밸런서는 사용자 요청을 적절한 서버로 라우팅하고, 각 서버의 상태를 모니터링하여 장애 시에 트래픽을 다른 서버로 전환한다. 이는 웹 서비스, 애플리케이션 서버, 데이터베이스 서버 등 다양한 환경에서 활용된다.
2. 로드 밸런싱 방법
1) L4 Load Balancing
- L4 스위치는 전송 계층에서 동작하며, TCP 및 UDP 포트 수준에서 트래픽을 관리한다.
- L4 스위치는 IP 주소와 포트 번호를 기반으로 트래픽(서버부하)을 분산하고, 기본적인 로드 밸런싱 알고리즘(라운드 로빈, 가중치 등)을 제공한다.
- L4 스위치는 응용 계층의 내용을 고려하지 않고, 단순히 포트 레벨에서 트래픽을 분산하는 역할을 한다.
- 경우에 따라 L7 스위치와 함께 사용하여 응용 프로토콜 레벨에서 로드 밸런싱과 더 높은 수준의 트래픽 관리를 수행하기 위해 L4 스위치가 필요할 수 있다.
내가 이해한 예시>
L4 같은 경우에는 4Layer 계층에서 이용하기 때문에 동일한 어플리케이션 안에서의 트래픽 분산은 불가능하다. IP주소와 포트 번호를 기반으로 트래픽 분산을 실행함으로써 서버 부하를 방지한다. 예를 들면, IP주소 범위1(1~100)은 1번 서버, IP주소 범위2(101~200)는 2번 서버로 매핑하는 방식으로 동작한다.
2) L7 Load Balancing
- L7 스위치는 응용 계층에서 동작하며, HTTP, HTTPS, SMTP, FTP 등의 응용 프로토콜 수준에서 트래픽(서버부하)을 관리한다.
- L7 스위치는 심층 패킷 검사, URL 라우팅, HTTP 요청 수정, SSL 암호 해독 등과 같은 고급 기능을 제공하여 응용 프로토콜을 기반으로 트래픽을 분산하고 관리한다.
- 웹 어플리케이션에서 특정 경로 또는 쿠키를 기반으로 로드 밸런싱을 수행하거나, SSL 오프로딩을 수행하여 백엔드 서버 부하를 완화하는 경우 L7 스위치가 필요하다.
- L7 스위치는 응용 프로토콜의 내용에 따라 트래픽을 분산하므로 어플리케이션 수준의 트래픽 관리에 적합하다.
내가 이해한 예시>
L7 같은 경우에는 동일한 어플리케이션 내에서도 HTTP 헤더, URL 경로, 쿼리 매개변수 등을 이용한 트래픽 분산이 가능하다. 예를 들면, "개인 정보 수정" 페이지는 1번 서버로, "게시물 정보 확인" 페이지는 2번 서버로 매핑하는 방식으로 동작한다. 뿐만 아니라, IP주소와 포트번호를 이용해서 그 안에서도 추가로 트래픽 분산이 가능하다.
결론적으로, L7 스위치와 L4 스위치는 서로 보완적인 역할을 하며, 필요에 따라 함께 사용되기도 한다. 환경과 요구 사항을 고려하여 어떤 스위치를 선택할지 결정해야 한다.
3. 기초 지식
1) L2 스위치
- L2 스위치는 OSI 모델의 데이터 링크 계층 (Layer 2)에서 동작하는 장비이다.
- 주로 이더넷 프레임을 기반으로 스위치되며, 이더넷 프레임의 MAC (Media Access Control) 주소를 사용하여 트래픽을 관리하고 분배한다.
- L2 스위치는 물리적인 MAC 주소를 기반으로 스위칭을 수행하며, 주로 로컬 네트워크 (LAN)에서 호스트 간의 통신을 담당한다.
- 스위치된 패킷은 목적지 MAC 주소를 가진 호스트로 전송된다.
- 주로 이더넷 스위치로 알려져 있으며, 스위치된 포트 간에 충돌 없이 데이터를 전달하고 네트워크 세그먼트를 분리하는 역할을 한다.
2) L3 스위치
- L3 스위치는 OSI 모델의 네트워크 계층 (Layer 3)에서 동작하는 장비이다.
- IP 주소를 사용하여 트래픽을 관리하고 라우팅한다.
- L3 스위치는 다른 네트워크 간에 데이터를 전달하고 서브넷을 연결하는 역할을 한다.
- 라우팅 테이블을 사용하여 패킷을 최적의 경로로 라우팅하며, 다양한 라우팅 프로토콜 (예: OSPF, BGP)을 지원한다.
- 주로 중간 규모에서 대규모의 네트워크에서 사용되며, 서브넷 간의 통신 및 다른 네트워크와의 연결을 제공한다.
요약하면, L2 스위치는 데이터 링크 계층에서 작동하며 MAC 주소를 사용하여 스위칭하고, 주로 로컬 네트워크에서 호스트 간 통신을 관리한다. 반면에 L3 스위치는 네트워크 계층에서 작동하며 IP 주소를 사용하여 라우팅하고, 다양한 네트워크 간의 통신과 라우팅을 관리한다.
3) 데이터 흐름 이해
상위 계층을 활용할 수 있는 장비들은 모두 하위 계층을 이해하고 활용할 수 있어야 한다. 예를 들어, L4 스위치가 L3 IP 패킷과 L2 이더넷 프레임을 이해하지 못한다면, 직결된 장비에 데이터를 전달할 수 없게 된다. 때문에 상위 계층에 있는 장비들은 하위 계층에서 사용되는 기능을 이해하고 있어야 한다. 즉, 하위 계층의 장비로 호환하여 대체 사용이 가능하다는 뜻이다. 허나, 고가이기 때문에 대체 사용하는 경우는 흔치 않다.
💡 특정 HTTP 요청이 있다고 가정해보자. 일반적인 경우, TCP 통신을 하기 때문에 송신자와 수신자가 신뢰 관계를 형성하게 된다. 이 후, 서버의 공용 IP주소를 이용하여 데이터를 요청을 한다. 이에 서버에서는 응용 계층에서 요청을 받아들인 후, 관련 데이터를 표현 계층에서 인코딩이나 압축 등 데이터 표현하고, 세션 정보를 확인하여 필요한 데이터를 함께 하위 계층으로 전달한다. 전송 계층에서는 상위 계층에서 전달 받은 데이터를 네트워크 계층에서 이해할 수 있는 형태로 세그먼트화(Header + Data)하여 네트워크 계층으로 데이터를 전달한다. 네트워크 계층에서는 세크먼트를 분해한 후, Header 정보는 버리고 Data를 가지고, 데이터 링크 계층에서 이해할 수 있는 형태인 패킷화(Header + Data)한다. 그리고 최적의 경로를 찾는 라우팅 작업과 Header에 담긴 목적지 IP주소를 이용하여 캐스트 방법을 결정하고, 결정된 경로와 캐스트 방법으로 데이터를 전달한다. 그리고, 일반적으로 사설망을 사용하기 때문에, NAT을 이용하여 공용IP주소를 사설IP주소로 변환하고, ARP를 통해 MAC주소를 매핑하는 작업을 수행한다. 그렇게 데이터 링크 계층으로 데이터가 전달되고, 데이터 링크 계층에서는 알맞은 MAC주소로 데이터를 물리계층으로 전달한다. 물리계층에서는 컴퓨터에서 읽을 수 있도록 데이터를 이진 형태로 변환한다. 이후 다시 1→7계층으로 데이터를 이동시키며 디코딩화하여 사용자가 읽을 수 있는 형태의 데이터로 가공한다. 위의 설명은 OSI 계층 관점에서 바라본 데이터 이동 흐름이며, 트래픽에 따라 로드 밸런싱 작업이 필요할 수도 있다. 로드 밸런싱이란, 1개 서버로 동시에 많은 요청과 응답이 있을 경우, 트래픽 문제로 서버 과부하가 발생될 수 있기 때문에 이를 사전에 방지하고자 트래픽을 분산시키는 작업을 의미한다. 로드 밸런싱은 L4 Layer / L7 Layer 수준에서 이루어진다. L4 Layer에서는 IP 주소와 Port 번호를 이용하여 트래픽을 분산시킨다. 예를 들면, IP 주소 범위를 지정하여 1~100 까지는 1번 서버로, 101~200 까지는 2번 서버로 매핑시킴으로써 서버 과부하를 해결할 수 있다. L7 Layer에서는 URL 주소, 파라미터, HTTP 헤더 정보 등을 이용하여 트래픽 분산이 가능하다. 뿐만 아니라, L4 Layer 수준에서도 트래픽 분산이 가능하다. 예를 들면, 동일한 홈페이지 내에서 “게시판”과 관련된 데이터 요청은 1번 서버로, “결재”와 관련된 데이터 요청은 2번 서버로 매핑시킴으로써 서버 과부하를 해결할 수 있다. |
4. 세션 관리
로드 밸런싱할 경우, 서버를 분산시켜 관리하기 때문에 세션 관리 상에 문제가 발생될 수 있다. 아래의 방법으로 세션을 관리함으로써, 세션 관리 상의 문제를 예방할 수 있다.
1) 세션 클러스터링
세션 클러스터링은 로드 밸런싱 환경에서 세션 관리를 개선하고 세션 데이터를 여러 서버 간에 동기화하는 방법이다. 이것은 웹 애플리케이션에서 로드 밸런서를 사용하여 트래픽을 여러 서버로 분산하는 경우에 사용된다. 세션 클러스터링은 모든 서버가 동일한 세션 데이터를 가지도록 함으로써 사용자 경험을 향상시키고 데이터 일관성을 유지한다.
2) 캐시 서버 활용
로드 밸런싱 과정 중 캐시 서버는 세션 관리 및 성능 최적화를 위해 사용되는 중요한 구성 요소이다. 캐시 서버는 세션 데이터, 데이터베이스 쿼리 결과, 웹 페이지 내용 또는 기타 자주 액세스되는 데이터를 메모리에 저장하고 제공하여 웹 애플리케이션의 성능을 향상시킨다. 일반적으로 Redis, Memcached, Apache Kafka와 같은 툴 및 기술을 사용하여 캐시 서버를 구현할 수 있다.
3) 세션 동기화 토큰(Session Synchronization Token)
로드 밸런싱 환경에서 세션 관리와 데이터 일관성을 유지하기 위한 메커니즘이다. 이 토큰은 여러 서버 간에 세션 데이터를 동기화하고, 동일한 세션 데이터를 사용하도록 보장한다.
4) Sticky 세션 (세션 어피니티)
Sticky 세션 또는 세션 어피니티(Session Affinity)은 로드 밸런싱 환경에서 사용자의 요청을 항상 동일한 서버로 보내는 메커니즘을 의미한다. 이것은 사용자의 웹 브라우저가 한 번 연결된 서버에 계속 연결되도록 하는 방식으로 작동한다. Sticky 세션을 사용하면 로드 밸런서가 요청을 동일한 서버로 보내기 때문에 부하가 분산되지 않을 수 있다. 따라서 서버 간의 부하 분산을 위해 다른 메커니즘과 함께 사용해야 한다.
5) 무상태(Stateless)
로드 밸런싱 과정 중 "무상태(Stateless)"는 웹 애플리케이션 설계 원칙 중 하나로, 무상태 웹 애플리케이션은 사용자의 이전 요청과 상태 정보를 기억하지 않고, 각 요청을 독립적으로 처리한다. 이것은 웹 애플리케이션의 간단한 설계와 확장성을 가질 수 있도록 하는 중요한 개념이다.
무상태 웹 애플리케이션은 각 HTTP 요청이 서버로 도착할 때, 이전 요청과 상태 정보를 기억하지 않는 원칙을 따른다. 이것은 각 요청이 독립적으로 처리되며, 사용자 상태 정보를 서버에 유지하지 않는다는 것을 의미한다. 그러나, 일부 애플리케이션에서는 상태 정보 유지가 필요할 수 있다. 예를 들어, 사용자 로그인 상태, 장바구니 내역 등은 상태 정보를 유지해야 하는 경우가 있다. 이러한 경우에는 세션 관리나 쿠키를 사용하여 상태 정보를 처리해야 한다.
'네트워크' 카테고리의 다른 글
OSI 7 계층 (Open Systems Interconnection 7 Layer) (1) | 2023.11.13 |
---|