HA(High Availability)를 간단히 한국어로 직역을 하자면 “고가용성”이다.
고 가용성이란 “가용성이 높다”는 뜻으로서, “절대 고장 나지 않음”을 의미한다.
즉, 네트워크나 프로그램 등의 정보 시스템이 상당히 오랜 기간 동안 지속적으로 정상 운영이 가능한 성질을 말한다.
최근 들어 기업의 모든 비즈니스가 디지털화 되면서, 고 가용성이 보장된 서비스를 제공해야 하는 케이스가 점점 많이 발생하고 있다. 또한 단 한번의 예상치 못한 서버 다운은 기업 신용 실추 등의 문제와 직결되기 때문에 손실이 매우 크다.
여담으로 HA설계를 하느냐 안하느냐에 따라 주니어 개발자와 시니어 개발자를 나누는 기준이 되기도 한다고 한다.
서버 이중화
서버 이중화란 운영중인 서비스의 안정성을 위해 각종 자원을 이중 또는 그 이상으로 구성하는 것을 말한다.
따라서 하나의 서비스에 장애가 발생하는 경우 다른 서버를 통해 서비스를 지속가능하게 한다.
[참고] clustering 클러스터링
다수의 서버를 중복 구성하는 것
장애가 일어난 Active 서버를 내리고 대기하고 있던 Stand by 서버를 올리는 것을 fail over라고 한다.
이를 보통 네트워크 장애 발생 시 노드 간 fail over가 실행되도록 설정했다고 말한다.
fail over 발생 시 Active 서버에 할당한 가상 IP주소를 제거하고 Stand by 서버에 해당 주소를 재할당하기 때문에,
클라이언트는 동일한 IP주소로 그대로 접속이 가능하다.
서버 이중화의 목적
- 장애 또는 재해 시 빠른 서비스 재개를 위함
오류가 발생하더라도 사용자는 인지하지 못하도록 하기 위함. - 원활한 서비스를 위해
한 개의 장비에서 일정량 이상의 트래픽을 처리하는 경우 응답시간이 늦어질 수 있다.
서버 이중화의 구현
HA(High Availiability)서비스와 디스크 RAID 구성, 오라클의 RAC(Real Application Clusters) 등으로 구현 가능하다.
서버 이중화 솔루션이 반드시 갖추어야 할 기본 기능
1. 데이터 복제 기능
1번 서버에서 장애 발생 시 2번 서버가 1번 서버를 대신하여 바로 서비스하기 위해서는 양쪽 데이터는 항상 100% 동일해야 한다는 무결성을 보장해야 한다.
이렇게 Data를 동일히 맞추기 위해서는 Data Replication(데이터 복제) 기능이 발드시 필요하다.
이 때 Master(Read, Write) - Slave(Read) 구조를 가진다. 즉, 다수의 slave 구축으로 Read(읽기) 부하를 분산시킬 수 있다.
Master-Slave구조에서 한 개의 Master에 여러 Slave가 있는 구조를 클러스터링 구조라고 하며 DDR구조라 한다.
2. 장애 감시 기능
Stand by 서버는 Active 서버가 언제 장애가 발생할지 모르니 항상 감시하고 있어야 한다.
이러한 구성은 Active-Stand By HA 구성이라고 한다.
서버 이중화 구조
보통 서버 이중화의 구성은 Active-Active 구성과 Active-Standby 구성으로 나뉜다.
Active-Active구조
- 부하분산의 목적으로 주로 활용
- 서비스 단위를 나누어 분산시키기도 한다.
Active-Standby 구조
- 즉각적인 failover(=swap)을 위해 주로 활용.
서버를 이중화함과 동시에 부하 분산을 하여 장애시 서비스를 이전하여 운영하는 형태다. - 지속적으로 Active서버에 장애가 발생했는지 확인하기 위해 Active서버와 Standby서버가 heartbeat을 주고받으며 health check를 한다.
- Active서버에 장애 발생 시 다운된 서버를 대신하기 위하여 Standby서버로 fail over(=swap)되어 동작한다.
그 동안 개발자들은 다운된 Active에 접근하여 장애이슈처리. - 결국 일반적으로 Active와 Standby는 같은 기능을 함(=Mirroring Server)
서버 이중화 솔루션의 단점
데이터가 실시간 복제된다는 점이다.
실수로 반영된 데이터 혹은 바이러스에 감염된 파일도 복제가 되어 2번 서버 또한 감염이 될 수 있다는 점이다.
이러한 단점을 보완하기 위해서는 백업 솔루션을 추가 도입해야할 수 있다.
로드 밸런싱(Load Balancing)
client의 수가 많을 땐 server 1대 만으로는 트래픽을 감당하기 힘들다.
이 때 트래픽을 해결하기 위해 scale-up 혹은 scale-out 해줘야 한다.
보통은 scale-out방식으로 하게 되는데, 이는 장비를 여러대를 두는 것을 의미한다.
로드 밸런싱(Load balancing)이란?
장비를 여러대를 둔 상태에서 여러 서버에 트래픽이 고르게 분산되도록 도와주는 기능.
즉, 부하 분산을 위해서 가상(virtual) IP를 통해 여러 서버에 접속하도록 분배하는 기능!
이러한 작업을 하는 장비는 로드 밸런서(Load balancer)라고 한다.
로드 밸런스 및 방화벽 장비는 SPOF가 될 가능성이 높인 네트워크 장비다. 따라서 이중화 구성은 필수다.
쉽게 말해 한 개의 로드 밸런스만 두었을 땐 그 한 개가 오류나면 시스템 전체가 다운되니 최소 2개로 구성하라는 말!
로드 밸런싱은 구현하고자 하는 지점에 따라 미들웨어, 네트워크, OS 등 다양한 지점에서 구현 가능하다.
[참고] SPOF(Single Point Of Failure) 단일장애지점
장애가 발생하면 시스템 전체가 다운되는 지점
로드 밸런서의 주요 기능
1. NAT(Network Address Translation)
Private IP를 Public IP로 바꿔주는 통신망의 주소 변조기
2. Tunneling
눈에 보이지 않는 통로를 만들어 통신할 수 있게 하는 개념
데이터를 캡슐화하여 연결된 노드만 캡슐을 해제할 수 있게 만든다.
3. Dynamic Source Routing protocol(DSR)
요청에 대한 응답을 할 때 로드 밸런서가 아닌 client IP로 응답.
즉, 네트워크 스위치를 거치지 않고 바로 클라이언트를 찾아가는 개념
로드 밸런서가 동작하는 방법
기초적인 방법인 Bridge/Transparent Mode에서는 사용자가 서버에 서비스를 요청할 때 중간에서 로드밸런서가 NAT를 통해 IP/MAC주소를 변조합니다. 즉 요청과 응답이 모두 Load Balancer를 경유합니다.
'📜 TIL' 카테고리의 다른 글
SSH란? (0) | 2021.09.11 |
---|---|
RESTful한 URL이란? (0) | 2021.09.10 |
Gitlab에 JIRA와 Mattermost 연동시키기 (0) | 2021.08.31 |
리눅스 # Ubuntu에서 Vi 파일 수정 시 방향키 및 문자 오류 (0) | 2021.08.24 |
리눅스 명령어 모음 (0) | 2021.08.24 |