MQTT 브로커 백업 및 복구 전략 설계
중소형부터 대규모 MQTT 배포까지 적용 가능한 브로커 데이터 보호와 장애 대응을 위한 백업 설계와 복구 흐름을 정리한 전략
목차
개요
MQTT 브로커는 메시지 전달의 핵심 구성요소다. 브로커의 퍼시스턴스(persistence) 파일이나 세션 데이터가 손상되면 서비스 중단과 데이터 손실이 발생한다. 따라서 mqtt 데이터 백업 방법과 브로커 복구 시나리오를 사전에 정의하는 것이 중요하다. 본문은 초보자도 이해하기 쉬운 용어로 설계 원칙과 절차를 설명한다.
설계 원칙
목표 설정
백업 목표는 복구 시점 목표(RPO)와 복구 시간 목표(RTO)를 명확히 하는 것이다. 예를 들어 RPO를 1시간, RTO를 30분으로 정하면 백업 빈도와 복구 절차가 결정된다.
데이터 구분
브로커에서 보관하는 데이터는 크게 세 가지로 구분된다.
- 영구 저장된 메시지(예: QoS 1/2의 대기 메시지)
- 클라이언트 세션 상태(트윈 세션, 구독 정보)
- 설정 파일 및 인증 정보
백업 전략 종류
파일 수준 백업
브로커의 persistence 디렉터리 전체를 주기적으로 스냅샷하거나 rsync로 백업한다. 이 방식은 구현이 단순하고 복구가 직관적이다. 다만 파일 일관성을 확보하려면 백업 전 브로커를 일시 중지하거나 내부 플러시를 호출해야 한다.
로그 기반 복구
트랜잭션 로그 혹은 메시지 로그를 기반으로 재생하는 방식은 RPO를 낮출 수 있다. 지속성 파일과 로그를 함께 보관하면 장애 시 로그 재생으로 최근 상태까지 복원 가능하다.
애플리케이션 레벨 동기화
하이브리드 환경에서는 브로커 클러스터링과 외부 데이터 저장소 연동을 사용해 실시간 복제를 구현할 수 있다. 이 방법은 높은 가용성을 제공하지만 구현 비용이 크다.
백업 구현 예시
간단한 스크립트 기반 백업
아래 예시는 mosquitto의 persistence 디렉터리를 rsync로 백업하는 스크립트다. 스크립트 실행 전 브로커가 파일을 안정적으로 반영하도록 서비스 중지 또는 fsync 조치를 고려한다.
#!/bin/bash
BROKER_SERVICE=mosquitto
PERSIST_DIR=/var/lib/mosquitto
BACKUP_DIR=/backup/mosquitto/$(date +%F_%H%M)
systemctl stop $BROKER_SERVICE
mkdir -p $BACKUP_DIR
rsync -a --delete $PERSIST_DIR/ $BACKUP_DIR/
systemctl start $BROKER_SERVICE
위 스크립트는 간단하지만 운영 환경에서는 증분 백업, 암호화, 접근 제어를 추가해야 한다.
복구 설계: 브로커 복구 시나리오
시나리오 분류
- 단일 브로커 실패: 퍼시스턴스 파일 손상 또는 서버 장애
- 클러스터 일부 노드 손실: 리더 노드 장애로 인한 파티셔닝
- 설정 또는 인증 정보 유실: 구성 파일 오염
단계별 복구 절차
- 영향 범위 파악: 연결된 클라이언트 수, 보류 메시지량
- 서비스 차단 여부 결정: 복구 전 서비스 잠시 중단 필요성 판단
- 백업에서 복원: 해당 시점의 persistence 파일과 설정 적용
- 로그 재생(선택): 트랜잭션 로그가 있으면 재생하여 최신 상태 복원
- 검증 테스트: 샘플 클라이언트로 구독/발행 검증
복구 예시 명령
백업에서 복원하는 기본 명령 흐름은 다음과 같다. 서비스 중지 후 복사하고 재시작하여 동작을 확인한다.
# systemctl stop mosquitto
# cp -r /backup/mosquitto/2026-03-01_1200/* /var/lib/mosquitto/
# chown -R mosquitto:mosquitto /var/lib/mosquitto
# systemctl start mosquitto
테스트 및 검증
정기적인 복구 연습이 필수다. 복구 절차는 문서화하고 주기적으로 시뮬레이션하며 RPO/RTO 준수 여부를 측정한다. 검증 항목은 연결 안정성, 메시지 유실률, 인증/권한 정상 동작이다.
운영 관점 체크리스트
- 백업 스케줄과 보관 정책 정의
- 암호화와 접근 권한 관리 설정
- 모니터링으로 백업 실패 알림 구성
- 복구 매뉴얼과 책임자 지정
결론
mqtt persistence 백업 복구는 단순한 파일 복사 이상의 설계가 필요하다. mqtt 데이터 백업 방법을 상황에 맞게 선택하고, 브로커 복구 시나리오를 문서화해서 실제 장애에 대비하면 서비스 신뢰성을 크게 높일 수 있다. 실무에서는 자동화, 암호화, 검증 반복이 핵심 요소다.