여러 대의 서버로 서비스하기

이선재·2022년 12월 26일
1

Topics

1. 스위치와 계층별 스위치

전송 중 패킷의 충돌이 일어나지 않도록 패킷 속의 목적지 주소를 가지고 지정한 포트로 데이터를 전달하는 장비

🔳 L2 스위치
Layer 2의 데이터 링크 계층에서 사용되는 스위치로 이더넷 프레임의 MAC 주소를 가지고 해당하는 포트로 이더넷 프레임을 송출하는 장비이다. L2 스위치는 포트에 대응하는 MAC 주소 테이블을 가지고 있기 때문에 테이블을 사용해 통신을 한다. 테이블에 등록이 되어있지 않다면 플러딩(Flooding)을 통해 테이블을 채워 넣는다.


VLAN 기능 - 스위치를 사용하여 복수개의 독립적인 sub-lan을 생성하는 것

VLAN을 사용하면 불필요한 트래픽을 방지할 수 있다. (독립적인 공간 속 브로드 케스트 진행 등..)

🔳 L3 스위치
Layer 3의 네트워크 계층에서 사용되는 스위치로 IP 주소를 가지고 통신을 하며 L2 스위치에 라우팅 기능이 포함된 스위치라고 볼 수 있다. 라우터의 기능이 포함되어 있는 스위치이므로 VLAN 간의 패킷 통신을 가능하게 해준다. 라우팅 테이블을 참조하여 통신을 진행하며, 통신 시 IP 주소에 해당하는 MAC 주소를 가져오지 못하게 되면 ARP 프로토콜을 사용하여 MAC 주소를 탐색, 통신을 진행한다.

<ARP 프로토콜>
IP 주소를 가지고 MAC 주소를 알아내는 3계층 프로토콜이다.

해당 IP의 MAC 주소를 알아내기 위해 호스트가 Opcode(Operation Code)를 1로 설정 + 목적지 IP 주소를 스위치에 요청하게 되면 스위치에서 브로드케스트를 통해 목적지를 탐색 Opcode를 2로 설정 + MAC 주소를 전달받는 식으로 동작한다.

이를 통한 자원 낭비를 줄이기 위해 ARP 테이블을 딕셔너리 형태로 작성하며 이때는 Cache(휘발성) 데이터로 저장이 된다.

🔳 L4 스위치
TCP/IP 프로토콜을 기반으로 작동하며 여러대의 서버를 1대 처럼 묶어 사용할 수 있는 부하 분산(Load Balancing) 기능을 제공한다. 프로토콜을 기반으로 하기 때문에 3-way-handshake, 4-way-handshake를 클라이언트, 서버, 스위치도 함께 진행한다.

L4 스위치는 로드벨런싱 기술도 있지만 서버를 NAT 설정하여 서버 보안을 올리고 IP 주소 소모를 줄일 수 있다는 장점이 있다.

대규모 웹서버를 구축할 시에는 원암 DSR 구성을 사용하면 스위치 부하를 줄일 수 있다.

DSR(Direct Server Resturn) 구성은 요청은 스위치로 그에 대한 응답은 스위치를 거치지않고 돌아가는 구성이다. 이때 요청과 응답에 대한 IP 값이 다르므로 클라이언트는 해당 패킷을 폐기시킬 수 있다. 그렇기 때문에 서버에 L4의 VIP를 설정해주어야 한다. (loopback ip 및 스위치의 NIC 설정)

🔳 L7 스위치
L4 스위치와 동작은 동일하나 IP 주소 및 TCP/UDP 포트 정보만 보고 스위칭을 하는 것이 아니라 Payload-패킷 내용까지 확인하여 스위칭하는 스위치이다.

L7 스위치는 7계층의 HTTP의 URL, FTP 쿠키 정보 및 바이러스 패턴을 분석하여
보안에 더 유리하고 정교한 로드 밸런싱이 가능하다. 그렇기 때문에 보안 스위치라고도 불린다.

2. Load Balancer

로드밸런서는 서버에 트래픽(부하)을 분산시키는 장치다. 서버에 네트워크 또는 애플리케이션 트래픽이 쏠리지 않게 관리해준다. 로드벨런서는 동일한 애플리케이션이 구동되는 둘 이상의 서버를 묶어 사용자로부터 들어오는 요청을 중간에서 분산 처리한다.

로드밸런서는 서버 상태 체크(Health Check), HTTPS(=SSL) 지원 등이 있다. 즉, 연결된 서버 상태에 대한 모니터링과 HTTPS 설정이 가능하다.

