Apache APISIX 설정 완벽 백업 및 복원 가이드

1 min read

Apache APISIX는 강력하고 유연한 API 게이트웨이지만, 운영 안정성을 위해서는 장애나 시스템 이전 상황에 대비한 체계적인 백업 및 복원 전략이 필수적입니다. APISIX의 설정은 정적 파일과 동적 데이터 저장소(etcd)에 나뉘어 저장되므로, 이 두 가지를 모두 고려해야 완벽한 백업이 가능합니다.

이 가이드에서는 APISIX의 모든 설정 요소를 안정적으로 백업하고, 필요시 복원하는 방법을 단계별로 상세히 설명합니다.

1. APISIX 설정의 두 가지 축: 정적 파일과 동적 데이터

APISIX 설정을 이해하는 핵심은 두 가지 저장소의 역할을 구분하는 것입니다.

  • 정적 설정 파일: APISIX 서비스 자체의 동작 방식을 정의합니다. 주로 시스템 부팅 시 한 번 읽히며, 변경 시 서비스 재시작이 필요합니다.
  • 동적 설정 데이터 (etcd): 라우팅 규칙, 서비스, 업스트림 등 실시간으로 변경되는 운영 데이터를 저장합니다. APISIX는 etcd의 변경 사항을 실시간으로 감지하여 서비스 재시작 없이 적용합니다.

따라서 성공적인 백업은 이 두 가지를 모두 포함해야 합니다.

2. 주요 정적 설정 파일 백업

APISIX의 핵심 동작을 정의하는 파일들은 주로 설치 경로의 conf 디렉토리에 위치합니다.

경로설명백업 중요도
/usr/local/apisix/conf/config.yamlAPISIX 핵심 설정 파일: etcd 연결 정보, 플러그인 목록, 로그 레벨 등 가장 중요한 설정을 포함합니다.필수
/usr/local/apisix/conf/apisix.yaml정적 Route/Upstream 정의 파일: YAML 파일로 라우팅 규칙을 관리할 때 사용됩니다. (선택적 사용)선택
/usr/local/apisix/conf/certs/SSL 인증서 저장 디렉토리: HTTPS 통신을 위한 모든 인증서(.crt)와 개인 키(.key) 파일이 저장됩니다.필수 (HTTPS 사용 시)
/usr/local/apisix/plugins/커스텀 플러그인 디렉토리: Lua로 직접 개발한 커스텀 플러그인 파일(*.lua)이 위치합니다.필수 (커스텀 플러그인 사용 시)
/usr/local/apisix/conf/config-default.yaml기본값 설정 파일. (사용자 설정이 아니므로 백업 대상은 아니지만, 설정 비교 시 참고용으로 유용합니다.)참고용

💡 Tip: 기본 설치 경로는 /usr/local/apisix/입니다. Docker, Kubernetes(Helm) 등 컨테이너 환경에서는 볼륨 마운트 경로가 다를 수 있으니, 실제 환경에 맞게 경로를 확인해야 합니다.

3. etcd에 저장된 동적 설정 백업

APISIX 운영의 핵심인 Routes, Services, Upstreams, Consumers, SSL 인증서 정보 등은 모두 etcd에 저장됩니다. etcd 데이터를 백업하는 방법은 크게 두 가지입니다.

방법 1: etcd 스냅샷 (가장 권장되는 공식적인 방법)

etcd 클러스터 전체를 특정 시점의 바이너리 파일로 백업합니다. 가장 안정적이고 일관된 복원을 보장합니다.

# etcdctl v3 API 사용, 인증서 경로 등은 실제 환경에 맞게 수정
ETCDCTL_API=3 etcdctl \
  --endpoints=https://127.0.0.1:2379 \
  --cacert=/etc/etcd/ssl/ca.pem \
  --cert=/etc/etcd/ssl/etcd.pem \
  --key=/etc/etcd/ssl/etcd-key.pem \
  snapshot save /backup/etcd_snapshot_$(date +%Y%m%d).db

방법 2: Key-Value 데이터를 JSON으로 백업

etcd에 저장된 모든 Key-Value 쌍을 사람이 읽을 수 있는 JSON 형식으로 추출합니다. 데이터 확인 및 부분 복원에 유용하지만, 대규모 데이터 복원 시에는 스냅샷 방식이 더 효율적입니다.

# APISIX가 사용하는 모든 데이터를 JSON 형식으로 백업
ETCDCTL_API=3 etcdctl get "" --prefix -w=json > /backup/etcd-backup_$(date +%Y%m%d).json

4. 환경별 추가 백업 항목

Helm 기반 설치 환경

Kubernetes에서 Helm으로 APISIX를 배포한 경우, 배포 시 사용된 values.yaml 파일이 인프라 설정의 원본 소스가 됩니다. 이 파일을 반드시 백업해야 합니다.

