1. 소개

데이터를 주기적으로 백업하는 것은 모든 프로덕션 데이터베이스 배포에서 중요한 부분으로, 재해 발생 시 데이터 복구를 보장하고 복원이 필요할 때 데이터 불일치를 최소화하는 데 도움이 됩니다.

카우치베이스는 다음을 제공합니다. cbbackupmgr 유틸리티는 수년에 걸쳐 개선되어 훨씬 더 높은 성능으로 대규모 데이터 세트를 백업하는 엔터프라이즈급 백업 및 복원 도구가 되었으므로 프로덕션에서 이 도구를 사용할 것을 권장합니다. 다음 사항을 언급할 가치가 있습니다. 카우치베이스 서버 6.5 백업-스토리지 엔진을 전면 개편하고 더 높은 압축률을 도입하여 백업-복원 성능이 크게 향상되고 각 백업 스냅샷에 필요한 스토리지가 줄어들어 비용을 절감할 수 있게 되었습니다.


2. 모범 사례

하지만 cbbackupmgr 이 Couchbase_HOME 아래에 존재한다면, 이는 not 클러스터의 활성 노드 중 하나에서 이 유틸리티를 실행하는 것이 좋습니다. 활성 요청의 리소스를 놓고 경쟁하게 되어 데이터베이스 시스템의 성능을 저해할 수 있기 때문입니다.

따라서 데이터베이스 클러스터와 백업 노드 모두에 대해 리소스를 더 잘 관리할 수 있도록 Couchbase 바이너리만 설치되고 Couchbase 서비스는 실행되지 않는 별도의 인스턴스(백업 및 복원 필요 시)를 제공하는 것이 가장 좋습니다.

Backup Manager

위 그림에서 볼 수 있듯이, 5개의 노드로 구성된 Couchbase 클러스터 외에 별도의 백업/복구 노드가 프로비저닝되어 있습니다. 또 다른 모범 사례는 데이터베이스의 필수 스냅샷을 저장할 수 있는 충분한 공간을 확보하기 위해 Couchbase 데이터 세트 크기의 5배 이상을 저장할 수 있는 충분한 스토리지를 할당하는 것입니다. 복구 지점 목표 (RPO)를 설정할 수 있습니다.

3. 백업 전략

cbbackupmgr 는 DBA가 비즈니스 요구 사항에 가장 적합한 백업 전략을 구현할 수 있는 명령 모음을 제공합니다. 다음은 몇 가지 명령어입니다:

이러한 명령을 사용하여 다음 세 가지 백업 전략 중 하나를 구현할 수 있습니다. 문서. 아래 예에서는 다음과 같이 설명합니다. 정기 병합 전략의 맥락에서, 쿠버네티스 환경 내에서 실행되는 카우치베이스 클러스터의 맥락에서.

4. 주기적 병합

이 백업 전략은 변경 사항을 백업하는 데 가장 적은 시간이 필요하고 압축 및 병합 프로세스 중에 데이터를 통합하는 데 데이터베이스 클러스터의 리소스 소비가 거의 없으므로 데이터베이스 오버헤드가 가장 낮습니다(백업 노드에서 발생하므로).

간단히 설명하면 다음과 같습니다. 정기 병합 전략이 작동합니다:

  1. 다음을 사용하여 백업 리포지토리 설정 cbbackupmgr 구성
  2. 다음을 사용하여 데이터베이스의 증분 백업(리포지토리에 있음)을 수행합니다. cbbackupmgr 백업
  3. 다음을 사용하여 백업 압축을 수행합니다. cbbackupmgr 컴팩트 를 사용하여 디스크 공간을 효율적으로 사용할 수 있습니다.
  4. 다음을 사용하여 가장 오래된 백업을 병합합니다. cbbackupmgr 병합 를 사용하여 리포지토리의 백업 수가 무한정 늘어나지 않고 공간 요구 사항을 계속 확인할 수 있습니다.

참고: 위의 단계는 다음에서 캡처한 것입니다. 백업-위드-주기적-병합.sh 스크립트를 사용하여 주기적으로 백업하는 데 사용할 것입니다.

5. 카우치베이스 데이터 백업

지난 블로그에서 Couchbase Autonomous Operator에 대해 단계별로 설명한 바 있습니다. 퍼시스턴트 볼륨을 사용하여 자가 복구가 가능한 고가용성 Couchbase 클러스터를 배포하는 방법. 이러한 단계를 따라 클러스터를 이미 배포했다고 가정하면, 아래 단계에서는 다음을 사용하여 자동 백업 기능을 설정하는 방법을 설명합니다. 크론잡. 데이터를 정기적으로 백업하고 실제로 재해 복구가 필요하기 전에 백업 복원을 테스트하여 복원 프로세스를 확인하는 것이 가장 좋은 방법입니다.

이 기능은 운영자가 제공하지 않으며 클러스터 관리자가 백업 정책을 정의하고 데이터 복원을 테스트하도록 맡깁니다. 이 섹션에서는 필요한 기능을 수행하는 데 사용할 수 있는 몇 가지 일반적인 패턴에 대해 설명합니다.

5.1. 스토리지 클래스 생성