+ps) 이러한 로드벨런서는 프록시의 개념과 매우 흡사한데 실제로 로드벨런서와 프록시는 서로 혼용되어 사용 가능한 용어라고 한다.

🔲 리스너
리스너(Listener)는 구성한 프로토콜(HTTP(S) 및 TCP/UDP) 및 포트(Port)로 서버 연결 요청을 확인하는 프로세스다. 로드벨런서를 통해 서버 접근 경로에 따라 라우팅 기능을 제공하는데 이때, 리스너에 미리 정의한 규칙에 따라 로드밸런서에 등록된 Target Group(대상 그룹)으로 요청을 라우팅하는 방법이 결정된다.

또한, 리스너는 에플리케이션이 비즈니스 로직에 집중할 수 있도록 리스너 프로토콜이 HTTPS인 경우 SSL 인증서 배포를 통한 암호화 및 복호화를 제공한다.

🔲 대상그룹
대상 그룹이란 로드밸런서가 로드밸런싱할 대상이 되는 그룹(하나 이상의 서버)으로 그룹별 설정을 세분화하여 적용이 가능하다.

리스너 규칙을 생성할 때 대상 그룹 및 조건을 지정하게된다. 규칙 조건이 충족되면 해당하는 대상 그룹으로 트래픽이 전달된다.

🔲 상태 검사
로드벨런서가 산하의 인스턴스들이 정상 작동을 하고있는지 확인을 할 때 사용된다. 상태검사는 GET 방식으로 읽어오며 /health 요청을 보냈을 시 그에 대한 응답코드가 200이라면 정상임을 확인할 수 있다.

또한, 미리 상태 검사를 설정하면 장애 발생 시 빠른 조치가 가능하다.

Checklist

1. Single Point of Failure는 어떤 개념일까요?
단일 장애 지점으로 서버 및 스위치 등이 이중화가 되지 않았을 때 장애가 생겨 시스템 전체가 다운되는 시스템 구성 요소를 말한다.
2. 여러 대의 서버로 서비스할 때의 장점은 무엇일까요? 또 주의해야 할 점은 무엇일까요?
사용자의 요청 및 대규모 트래픽이 들어왔을 때 원할한 응답이 가능하다.

<주의할 >
대규모 트래픽 - 분산을 위한 서버 및 네트워크 장비 다중화
전력 부족 및 정전 - UPS를 사용한 대비
장애 발생 시 빠른 복구를 위한 모니터링 시스템과 장비 이중화(Active/Stand-by)
3. AWS에서 제공하는 로드밸런서에는 어떤 종류가 있나요? 각각의 용도는 무엇일까요?
ALB(Application Load Balancer)
- L7 계층 특성을 이용하는 로드밸런서
- HTTP 헤더 정보를 활용하여 부하 분산
- SSL 인증서 탑재 가능

NLB(Network Load Balancer)
- L4 계층 특성을 이용하는 로드밸런서 
- TCP, UDP 요청을 받아 부하 분산
- ALB 보다 하위 부하 분산

CLB(Classic Load Balancer)
- HTTP, HTTPS, TCP 요청 트래픽 부하 분산
- 2022.8.15 서비스 중지
4. AWS 로드밸런서의 리스너 규칙을 이용해 어떤 일들을 할 수 있을까요?
path - URL을 기반의 요청을 라우팅하는 규칙 (ex- xxx.com/login.html)
host header - HTTP 프로토콜 호스트 헤더(서브 도메인) 기반으로 요청을 다른 경로로 라우팅 (ex- login.xxx.com)
HTTP header - 사용자 요청에 헤더 지정 값이 포함된 경우 라우팅
source IP - 특정 아이피에서 요청을 받은 경우 인스턴스 접속 가능 CIDR 형식으로 작성
query parameter - 특정 쿼리스트링 붙혀진 URL 요청을 라우팅 (ex- xxx.com?key=value)
HTTP method - HTTP 요청 메서드 조건을 기반으로 요청 라우팅 / POST 설정 -> POST 요청

이러한 룰(조건)에 맞게 되면 대상 그룹으로 전달
5. AWS의 여러 리전(서울, 도쿄 등)으로 로드밸런싱을 하는 것도 가능할까요?
교차 영역 로드밸런싱을 통해 가능하다.

교차영역로드밸런싱aws-docs

로드벨런싱 실습

출처 - https://siahn95.tistory.com/entry/Network%EC%9E%A5%EB%B9%84-L1-L2-L3-L4-L5-L6-L7-%EC%8A%A4%EC%9C%84%EC%B9%98%EB%9E%80

https://log4day.tistory.com/33

profile
지적을 환영하는 인프라 냠냠을 시도하는 취준생

0개의 댓글