# 현재 배포된 APISIX의 values 설정을 파일로 저장
helm get values apisix -n apisix > apisix-values-backup.yaml

모니터링 및 대시보드 환경

APISIX와 연동된 Prometheus, Grafana, APISIX Dashboard를 사용한다면, 해당 컴포넌트의 설정도 백업 대상에 포함해야 합니다.

  • Grafana: 대시보드 JSON 파일
  • Prometheus: prometheus.yml 설정 파일
  • APISIX Dashboard: /usr/local/apisix-dashboard/conf/conf.yaml

5. 통합 백업 스크립트 예시 (로컬 설치 기준)

아래 스크립트는 위에서 설명한 주요 항목들을 한 번에 백업하는 예시입니다. 실제 운영 환경에서는 이 스크립트를 정기적으로 실행하도록 자동화하는 것이 좋습니다.

#!/bin/bash

# 백업 디렉토리 생성 (날짜 포함)
BACKUP_DIR=~/apisix-backup-$(date +%Y%m%d_%H%M%S)
mkdir -p $BACKUP_DIR

echo "1. 정적 설정 파일 백업 시작..."
cp /usr/local/apisix/conf/config.yaml $BACKUP_DIR/
[ -f /usr/local/apisix/conf/apisix.yaml ] && cp /usr/local/apisix/conf/apisix.yaml $BACKUP_DIR/

echo "2. SSL 인증서 디렉토리 백업..."
[ -d /usr/local/apisix/conf/certs ] && cp -r /usr/local/apisix/conf/certs $BACKUP_DIR/

echo "3. 커스텀 플러그인 디렉토리 백업..."
[ -d /usr/local/apisix/plugins ] && cp -r /usr/local/apisix/plugins $BACKUP_DIR/

echo "4. etcd 동적 데이터 백업 (JSON)..."
ETCDCTL_API=3 etcdctl get "" --prefix -w=json > $BACKUP_DIR/etcd-backup.json
# 또는 스냅샷 방식 사용
# ETCDCTL_API=3 etcdctl snapshot save $BACKUP_DIR/etcd_snapshot.db

echo "✅ APISIX 설정 백업 완료: $BACKUP_DIR"

6. 복원 시 핵심 주의사항

  • 정적 파일 복원: 백업된 config.yaml, certs/, plugins/ 등을 원본 위치에 복사한 후에는 반드시 APISIX 서비스를 재시작해야 변경 사항이 적용됩니다. (apisix restart)
  • etcd 데이터 복원:
    • 스냅샷 복원: etcdctl snapshot restore 명령을 사용합니다. 이 작업은 기존 etcd 데이터 디렉토리를 덮어쓰므로, etcd 서비스를 중지한 상태에서 진행해야 합니다. 데이터 손실 위험이 있으므로 매우 신중하게 접근해야 합니다.
    • JSON 복원: jq와 같은 도구를 사용하여 필요한 데이터를 추출하고, APISIX Admin API를 통해 부분적으로 복원하는 것이 더 안전할 수 있습니다.
  • 순서: 일반적으로 1) etcd 데이터 복원2) 정적 파일 복원3) APISIX 서비스 시작/재시작 순서로 진행하는 것이 논리적으로 안전합니다.

체계적인 백업은 안정적인 시스템 운영의 초석입니다. 이 가이드를 바탕으로 자신의 환경에 맞는 백업/복원 정책을 수립하고 자동화하여, 예기치 않은 상황에도 신속하게 대응할 수 있기를 바랍니다.

루아 Lua 프로그래밍 : 모듈과 패키지 가이드

지금까지 우리는 함수로 코드를 묶고, 테이블로 데이터를 구조화하는 방법을 익혔습니다. 하지만 프로젝트의 규모가 커지기 시작하면, 모든 코드를 단 하나의 파일에 담는 것은 금세 한계에...
eve
53 sec read

루아 (Lua) 프로그래밍: 테이블과 메타테이블의 모든 것

Lua 프로그래밍의 여정에서 가장 중요하고 흥미로운 지점에 도달했습니다. 바로 Lua 언어의 심장이자 가장 중심적인 기능인 테이블(Table)입니다. Lua에는 배열, 딕셔너리, 리스트, 객체 등을 위한 별도의...
eve
1 min read

루아(Lua) 프로그래밍: 제어 구조 조건과 반복

지금까지 우리는 변수에 데이터를 저장하고, 연산자로 이 데이터들을 계산하고 비교하는 방법을 배웠습니다. 하지만 프로그램이 단순히 위에서 아래로 순서대로만 실행된다면, 매우 단순한 작업밖에 할 수...
eve
1 min read