이 문서에서는 Ubuntu에서 Couchbase 커뮤니티 에디션과 엔터프라이즈 에디션을 백업하는 방법과 기본 Couchbase 백업 전략을 설정하는 방법에 대한 개요를 설명합니다.
여기에 설명된 스크립트와 기술은 프로덕션 환경에서 사용할 수 있는 것이 아니므로 장애에 강하도록 환경에 따라 몇 가지 개선이 필요할 수 있습니다.
또한 이 글에서 언급되지 않은 많은 선택적 매개변수는 공식 문서를 읽어보실 것을 적극 권장합니다.
일반 권장 사항
백업 머신
데이터 용량이 적고 노드 수가 적은 클러스터에서는 노드 중 하나를 사용하여 사용량이 적은 시간에 데이터를 백업할 수도 있지만, 항상 동일한 네트워크 내에서 실행되는 외부 시스템에서 백업을 실행하는 것이 좋습니다.
정상적인 백업 프로세스를 실행하는 데 필요한 메모리와 CPU의 양을 과소평가하지 마세요. 동일한 컴퓨터를 공유하면 클러스터 성능에 영향을 미칠 수 있으며 다음과 같은 문제도 발생할 수 있습니다. 사용 가능한 리소스가 충분하지 않으면 백업이 실패할 수 있습니다.
백업을 위해 추가 서버를 운영하는 비용을 줄여야 하는 경우, 대부분의 클라우드 제공업체에서는 인스턴스 시작 시기를 예약할 수 있으며 백업 스크립트에서 모든 작업이 완료되면 컴퓨터를 종료할 수 있습니다.
쿠버네티스에서는 다음을 사용할 수 있으므로 훨씬 더 쉬울 것입니다. 크론잡스 를 사용하여 사실상 동일한 작업을 수행하거나 단순히 카우치베이스 자율 운영자를 사용하는 경우 백업 정책.
보존 정책
증분 및 누적 백업은 마지막 전체 백업에 따라 달라집니다. 따라서 날짜만 기준으로 이전 백업을 보관할 수 없으며 종속성도 고려해야 한다는 점을 기억하는 것이 중요합니다.
SLA가 작은 경우에는 마지막 몇 개의 백업을 쉽게 액세스할 수 있는 블록 스토리지에 남겨두는 것도 고려해야 합니다. 데이터베이스의 크기와 네트워크 속도에 따라 일부 오브젝트 스토리지에서 데이터를 다운로드하는 데 귀중한 시간이 소요될 수 있습니다.
복구 테스트
모든 백업을 테스트하는 것은 불가능하지만, 백업의 상태를 확인하기 위해 반복적인 백업 테스트 전략을 세우는 것이 중요합니다. 테스트 백업은 데이터 복구 도구에 익숙해지고 데이터베이스를 완전히 복구하는 데 필요한 시간을 파악하는 데도 도움이 됩니다(문제가 발생했을 때 알아야 할 2가지 중요한 사항).
예를 들어 버킷을 처음 만들 때 구성되는 각 vBucket의 복제본 수와 같은 데이터 손실을 방지하는 여러 기능이 내부적으로 이미 마련되어 있습니다. 데이터베이스가 올바르게 구성되었다고 가정할 때 데이터베이스를 복구해야 할 가능성이 가장 높은 시나리오는 다음과 같습니다:
- 복제본 수보다 많은 노드가 손실된 경우. (예: 2개의 복제본을 구성했지만 한 번에 3개의 노드가 손실된 경우)
- 전체 데이터베이스가 일관성이 없는 작업(예: 새 애플리케이션 버전이 많은 수의 레코드를 업데이트/삭제하는 버그가 있는 상태로 배포됨)
백업 머신 준비하기
전용 머신에서 백업을 실행하려는 경우 백업을 실행하려면 bin 폴더를 카우치베이스 설치에서 이 컴퓨터로 복사하거나, 간단히 카우치베이스 설치 를 실행해야 합니다. 예를 들어 우분투에서는 다음 명령을 실행해야 합니다:
1 2 3 |
curl -O https://패키지.couchbase.com/릴리스/카우치베이스-릴리스/카우치베이스-릴리스-1.0-amd64.deb sudo dpkg -i ./카우치베이스-릴리스-1.0-amd64.deb sudo apt-get 업데이트 |
그런 다음 사용 중인 Couchbase 버전에 따라 다음 명령을 실행해야 합니다:
카우치베이스 커뮤니티:
1 |
sudo apt-get 설치 카우치베이스-서버-커뮤니티 |
카우치베이스 엔터프라이즈
1 |
sudo apt-get 설치 카우치베이스-서버 |
그 후 이 문서에 필요한 모든 파일은 이 문서의 /opt/couchbase/bin 폴더 ("/응용 프로그램/카우치베이스 서버 앱/콘텐츠/리소스/카우치베이스 코어/빈“ Mac의 경우).
참조하는 불편함을 줄이기 위해 bin 폴더에 추가하는 것이 좋습니다. PATH 또는 /usr/bin 디렉터리로 이동합니다:
카우치베이스 커뮤니티:
1 |
/usr/bin$ sudo ln -s /opt/카우치베이스/bin/cbbackup cbbackup |
카우치베이스 엔터프라이즈:
1 |
/usr/bin$ sudo ln -s /opt/카우치베이스/bin/cbbackupmgr cbbackupmgr |
카우치베이스 커뮤니티 백업 방법
Couchbase 커뮤니티에는 Couchbase 클러스터의 데이터를 백업하고 복원하는 데 도움이 되는 두 가지 주요 도구가 제공됩니다: cbbackup 그리고 cbrestore. 두 도구는 모두 bin 디렉토리에 있습니다.
CB백업에는 3가지 주요 모드가 있습니다:
-
-
- 전체 - 그리고 전체 모드가 전체 백업을 수행합니다.
- diff - (기본값) diff 모드는 마지막 전체 또는 증분 백업 이후의 변경 사항만 백업하는 차등 증분 백업을 수행합니다.
- accu - 그리고 accu 모드는 누적 증분 백업을 수행하여 마지막 전체 백업 이후의 모든 변경 사항을 백업합니다.
-
간단한 백업 전략은 다음과 비슷할 수 있습니다:
-
-
- 일요일 오전 1시에 전체 백업;
- 매일 오전 1시에 증분 백업;
-
먼저 전체 백업을 실행할 스크립트를 만들고 다음과 같은 파일을 만들어 보겠습니다. full_backup_couchbase.sh 를 다음과 같은 내용으로 업데이트합니다:
1 2 3 4 5 6 7 8 |
#!/bin/bash -e echo "카우치베이스 전체 백업 실행 중" cd /opt/카우치베이스/bin/ ./cbbackup http://카우치베이스_노드_IP:8091 /YOUR/백업/DIR -u 사용자 이름 -p yourpassword! -m 전체 echo "전체 카우치베이스 백업 완료" |
그런 다음 CronTab을 사용하여 전체 백업을 예약하고 다음 명령을 실행해 보겠습니다:
1 |
sudo vim /등/크론탭 |
"i'를 클릭하여 에디션 모드로 들어간 다음 다음 줄을 추가합니다:
1 |
0 1 * * Sun yourLocalUser /PATH/TO/YOUR/스크립트/전체_백업_카우치베이스.sh |
참고 yourLocalUser 가 컴퓨터의 로컬 사용자를 가리키면 스크립트는 해당 컨텍스트를 사용하여 실행됩니다. 완료되면 파일을 저장합니다(vim에 익숙하지 않은 경우 "esc", ":wq").
이제 증분 백업을 실행하는 스크립트를 만들어 보겠습니다. 여기서 유일한 차이점은 모드 매개변수를 설정합니다. 라는 파일을 만듭니다. incremental_backup_couchbase.sh 를 클릭하고 다음 콘텐츠를 추가합니다:
1 2 3 4 5 6 7 |
#!/bin/bash -e echo "카우치베이스 증분 백업 실행" cd /opt/카우치베이스/bin/ ./cbbackup http://YOUR_COUCHBASE_NODE_IP:8091 /YOUR/백업/DIR -u YOUR_COUCHBASE_USERNAME -p your_couchbase_password -m diff echo "카우치베이스 증분 백업 완료" |
또한 이 스크립트를 탭 CronTab 파일에 추가해 보겠습니다:
1 |
sudo vim /등/크론탭 |
그런 다음 다음 줄을 추가합니다:
1 |
0 1 * * 1-6 yourLocalUser /PATH/TO/YOUR/스크립트/incremental_backup_couchbase.sh |
위의 크론탭에 따르면 이 스크립트는 월요일부터 토요일까지 오전 01시에 실행됩니다. 두 스크립트를 모두 실행 가능한 상태로 만드는 것을 잊지 마세요:
1 2 |
chmod +x incremental_backup_couchbase.sh chmod +x 전체_백업_카우치베이스.sh |
두 스크립트를 모두 실행하여 제대로 작동하는지 확인합니다. 이 글의 마지막 세션에서는 크론탭을 테스트하는 방법도 배워봅니다.
카우치베이스 엔터프라이즈 백업 방법
카우치베이스 엔터프라이즈에는 다음과 같은 보다 포괄적인 도구가 함께 제공됩니다. cbbackupmgr 를 사용하면 몇 가지 추가 기능을 사용할 수 있습니다:
-
-
- 백업 저장소의 백업 압축을 통해 디스크 공간을 확보하세요;
- 백업 아카이브의 내용을 나열합니다;
- 두 개 이상의 백업을 병합합니다;
-
이제 몇 가지 추가 기능이 있으므로 다음을 수행하는 보다 정교한 스크립트를 만들 수 있습니다:
-
-
- 아직 구성되지 않은 경우 디렉터리를 구성합니다(cbbackupmgr 구성)
- 전체/델타 백업 실행
- 이전 증분 백업을 병합하여 디스크 공간 확보하기
-
다음은 다음과 같은 스크립트입니다. backup_with_periodic_merge.sh 를 사용하여 위에서 설명한 것과 정확히 일치하는 작업을 수행할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
#!/bin/bash set -e #DIR="${BASH_SOURCE%/*}" #if [[ ! -d "$DIR" ]]; then DIR="$PWD"; fi #. "$DIR/cbbackupmgr" #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: # 기능 _사용 #::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: 함수 _usage { echo "사용법: ./backup-with-periodic-merge.sh [옵션]" echo "이 스크립트는 먼저 클러스터 전체 백업을 수행하고 복원 지점보다 오래된 백업을 병합하여 지정된 수의 복원 지점을 유지합니다." echo " 옵션:" echo " --아카이브 echo " --repo echo " --cluster echo " --사용자 이름 echo " --password echo " --threads 백업 프로세스에 사용되는 스레드 수(기본값: 2)" echo " --restorepoints 정전 시 복원을 위한 백업 수(기본값: 3)" echo " --도움말 이 도움말을 표시하고 종료" exit 5 } #는 기본값을 설정하며, 모두 환경 변수로 재정의하거나 cli를 통해 전달할 수 있습니다. CB_USERNAME=${CB_USERNAME:='관리자'} CB_PASSWORD=${CB_PASSWORD:='password'} 클러스터=${클러스터:='localhost'} 아카이브=${아카이브:='/backups'} REPO=${REPO:='couchbase'} 스레드=${스레드:=2} 복원 포인트=${복원 포인트=3} #***************************************************************************# BACKUPREGEX="[0-9]{4}-[0-9]{2}-[0-9]{2}T[0-9]{2}_[0-9]{2}_[0-9]{2}.[0-9]{6}" CBBACKUPMGR=cbbackupmgr # 모든 CLI 인수 구문 분석 동안 [ $# -gt 0 ] do case $1 in --사용자 이름 ) CB_USERNAME=$2 shift 1 ;; --비밀번호 ) CB_PASSWORD=$2 shift 1 ;; --클러스터 ) 클러스터=$2 shift 1 ;; --아카이브 ) 아카이브=$2 shift 1 ;; --스레드 ) 스레드=$2 shift 1 ;; --복원 포인트 ) 복원 포인트=$2 shift 1 ;; --repo ) REPO=$2 shift 1 ;; --도움말 ) _usage ;; *) echo 오류 : 유효하지 않음 명령 라인 옵션 : "$1" _usage ;; esac shift 완료 # 디렉토리가 이미 구성되어 있는지 확인하기 REPODIR="${아카이브}" 만약 [[ "${REPODIR:${#REPODIR}-1}" != "/" ]]; 다음 REPODIR="${ARCHIVE}/${REPO}" else REPODIR="${ARCHIVE}${REPO}" fi echo $REPODIR 만약 [ ! -d "$REPODIR" ]; 다음 echo "백업 리포지토리가 아직 존재하지 않습니다." CMD="${CBBACKUPMGR} config --아카이브 $ARCHIVE --repo $REPO" echo "백업 리포지토리 구성 중..." 평가 "$CMD" fi ######################################################################################### ### 카우치베이스 백업은 4단계로 실행됩니다: ### 1) 전체/델타 백업 ### 2) 컴팩트한 마지막 백업 ### 3) 병합 ######################################################################################### ################# 1단계 : 백업을 시작합니다. echo "---------------------------------------------------------" echo 시작 STEP 1: 백업 : "$(날짜)" CMD="${CBBACKUPMGR} 백업 --아카이브 $ARCHIVE --repo $REPO --클러스터 couchbase://${CLUSTER} --username $CB_USERNAME --password $CB_PASSWORD --threads ${THREADS}" echo -e "백업 실행 중... \n 명령: $CMD" 평가 "$CMD" ################2단계 : 컴팩트 백업 echo "---------------------------------------------------------" echo 시작 STEP 2: 컴팩트 : "$(날짜)" 백리스트=$("${CBBACKUPMGR}" 목록 --아카이브 "${아카이브}" --repo "${REPO}" | awk '{인쇄 $NF}' | grep -E "${BACKUPREGEX}") echo -e "백업 스냅샷 목록 ... \n\n$BACKUPLIST" 마지막 백업=$(echo "${백업 목록}" | sed '$!d') echo 마지막 백업 이름 는: "${LASTBACKUP}" CMD="${CBBACKUPMGR} compact --아카이브 ${ARCHIVE} --repo ${REPO} --backup ${LASTBACKUP}" echo -e "백업 압축 중...\n 명령: ${CMD}" 평가 "$CMD" ###############3단계 : 이전 백업 병합하기 echo "---------------------------------------------------------" echo 시작 STEP 3: 병합 old 백업 : "$(날짜)" COUNT=$(echo "${백업 목록}" | wc -l) 평가 "${CBBACKUPMGR}" 목록 --아카이브 "${아카이브}" --repo "${REPO}" 만약 [ "$COUNT" -gt "1TP4트레스토어포인트" ]; 다음 시작=$(echo "${백업 목록}" | sed -n 1p) END=$(echo "${백업 목록}" | sed -n $((1+COUNT-복원 포인트))p) echo -e "시작 $START, 종료 $END" CMD="${CBBACKUPMGR} merge --archive ${ARCHIVE} --repo ${REPO} --start ${START} --end ${END}" echo -e "이전 백업 병합 중...\n 명령: ${CMD}" 평가 "$CMD" fi 평가 "${CBBACKUPMGR}" 목록 --아카이브 "${아카이브}" --repo "${REPO}" |
스크립트를 실행하려면 다음과 같이 지정할 수 있습니다:
1 |
./백업_위드_주기적_병합.sh --아카이브 /백업/증분/ --클러스터 YOUR_COUCHBASE_IP:8091 --사용자 이름 cb_user --비밀번호 cb_password |
이 명령을 매번 입력하지 않으려면 모든 매개 변수가 포함된 두 번째 스크립트를 만들어 보겠습니다. 여기에는 cb_incremental_backup.sh:
1 2 3 4 5 6 |
#!/bin/bash -e cd /홈/우분투/스크립트/ ./백업_위드_주기적_병합.sh --아카이브 /백업/증분/ --클러스터 10.0.0.8:8091 --사용자 이름 백업_사용자 --비밀번호 baWN4s9wwpb5PrmN echo "Couchbase PROD 증분 백업이 완료되었습니다." | 메일 -s "프로덕션 - 카우치베이스 증분 백업" 백업@내 회사.com -a "FROM:somegroup@mycompany.comr" |
여기서는 두 파일이 모두 폴더 아래에 있다고 가정합니다. /home/ubuntu/scripts. 스크립트 마지막에 저는 또한 포스트픽스 를 사용하여 전체 프로세스가 완료되면 사용자 그룹에 이메일을 보낼 수 있습니다. 백업이 성공적으로 실행되었는지 모니터링하는 더 좋은 방법이 분명히 있지만, 아직 더 나은 전략이 없다면 이메일을 보내는 것이 최소한 기본적인 모니터링 유형입니다.
크론탭을 사용하여 이 스크립트를 실행하도록 예약하는 방법은 커뮤니티 에디션에서 수행한 것과 매우 유사하며, 다음 명령을 실행하기만 하면 됩니다:
1 |
sudo vim /등/크론탭 |
그런 다음 다음 줄을 추가합니다:
1 |
0 1 * * * yourLocalUser /홈/우분투/스크립트/cb_incremental_backup.sh |
참고 yourLocalUser 가 컴퓨터의 로컬 사용자를 가리키면 스크립트는 해당 컨텍스트를 사용하여 실행됩니다. 완료되면 파일을 저장합니다(vim에 익숙하지 않은 경우 "esc", ":wq").
그리고 cb_incremental_backup.sh 스크립트는 매일 오전 01시에 증분 백업을 실행합니다. 전체 백업을 한 번만 실행하고 증분 백업을 여러 번 실행하는 것을 피하려면 수시로 전체 백업을 추가로 실행하는 것이 좋습니다.
크론탭 테스트
다음을 사용하여 CronTab을 빠르게 테스트할 수 있습니다. 크로니터다음 명령을 실행하여 설치합니다.
1 2 |
curl -sOL https://cronitor.io/dl/cronitor-stable-linux-amd64.tgz sudo 타르 xvf 크로니터-안정적-리눅스-amd64.tgz -C /usr/bin/ |
그런 다음 아래 명령을 실행하여 예약된 모든 작업을 나열합니다:
1 |
크로니터 선택 |
화살표 키를 사용하여 목록을 탐색하고 실행하려는 항목을 선택한 다음 Enter 키를 누릅니다:
모든 것이 올바르게 구성되었다면 스크립트가 성공적으로 실행되어야 합니다.