목차7개 항목
출처와 참고
채드윅의 「카카오가 직접 회고한 1015 장애 사태 원인과 대책」(2022.12)을 바탕으로, 카카오의 공식 발표(재발 방지 대책, 데이터센터 안산)와 AWS 「Disaster Recovery of Workloads on AWS」 백서로 일반화한 노트다. 전략별 RTO·RPO 범위는 ByteByteGo의 System Design 101 가이드 「Cloud Disaster Recovery Strategies」로 보강했다. karanpratapsingh의 「System Design」 강의 저장소를 바탕으로 콜드 사이트와 핫 사이트 구분을 보강했다.
고가용성과 재해 복구
| 개념 | 대비하는 장애 | 수단 |
|---|---|---|
| 고가용성(HA, High Availability) | 서버·디스크·랙 하나의 고장 | 같은 데이터센터(또는 같은 리전의 여러 AZ) 안의 이중화, 자동 페일오버 |
| 재해 복구(DR, Disaster Recovery) | 화재·정전·지진·대규모 오조작으로 사이트 전체가 사라지는 일 | 물리적으로 떨어진 다른 데이터센터·리전에 데이터와 실행 환경을 둔다 |
| 사업 연속성 계획(BCP) | 사람·조직·고객 대응까지 포함한 사업 중단 | DR을 포함하는 상위 계획. 누가 무엇을 결정하는지까지 정한다 |
한 데이터센터 안에서 완벽하게 이중화해도, 그 건물이 멈추면 아무 소용이 없다. HA와 DR은 따로 설계해야 한다. 노드 단위의 이중화 구조(주-백업, 주-보조, 리더 없는 복제)와 장애 감지는 고가용성 이중화 구조와 장애 감지에 있다.
목표부터 정한다: RTO와 RPO
| 지표 | 뜻 | 결정하는 것 |
|---|---|---|
| RTO(Recovery Time Objective) | 장애 후 서비스가 돌아오기까지 허용하는 시간 | 대기 환경을 얼마나 켜 둘지 |
| RPO(Recovery Point Objective) | 잃어도 되는 데이터의 시간 범위 | 백업 주기, 복제를 동기로 할지 비동기로 할지 |
RTO·RPO가 0에 가까울수록 비용과 복잡도는 가파르게 오른다. 그래서 모든 기능에 같은 목표를 주지 않는다. 메시지 전송·로그인·결제처럼 멈추면 안 되는 핵심 기능은 완전 다중화하고, 나머지는 기능별 목표 트래픽과 목표 복구 시간을 따로 정한다.
DR 전략 네 가지
오른쪽으로 갈수록 비용·복잡도는 낮음에서 높음으로, 복구 시간은 김에서 0에 가까움으로 바뀐다.
flowchart LR a["백업·복원"] --> b["파일럿 라이트"] --> c["웜 스탠바이"] --> d["멀티 사이트 액티브-액티브"]
| 전략 | 대기 사이트 상태 | 전환할 때 할 일 |
|---|---|---|
| 백업·복원(Backup & Restore) | 백업만 있다 | 인프라를 새로 띄우고 데이터를 복원한다. 수 시간 이상 |
| 파일럿 라이트(Pilot Light) | DB 복제본 같은 핵심 데이터 계층만 켜져 있고 앱 서버는 꺼져 있다 | 앱 서버를 띄우고 늘린다 |
| 웜 스탠바이(Warm Standby) | 작은 규모로 전체가 돌고 있다 | 용량만 늘린다. 축소판이라도 즉시 트래픽을 받을 수 있다 |
| 액티브-액티브(Multi-site Active/Active) | 모든 사이트가 평소에도 트래픽을 나눠 받는다 | 죽은 사이트로 가는 트래픽만 뺀다. 전환이라는 단계가 거의 없다 |
전략별로 기대할 수 있는 RTO·RPO의 대략적인 범위는 다음과 같다. 실제 값은 자동화 수준과 데이터 동기화 주기로 정해진다.
| 전략 | 일반적인 RTO | 일반적인 RPO |
|---|---|---|
| 백업·복원 | 수 시간 ~ 수일 | 마지막으로 성공한 백업 시점까지 (수 시간) |
| 파일럿 라이트 | 수 분 ~ 수 시간 | 데이터 동기화 주기에 달렸다 |
| 웜 스탠바이 | 수 분 ~ 수 시간 | 최근 수 분 ~ 수 시간 |
| 멀티 사이트 | 거의 즉시 (수 분 이내) | 수 초 이내 |
전통적인 용어로는 대기 사이트를 콜드 사이트(cold site, 기본 인프라만 갖춘 두 번째 장소. 장애 때 장비를 켜고 데이터를 복원한다)와 핫 사이트(hot site, 늘 최신 데이터 사본을 유지해 바로 넘어간다)로 나눈다. 콜드 사이트는 싸지만 복구가 느리고, 핫 사이트는 구축·유지가 비싸지만 중단 시간이 크게 준다. 위 표에서 파일럿 라이트가 콜드 쪽, 웜·핫 스탠바이가 핫 쪽에 가깝다. 어느 쪽이든 재해의 영향을 받지 않는 다른 장소에 데이터와 처리 능력을 복제해 두는 것이 재해 복구의 바탕이다.
앞의 셋은 액티브-스탠바이(active/passive) 계열이다. 평소에는 주 사이트만 일하고, 장애 때 대기 사이트를 승격(promote) 한다. 대기 사이트를 운영 규모 그대로 켜 두되 트래픽은 주지 않는 형태는 핫 스탠바이라 부른다.
| 비교 | 액티브-스탠바이 | 액티브-액티브 |
|---|---|---|
| 평소 자원 활용 | 대기 사이트가 놀고 있다 | 모든 사이트가 일한다 |
| 전환 위험 | 승격 절차가 실제로 도는지 평소에 알 수 없다 | 평소 운영이 곧 검증이다 |
| 데이터 쓰기 | 주 사이트 한 곳에서만 쓴다 | 여러 곳에서 쓰면 충돌 처리가 필요하다 |
| 어려운 점 | 승격이 예상보다 오래 걸린다 | 정합성 설계, 한 사이트가 빠졌을 때 남은 곳이 전체 트래픽을 감당할 용량 |
액티브-액티브에서 쓰기를 다루는 방법은 셋이다. 쓰기를 한 곳으로 모으는 write global, 가장 가까운 곳에 쓰고 마지막 쓰기가 이기게 하는 write local, 사용자 ID 같은 키로 쓰기 사이트를 나누는 write partitioned다. 어느 쪽이든 복제는 실수로 지운 데이터도 그대로 복제한다. 시점 복구(point-in-time) 백업은 따로 둔다.
모든 계층을 다중화한다
장애 범위를 키우는 것은 대개 아무도 다중화를 챙기지 않은 한 계층이다.
| 계층 | 챙길 것 |
|---|---|
| 설비 | 전원 계통·UPS·배터리실 분리, 소방 설비 이중화. 배터리 화재가 UPS까지 번지면 정상 계통까지 같이 꺼진다 |
| 네트워크 | 백본과 외부 회선을 여러 센터에 나누고 동적 라우팅으로 자동 우회한다 |
| 데이터 | DB·NoSQL·검색 엔진·메시지 큐 클러스터의 노드를 센터 단위로 나눈다. 복제본이 셋이어도 두 센터에만 있으면 한 센터가 죽을 때 과반을 잃는다 |
| 캐시·세션 저장소 | 「한 센터 안의 HA」로 끝내지 않는다. 상태 정보를 담은 캐시가 한 센터에만 있으면 앱이 다중화돼 있어도 기능이 멈춘다 |
| 플랫폼·운영 도구 | 사내 인증(LDAP)·VPN·코드 저장소·빌드 산출물 저장소·배포 도구·모니터링·로그 수집 |
| 애플리케이션 | 다른 센터로 넘어갔을 때 외부 의존성까지 같이 넘어가는지 확인한다 |
운영 도구가 가장 자주 빠진다
서비스는 다중화하면서 서비스를 복구하는 데 쓰는 도구는 한 곳에 두기 쉽다. 그러면 장애 때 이런 일이 생긴다.
- 모니터링·로그 시스템이 같이 죽어 무엇이 망가졌는지 보이지 않는다. 장애 구간 로그도 사라진다.
- VPN·사내 인증이 막혀 엔지니어가 서버에 들어가지 못한다.
- 배포 도구와 빌드 산출물 저장소가 없어 다른 센터에 서비스를 다시 띄우지 못한다.
- 클러스터 관리 도구가 없어 수백 대를 손으로 점검한다.
복구 경로에 있는 모든 것은 서비스와 같은 수준으로 다중화한다. 장애 중에는 고장 난 시스템을 고치는 것보다 다른 곳에 새로 구성하는 편이 빠른 경우가 많으므로, 재구성 도구와 IaC 코드가 어느 센터에서든 돌아야 한다. 클라우드에서는 같은 이유로 전환 절차를 설정을 바꾸는 컨트롤 플레인이 아니라 실제 트래픽을 처리하는 데이터 플레인 동작(헬스 체크 기반 DNS 전환 등)에 의존하게 만든다.
전환을 자동화하고 훈련한다
- 전환은 버튼 하나가 되게 만든다. 승격, DNS·GSLB 전환, 연결 문자열 변경을 스크립트로 묶는다. 수동으로 연결을 옮기는 플랫폼은 장애 때 가장 늦게 돌아온다.
- 자동 전환은 신중히 쓴다. 오탐으로 넘어가도 RTO·RPO만큼의 손실이 생기므로, 판단은 사람이 하고 실행은 자동으로 하는 구성이 흔하다.
- 실환경을 가정한 모의 훈련을 정기적으로 한다. 액티브-스탠바이의 승격은 해 보기 전까지 몇 분이 걸릴지 아무도 모른다. 전사 단위 시나리오(센터 하나 전체 차단)로 해 봐야 계층 간 빈틈이 드러난다.
- 백업은 복원해 봐야 백업이다. 복원을 주기적으로 실행해 시간을 잰다.
- 조직마다 다른 기준을 통일한다. 계층을 맡은 팀이 각자 다른 일정과 전략으로 이중화하면, 한 팀이 「센터 내 HA」에서 멈춘 곳이 전체의 약점이 된다. 공통 설계 기준을 거버넌스로 강제한다.
정리
- HA는 장비 고장, DR은 사이트 소멸에 대비한다. 둘은 따로 설계한다.
- RTO·RPO를 기능별로 정하고, 그에 맞춰 백업·파일럿 라이트·웜 스탠바이·액티브-액티브 중에서 고른다.
- 데이터 복제본은 센터 단위로 나눈다. 복제본 수보다 배치가 중요하다.
- 모니터링·인증·VPN·배포 도구처럼 복구에 쓰는 도구를 서비스와 같은 수준으로 다중화한다.
- 전환은 자동화하고, 실제처럼 훈련해서 검증한다. 해 보지 않은 전환은 동작하지 않는다고 가정한다.
관련 노트: 고가용성 이중화 구조와 장애 감지, AWS 클라우드 기초, 대규모 트래픽에서 서비스를 지키는 설계, 캐시 클러스터 운영과 장애 대응, 데이터베이스 모델: RDB, NoSQL, NewSQL, 트랜잭션과 회복, 스타트업 인프라 선택 원칙, 클라우드 SLA와 계약
원본 기록6
- 원문 (새 창) brunch.co.kr/@chadwick/49
- 원문 (새 창) www.kakaocorp.com/page/detail/9843
- 원문 (새 창) www.kakaocorp.com/page/detail/11097
- 원문 (새 창) docs.aws.amazon.com/whitepapers/latest/disaster-recovery-workloads-on-aws/disaster-recovery-options-in-the-cloud.html
- 원문 (새 창) bytebytego.com/guides/cloud-disaster-recovery-strategies
- GitHub 원문 (새 창) github.com/karanpratapsingh/system-design