가용성 설계
저번 글에 이어, 가용성 중에서 가장 기본이 되는 내결함성 설계에 대해 다뤄보려 한다.
단일 장애점. Single Point Of Failure이며, 이는 시스템의 특정 부분이 고장이 나 사용할 수 없는 상태가 되는 것을 의미한다.

다음과 같은 경우, 라우터가 고장나게 되면 그 즉시 AP서버는 사용할 수 없는 상태가 된다. 시스템을 사용할 수 없는 시간이 길어질수록 시스템 가용성은 더 낮아진다. 이런 사태를 피하려면, 내결함성 설계 파트에서는 SPOF 그 자체를 제거한다는 전제를 깔고 들어가야한다.
그렇다면 어떻게 SPOF를 제거할 수 있을까? 이중화를 사용하면 간단하다.
이중화의 개념 자체는 간단하다. 앞의 그림을 예로 들면, 정말 단순하게 생각하면 라우터를 하나 더 준비하면 되는 것 이다. 그렇다면, 어느 한 장비에 장애가 발생하더라도 장애 경로를 우회하여 AP서버까지 접근이 가능할 것 이다. 네트워크 장비는 모두 고속으로 처리하기 때문에, 우회 정도는 크게 시스템 사용 시간에 영향을 끼치지는 않는다고 한다.
사실 공부를 하며 이 이중화의 영역이 참 애매하다는 가장 먼저 들었다. 이중화는 정말 다양한 부분에서 적용 가능하다. 단순하게 전원 장치를, 즉 콘센트를 두개로 나누어 한쪽 전력이 차단되더라도 지속적으로 전원이 공급되도록 하는 것. 이것 역시 이중화라 할 수 있다. 단순히 장치나 내부 하드웨어만 의미하는 것은 아니다. 그렇다면, 무조건 이중화를 할 수 있는 부분은 모조리 해버려서 SPOF를 아예 제거해버리는게 좋은 것 아닌가? 맞다. 하지만 반은 맞고 반은 틀리다. 이중화라는 것은 일종의 보험을 드는 것인데, 그 말은 '고장나지 않으면 쓸 일이 없다.' 라는 뜻으로도 생각할 수 있다. 이중화를 하려 한다면 물론 안정성을 위해 대비책을 세우는 것은 좋지만, 금액적인 부분을 신중하게 고려하여 결정해야 할 것 같다.
서버는 보통 다음 부품들을 조합하여 구성한다.
서버에 따라 천차만별이지만, 상위 등급의 서버 기종에서는 부품을 이중화하여 부품 하나가 고장이 나더라도 시스템을 계속 가동할 수 있으므로 내결함성을 강화할 수 있다.
내장 HDD
서버에 내장된 HDD는 주로 RAID(Redundant Arrays of Inexpensive Disks)방법을 이용하여 여러 HDD를 묶어 하나의 논리적인 HDD로 보이게 하는 방식으로 이중화함. 하드웨어 RAID와 소프트웨어 RAID로 또 나눌 수 있음. 그 중에서 소프트웨어 레이드는 하드웨어 RAID에 비하여 cpu 부하가 높음.
RAID는 0~6 레벨까지 있음. 최근에는 가상화 환경에서 여러 HDD를 RAID로 묶어 데이터 저장소를 만들고 이를 여러 가상 서버에 할당하는 경우가 많다고한다. 이런 환경에서는 RAID5보다는 RAID6를 주로 적용한다고 한다. 시스템에 전체적인 손실이 발생하는 리스크를 가능한 배제하려는 의도. 하드디스크는 고장나면 신속하게 교환해야한다. 거기에 항상 백업 데이터 확보할 것.
외장 HDD
외부 스토리지는 일반적으로 디스크 어레이 장치라고 하며, RAID를 하드웨어로 구현하는 수단 중 하나.
외부 스토리지를 이용하는 장점
- 여러 서버에서 공유할 수 있어 리소스를 효율적으로 활용 가능
- 스토리지 수준에서 내결함성을 확보(핫스왑 및 핫스페어)
물리 HDD 여러개 -> 논리 HDD -> LU(Logical Unit) / LNU(Logical Unit Number)로 식별
위와 같은 메커니즘으로, 밖에서 보면 LUN은 마치 하나의 물리 HDD인 것 처럼 보인다.
LNU의 장점은 RAID로 구성한 논리 HDD를 더 논리적으로 분할하여 여러 서버에서 공유가 가능함. 즉, 한정된 디스크 리소스를 유연하게 활용할 수 있다.
외부 스토리지의 경우 HBA,SAN 스위치, 스토리지 장치의 연결 채널, 장치 간 연결 케이블 등을 이중화하여 SPOF를 제거한다.
서버를 구성하는 하드웨어 부품을 모두 이중화 하더라도 OS, 미들웨어 등에서 문제가 생길 수도 있기 때문에 서버 자체의 장애 발생률을 0%로 만들 수는 없다. 이런 사태를 가정하고 기능과 역할이 동일한 사버를 여러대 준비해야하고, 시스템이 계속 처리될 수 있도록 설계해야 한다.
서버 이중화는 클러스터링이라는 방법으로 구현한다.
부하분산 클러스터

부하분산 클러스터는 기능과 역할이 동일한 서버 여러대를 병렬로 구성하여, 그중 어느 서버에서 장애가 발생하더라도 나머지 서버에서 시스템을 계속 처리할 수 있는 방식. 웹 서버처럼 사용자 수가 증가하면 동시 접속자 수가 증가하는 특성이 있는 서버에 작합한 방식으로, 별령 처리라는 특성 덕분에 고유성이나 순서 보장이 필요한 작업에 매우 적합하다.
HA(고가용성) 클러스터

HA클러스터는 기능과 역할이 동일한 서버 여러대를 액티브 & 스탠바이 방식으로 구성하고 평소에는 액티브 서버만으로 처리하는 방식. 액티브 서버에 장애가 발생하면 스탠바이 서버가 액티브 서버가 됨.
DB 서버와 메시징 서버, 파일 연계 서버 등이 적합하다.
또한, HA 클러스터의 경우 각 서버에 할당된 IP주소와는 별도로 서비스 IP주소라는 공유 IP 주소를 할당한다. 서비스 IP는 평소에는 액티브 서버에서 실행 중인 서버에 할당하고, 장애로 인한 스탠바이 서버로 전환 시에는 서비스 IP 주소도 함께 이동한다. 따라서,
연결 대상 시스템. 즉, 어플리케이션에선 현재 어느 쪽 서버가 액티브인지 인지할 필요가 없다. 그리고 이 말은 액티브 서버의 서비스 IP주소를 굳이 알고있거나, 알아보려하지 않아도 된단 말이다.
가상화 솔루션의 HA 클러스터
클라우드 등, 최근 가상화 솔루션이 발전되고 시장이 확산되면서 가상화 솔루션에 있어 HA클러스터 기능도 중요한 선택 사항 중 하나가 되었다. 가상화 환경에서는 물리 서버에서 실행되는 가상화 솔루션이 제공하는
하이퍼바이저가 OS로 가동되며, 하이퍼바이저에서 여러 가상 서버를 실행할 수 있다.
해당 기술의 장점은, 지금까지 SPOF가 존재하던 서버를 가상화 기술을 적용하여 원래 서버의 설계를 바꾸지 않고 고가용성 구성의 서버로 스펙업 할 수 있다는 것이다. 또한, 리소스를 통합, 최적화할 수 있고 필요한 하드웨어 수도 줄일 수 있으므로, 시스템 규모가 크면 클수록 총 비용을 줄일 수 있다.