1. 안정적인 네트워크의 요건: 고가용성(High Availability)
직접 크고 작은 네트워크를 구성해보다 보니 단순히 어떤 기능을 가진 네트워크를 설계하는 것 이상으로 중요한 것이 '네트워크를 얼마나 안정적으로 유지하느냐'라는 것을 알게 되었다. 아무리 좋은 성능을 가진 기계여도 툭하면 다운되고, 데이터가 날아가는 핸드폰을 사용하지는 않는 것과 같다. 특히 금융 서비스(인터넷 뱅킹), 메신저 서비스(카카오x)과 같이 24/7운영*이 필수적인 서비스 또는 서버의 경우 더더욱 안정성이 중요하다고 볼 수 있다.
그렇다면 '안정적인 서비스'는 어떻게 수치화하여 구분할 수 있을까? 안정성을 의미하는 용어로는 가용성(availability)와 고가용성(High Availability)이 있다. 가용성은 컴퓨터 시스템이 특정 기능을 실제로 수행할 수 있는 시간의 비율을 의미한다. 정상적으로 이용 가능한 시간을 업 타임(uptime), 불가능한 시간을 다운 타임(downtime)으로 정의할 때, 가용성은 다음과 같은 수식으로 수치화할 수 있다.
이렇게 나온 결과값이 높다는 것은 가용성이 높다는 것과 같고, 즉, 안정적으로 대부분의 시간을 사용 가능하다는 말과 같다. 이를 고가용성(high availability)라고 한다. 일반적으로 고가용성을 유지하는, '안정적'인 시스템의 기준은 99.999%(five nine) 이상이다. 고가용성을 유지하기 위해서는 다운 타임을 줄여야 하는데, 이는 문제 자체가 생기지 않게 하는 것도 중요하지만, 핵심은 문제가 발생하더라도 시스템이 작동할 수 있게 하는 것이라는 걸 의미한다. 문제가 발생하더라도 기능할 수 있게 하는 것을 결함 감내(fault tolerance)라고 한다. 결함을 감내하는 시스템을 설계하는 방법으로는 대표적으로 이중화(redundancy), 로드 밸런싱(load balancing) 등이 있다.
*24/7 운영: 24시간 7일이라는 의미로 항상 운영되는 것
2. 고가용성을 유지하는 방법 1: 이중화(Redundancy)
이중화(Redundancy)란 단일 장애점을 이중화하는 것을 의미한다. 말이 조금 어려울 수 있는데, 단일 장애점(SPOF; Single Point Of Failure)이란, 문제가 생길 경우 시스템 전체가 중단될 수 있는 대상을 의미한다. 풀어말하면, 문제 생겼을 때 시스템 전체가 중단이 될 수 있는 대상에 대한 백업을 마련하여 가용성을 높이는 것이다. 추가적으로 이중화보다 더 안정적으로 구성하기 위해서 3개 이상의 장비로 구성하는 것을 다중화(Multiflexing)라고 한다.
이중화의 구성에는 active-standby, active-active 방식이 있다. active는 가동 상태를 의미하며, standby는 백업 상태를 의미한다(후에 언급할 라우팅 이중화 프로토콜 VRRP에서는 각각 Master, Backup이라고 지칭하기도 한다). 먼저 active-standby 방식은 둘 중에 한 시스템만 active로 사용하다 active 시스템에 오류가 생길 경우 standby 시스템로 전환(failover*)되는 방식이다. active-standby 방식은 복잡성, 데이터 일관성 유지*, 전이 시 시스템 부하 문제의 측면에서 active-active 방식보다 더 안전하지만 load balancing과 같은 성능 향상을 기대하기는 힘들다. active-active 방식은 두 시스템 모두 active 상태로 사용하는 것으로, load balancing이 가능하여 성능 향상의 측면에서 이점이 있으나, 앞서 언급한 부분들에서 문제가 발생할 수 있다.
* failover: active 시스템에 오류가 생길 경우 standby 시스템으로 전환되는 기능
* active-active 방식에서 두 시스템의 데이터 일관성이 유지되지 않는다면, 한 라우터에 문제가 생겨 failover된 후 동일한 서비스를 제공하지 못할 수도 있다.
이중화/다중화의 사례
- NIC(Network Interface Controller) 다중화: NIC teaming(Windows), bonding(Linux)
- NIC을 다중화하여 하나의 인터페이스처럼 보이게 하는 기술
- 100Mbps를 지원하는 인터페이스를 3개 teaming(bonding)하면 300Mbps의 인터페이스를 사용하는 것과 같은 효과를 낼 수 있다.
- 스토리지 다중화 : RAID(Redundant Array of Independent Disks)
- 여러 개의 하드디스크(SSD, HDD)를 결합하여 하나의 스토리지 시스템으로 사용
- RAID 1: 데이터를 두 개의 디스크에 동일하게 복제
- RAID 5: 최소 3개의 디스크를 사용하여 데이터를 블록 단위로 나누고, Parity 정보를 분산 저장
3. 고가용성을 유지하는 방법 2: Load Balancing(부하 분산)
고가용성 유지를 위해 이중화/다중화를 했다고 하더라도 해결되지 않은 문제가 있다. 과도한 트래픽이 하나의 네트워크 장비, 서버에 몰린다면 메모리 부족, 발열, 병목 현상 등으로 인해 성능이 저하되고, 결과적으로 가용성을 떨어뜨리게 된다. 트래픽* 분배를 통해 이러한 문제를 해결하는 기술이 Load Balancing이다. Load Balancing은 load balancer에 의해 수행되는데, L4, L7 스위치로도 load balancer 역할을 수행할 수 있지만, HAProxy, Envoy와 같은 software load balancer, AWS ELB와 같이 CSP에서 제공하는 cloud load balancer로도 수행 가능하다.
load balancer가 트래픽을 분산할 수 있는 서버가 여러 대가 있을 때, 어떤 서버를 선택해야 트래픽이 균등하게 분배될까? 이럴 때 트래픽이 균등하게 분배되도록 대상을 지정하는 방법을 load balancing algorithm이라고 한다. load balancing algorithm의 종류와 각각의 특징을 정리해보면 다음과 같다.
*트래픽(traffic): 주어진 시점에 네트워크 또는 특정 노드를 경유한 패킷의 양
Load balancing Algorithm
1. 라운드 로빈 (Round Robin)
- 작동 원리: 트래픽을 순서대로 각 서버에 분배한다. 예를 들어, 3개의 서버가 있을 때, 첫 번째 요청은 서버 1에, 두 번째 요청은 서버 2에, 세 번째 요청은 서버 3에 분배한 후, 다시 서버 1로 돌아간다.
- 장점: 간단하고 구현이 쉬움
- 단점: 서버의 성능이나 현재 부하 상태를 고려하지 않음
2. 가중 라운드 로빈 (Weighted Round Robin)
- 작동 원리: 서버에 가중치를 부여하여, 성능이나 용량에 따라 트래픽을 가중치에 비례하여 순차적으로 분배한다. 예를 들어, 서버 A의 가중치가 3이고 서버 B의 가중치가 1이라면, 서버 A는 서버 B보다 3배 많은 요청을 처리한다.
- 장점: 서버의 성능 차이를 고려하여 부하를 분배함
- 단점: 서버의 가중치를 설정하는 관리가 필요함
3. 최소 연결 (Least Connections)
- 작동 원리: 현재 연결 수가 가장 적은 서버에 새로운 요청을 분배한다. 서버의 현재 부하를 기반으로 트래픽을 분배한다.
- 장점: 서버의 부하 상태를 고려하여 트래픽을 분배함
- 단점: 서버의 처리 속도가 다를 수 있음
4. 가중치 최소 연결 (Weighted Least Connections)
- 작동 원리: 현재 연결 수와 서버의 가중치를 고려하여 요청을 분배한다. 현재 연결 수가 적고 가중치가 높은 서버에 더 많은 요청이 분배된다.
- 장점: 서버의 부하 상태와 성능을 동시에 고려하여 트래픽을 분배함
- 단점: 서버의 처리 속도가 다를 수 있으며, 서버의 가중치와 현재 연결 수를 모두 고려해야 하므로 구현이 복잡할 수 있음
5. IP 해시 (IP Hash)
- 작동 원리: 클라이언트의 IP 주소를 해시 함수에 적용하여 특정 서버로 요청을 분배한다. 같은 클라이언트의 요청이 항상 동일한 서버로 전달된다.
- 장점: 특정 클라이언트가 항상 같은 서버로 연결되어 세션 상태를 유지할 수 있음
- 단점: 클라이언트의 IP 주소가 변경되면 다른 서버로 연결될 수 있음
힘들지만 오늘도 해낸 나를 위한 한 마디,
"걸어가고 있다는 것 자체가 결국 길이 있다는 것이다", 김성근
내가 가는 길에 확신을 갖고, 느리더라도 확실하게 한 걸음씩 나아가자.
'Network' 카테고리의 다른 글
[Network] LAN 이중화 - STP (0) | 2024.09.05 |
---|---|
[Network] NAT (8) | 2024.08.28 |
[Network] Network ACL (0) | 2024.08.26 |
[Network] 라우팅 프로토콜 실습 및 설정법 (1) | 2024.08.24 |
[Network] VLAN, L3 Switch (0) | 2024.08.23 |