아래의 쿠버네티스 리소스 정의는 전체 클러스터의 상태를 저장하는 백업의 일반적인 배열을 보여줍니다. 먼저 StorageClass 를 사용하여 포맷합니다. xfs 를 사용하여 최적의 성능을 구현할 수 있습니다.

에서 위의 정의를 사용하여 backup-sc.yaml 파일을 만들면 다음과 같이 스토리지 클래스를 만들 수 있습니다:

5.2. 영구 볼륨 만들기

영구 볼륨은 장애 발생 시 데이터를 안전하게 보관하기 위해 청구됩니다. 예상 데이터 세트 크기, 데이터 보존 일수, 증분 백업 사용 여부에 따라 클레임 크기를 계획해야 합니다.

위의 정의를 backup-pvc.yaml 를 클릭하고 클레임을 생성합니다:

5.3. 백업 리포지토리 구성

데이터의 스냅샷을 주기적으로 찍으려면 먼저 백업 아카이브 위치를 구성해야 합니다. 영구 볼륨을 마운트하고 백업 리포지토리를 초기화하는 작업이 만들어집니다. 리포지토리의 이름은 카우치베이스 이후 사양에서 클러스터 이름에 매핑됩니다.

위의 정의를 config.yaml 를 클릭하고 백업 리포지토리를 만듭니다:

5.3. 크론잡으로 백업 실행

에 설명된 대로 크론잡을 만듭니다. 주기적-백업.yaml 파일을 생성하고, a) 포드에서 백업 스크립트를 다운로드하고 b) 스크립트를 실행하고 영구 스토리지 볼륨을 사용하여 클러스터 데이터를 백업하는 방식으로 Couchbase 클러스터를 백업합니다.

위의 YAML에서는 5분마다 백업을 실행하고 있지만, 비즈니스 RPO를 충족할 수 있도록 빈도를 변경할 수 있습니다. Couchbase 클러스터는 네임스페이스 내에 배포되므로 emart 따라서 동일한 네임스페이스에 백업 크론잡을 배포합니다:

5.4 정기 백업 작업 확인

이 시점에서 5분마다 크론잡이 시작되는 것을 볼 수 있습니다. 그리고 일단 활성화되면 세 번 실행됩니다. initContainers (와겟-백업-스크립트, chmod-스크립트, 주기적-병합)를 순차적으로 실행한 다음 코인테이너 (삭제-스크립트):

각각의 로그를 볼 수 있습니다. initContainers 포드에 상태가 표시된 후 완료. . initContainers 우리가 관심을 갖는 것은 주기적 병합:

참고: 위의 로그에서 볼 수 있듯이 병합 단계 이전에는 4개의 백업을 사용할 수 있었고 병합 후에는 3개의 백업 스냅샷이 있습니다. 복원 포인트 in 백업-위드-주기적-병합.sh 스크립트.

이것으로 백업 섹션을 마칩니다.

6. 복원

백업과 마찬가지로, Kubernetes 작업으로 데이터를 새로운 Couchbase 클러스터로 복원할 수 있습니다.

임시 백업-복원 파드를 생성하여 사용 가능한 백업을 확인하거나 문제를 해결하려는 경우 동일한 퍼시스턴트 볼륨 클레임 를 새 파드에 추가합니다. 저장할 수 있는 파드의 정의는 다음과 같습니다. 백업-팟.yaml:

kubectl을 실행하여 일시적으로 파드를 불러온다:

백업 노드가 실행 중이면 해당 파드에 로그인할 수 있습니다:

그리고 실행 cbbackupmgr 목록 명령을 사용하여 기존 백업을 볼 수 있습니다:

또한 다음을 실행할 수도 있습니다. cbbackupmgr 복원 명령을 수동으로 실행합니다:

복원이 완료되면 포드를 삭제하기만 하면 됩니다:

7. 결론

미리 정의된 간격으로 주기적으로 백업을 수행하는 프로세스를 자동화하는 백업 크론잡을 구성하는 방법을 단계별로 안내해 드렸습니다. 여기서는 백업-위드-주기적-병합.sh 단일 스크립트 내에서 백업, 압축 및 병합을 실행하는 스크립트입니다. 그런 다음 이 스크립트는 주기적-백업.yaml 파일을 생성하여 쿠버네티스 환경 내에서 백업을 수행하는 프로세스를 자동화했습니다. 이 블로그에 설명된 모범 사례를 사용하여 정기적으로 백업을 수행하고 복원 명령을 사용하여 백업의 유효성을 정기적으로 확인하시기 바랍니다.

작성자

게시자 Sahni, 관리자 솔루션 아키텍트, Couchbase

CoE 팀의 매니저 솔루션 아키텍트인 Anuj Sahni는 고객이 Couchbase 기술을 사용하여 놀라운 엔터프라이즈 애플리케이션을 설계할 수 있도록 지원합니다. 카우치베이스에 입사하기 전에는 오라클에서 근무했으며, 가장 최근에는 오라클 서비스 클라우드의 수석 제품 관리자로 근무했습니다. 또한 고도로 분산되고 항상 사용 가능한 관계형 및 비관계형 데이터베이스를 개발한 광범위한 경험을 보유하고 있습니다. 그는 플로리다 대학교에서 전기 및 컴퓨터 공학 석사 학위를 받았습니다.

댓글 남기기