이 섹션에서는 Google Cloud를 사용하는 대신 ssh
및 파일 시스템을 사용하여 Cassandra 데이터베이스의 백업 및 복구를 구성하는 방법을 설명합니다. 참조:
클라우드 서비스가 없는 Cassandra 백업 및 복구란 무엇인가요?
클라우드 서비스가 없는 백업은 Cassandra 데이터베이스의 백업을 지정한 서버의 파일 시스템에 압축된 파일로 저장합니다. 백업은 재정의 파일에서 지정한 일정에 따라 수행됩니다. 서버 연결은 보안 SSH를 통해 이루어집니다.
클라우드 서비스 없이 백업 설정
다음 단계에서는 SSH 키 쌍 만들기와 같은 특정 작업을 완료하기 위한 일반적인 예시가 포함되어 있습니다. 설치에 적합한 방법을 사용합니다.
절차는 다음과 같습니다.
서버 및 SSH 설정
- 백업을 위해 Linux 또는 Unix 서버를 지정합니다. 이 서버는 Apigee Hybrid 런타임 영역에서 SSH를 사용해 연결할 수 있어야 합니다. 백업에는 충분한 저장용량이 있어야 합니다.
- 서버에 SSH 서버를 설정하거나 안전한 SSH 서버가 구성되어 있는지 확인합니다.
- SSH 키 쌍을 만들고 하이브리드 런타임 영역에서 액세스할 수 있는 경로에 비공개 키 파일을 저장합니다. 키 쌍에 빈 비밀번호를 사용해야 합니다. 그렇지 않으면 백업이 실패합니다. 예를 들면 다음과 같습니다.
ssh-keygen -t rsa -b 4096 -C exampleuser@example.com
Enter file in which to save the key (/Users/exampleuser/.ssh/id_rsa): $APIGEE_HOME/hybrid-files/certs/ssh_key Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in ssh_key Your public key has been saved in ssh_key.pub The key fingerprint is: SHA256:DWKo334XMZcZYLOLrd/8HNpjTERPJJ0mc11UYmrPvSA exampleuser@example.com The key's randomart image is: +---[RSA 4096]----+ | +. ++X| | . . o.=.*+| | . o . . o==o | | . . . =oo+o...| | . S +E oo .| | . . .. . o .| | . . . . o.. | | . ...o ++. | | .. .. +o+. | +----[SHA256]-----+ - 백업 서버에
apigee
이라는 이름의 사용자 계정을 만듭니다. 새apigee
사용자의/home
에 홈 디렉터리가 있는지 확인합니다. - 백업 서버의 새
/home/apigee
디렉터리에ssh
디렉터리를 만듭니다. - 공개 키(이전 예시의
ssh_key.pub
)를 새/home/apigee/ssh
디렉터리의authorized_keys
라는 파일에 복사합니다. 예를 들면 다음과 같습니다.cd /home/apigee
mkdir .ssh
cd .ssh
vi authorized_keys
- 백업 서버의
/home/apigee/
디렉터리 내에 백업 디렉터리를 만듭니다. 백업 디렉터리는apigee
사용자가 액세스할 수 있는 디렉터리면 모두 됩니다. 예를 들면 다음과 같습니다.cd /home/apigee
mkdir cassandra-backup
- 연결을 테스트합니다. Cassandra 포드가 SSH를 사용하여 백업 서버에 연결할 수 있는지 확인해야 합니다.
- Cassandra 포드의 셸에 로그인합니다. 예를 들면 다음과 같습니다.
kubectl exec -it -n apigee APIGEE_CASSANDRA_DEFAULT_0 -- /bin/bash
여기서 APIGEE_CASSANDRA_DEFAULT_0은 Casandra 포드의 이름입니다. 이를 연결하려는 포드의 이름으로 변경하세요.
- 서버 IP 주소를 사용하여 SSH를 통해 백업 서버에 연결합니다.
ssh apigee@BACKUP_SERVER_IP
- Cassandra 포드의 셸에 로그인합니다. 예를 들면 다음과 같습니다.
백업 일정 및 위치 설정
overrides.yaml
파일에서 백업 일정 및 대상을 설정합니다.
overrides.yaml
파일에 다음 매개변수를 추가합니다.매개변수
cassandra: backup: enabled: true keyFile: "PATH_TO_PRIVATE_KEY_FILE" server: "BACKUP_SERVER_IP" storageDirectory: "/home/apigee/BACKUP_DIRECTORY" cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps) schedule: "SCHEDULE"
예
cassandra: backup: enabled: true keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key" server: "34.56.78.90" storageDirectory: "/home/apigee/cassbackup" cloudProvider: "HYBRID" schedule: "0 2 * * *"
각 항목의 의미는 다음과 같습니다.
속성 설명 backup:enabled
백업은 기본적으로 사용 중지되어 있습니다. 이 속성을 true
로 설정해야 합니다.backup:keyFile
PATH_TO_PRIVATE_KEY_FILE
로컬 파일 시스템의 SSH 비공개 키 파일(SSH 키 쌍 생성 단계에서 만든
ssh_key
라는 이름의 파일) 경로입니다.backup:server
BACKUP_SERVER_IP
백업 서버의 IP 주소입니다.
backup:storageDirectory
BACKUP_DIRECTORY
백업 서버의 백업 디렉터리 이름입니다. 이는
home/apigee
내의 디렉터리여야 하며, 백업 디렉터리의 이름은 백업 디렉터리 생성 단계에서 만든cassandra_backup
입니다.backup:cloudProvider
HYBRID
cloudProvider: "HYBRID"
속성은 필수입니다.backup:schedule
SCHEDULE
백업이 시작되는 시간이며 표준 crontab 구문에 지정되어 있습니다. 기본값:
0 2 * * *
apigeectl
을 사용하여 클러스터의 스토리지 범위에 백업 구성을 적용합니다.$APIGEECTL_HOME/apigeectl --datastore -f YOUR_OVERRIDES_FILE
여기서 YOUR_OVERRIDES_FILE은 방금 수정한 재정의 파일의 경로입니다.
복원 구성
복원은 백업 위치에서 데이터를 가져와 노드 수가 동일한 새 Cassandra 클러스터에 복원합니다. 이전 Cassandra 클러스터에서는 데이터를 가져오지 않습니다.
아래의 복원 안내는 백업에 Google Cloud Storage를 사용하지 않는 단일 리전 배포에 적용됩니다. 다른 배포인 경우 다음을 참조하세요.
- 백업에 Google Cloud Storage를 사용하는 단일 리전 배포의 경우 Cassandra 백업 및 복구를 참조하세요.
- 멀티 리전 배포의 경우 GKE 및 GKE On-Prem의 멀티 리전 배포를 참조하세요.
Cassandra 백업을 복원하려면 다음 안내를 따르세요.
- 하이브리드 런타임 배포를 복원하는 데 사용되는 기존 Kubernetes 클러스터 내에서 새 네임스페이스를 만듭니다. 새 네임스페이스에 대해 원본 네임스페이스 이름을 사용하지 마세요. 복원에 이전 네임스페이스를 사용하지 마세요.
-
루트 하이브리드 설치 디렉터리에 새
overrides-restore.yaml
파일을 만듭니다. -
전체 Cassandra 구성을 원본
overrides.yaml
파일에서 새overrides-restore.yaml
파일로 복사합니다. 예를 들면 다음과 같습니다.cp ./overrides.yaml ./overrides-restore.yaml
- 새
overrides-restore.yaml
파일에 네임스페이스 요소를 추가합니다.매개변수
namespace: YOUR_RESTORE_NAMESPACE cassandra: ... restore: enabled: true keyFile: "PATH_TO_PRIVATE_KEY_FILE" server: "BACKUP_SERVER_IP" storageDirectory: "/home/apigee/BACKUP_DIRECTORY" cloudProvider: "HYBRID" # required verbatim "HYBRID" (all caps) snapshotTimestamp: "TIMESTAMP" ...
예
namespace: cassandra-restore cassandra: restore: enabled: true keyFile: "/Users/exampleuser/apigee-hybrid/hybrid-files/service-accounts/private.key" server: "34.56.78.90" storageDirectory: "/home/apigee/cassbackup" cloudProvider: "HYBRID" snapshotTimestamp: "20201001183903"
- 다음 명령어를 실행하여 이전 네임스페이스의 Cassandra 노드에서
app
라벨을 변경합니다.kubectl label pods --overwrite --namespace=OLD_NAMESPACE -l app=apigee-cassandra app=apigee-cassandra-old
- 새 하이브리드 런타임 배포를 생성합니다. 그러면 새 Cassandra 클러스터가 생성되고 백업 데이터가 클러스터로 복원되기 시작합니다.
./apigeectl init -f ../overrides-restore.yaml
./apigeectl apply -f ../overrides-restore.yaml
-
복원이 완료되면 새 네임스페이스에서 Cassandra 클러스터를 사용하도록 트래픽을 전환해야 합니다. 다음 명령어를 실행하여 트래픽을 전환합니다.
kubectl get rs -n OLD_NAMESPACE # look for the 'apigee-connect' replicaset
kubectl patch rs -n OLD_NAMESPACE APIGEE_CONNECT_RS_NAME -p '{"spec":{"replicas" : 0}}'
- 트래픽 전환이 완료되면
restore
구성을 삭제하고backup
구성을overrides-restore.yaml
파일에 추가하여 복원된 클러스터에서 백업을 다시 구성할 수 있습니다. YOUR_RESTORE_NAMESPACE를 1단계에서 만든 새 네임스페이스 이름으로 바꿉니다.namespace: YOUR_RESTORE_NAMESPACE cassandra: ... backup: enabled: true serviceAccountPath: SA_JSON_FILE_PATH dbStorageBucket: CLOUD_STORAGE_BUCKET_PATH schedule: BACKUP_SCHEDULE_CODE ...
그런 후 다음 명령어를 사용하여
backup
구성을 적용합니다../apigeectl apply -f ../overrides-restore.yaml
각 항목의 의미는 다음과 같습니다.
속성 | 설명 |
---|---|
namespace |
YOUR_RESTORE_NAMESPACE 새 Cassandra 클러스터의 1단계에서 만든 새 네임스페이스의 이름입니다. 원래 클러스터에 사용한 네임스페이스와 동일한 네임 스페이스를 사용하지 마세요. |
restore:enabled |
복원은 기본적으로 사용 중지되어 있습니다. 이 속성을 true 로 설정해야 합니다. |
restore:keyFile |
PATH_TO_PRIVATE_KEY_FILE 로컬 파일 시스템의 SSH 비공개 키 파일(SSH 키 쌍 생성 단계에서 만든 |
restore:server |
BACKUP_SERVER_IP 백업 서버의 IP 주소입니다. |
restore:storageDirectory |
BACKUP_DIRECTORY 백업 서버의 백업 디렉터리 이름입니다.
이는 |
restore:cloudProvider |
|
restore:snapshotTimestamp |
TIMESTAMP
복원할 백업 스냅샷의 타임스탬프입니다. 사용할 수 있는 타임스탬프를 확인하려면
여기서 20210203213003은 해당 시점에 생성된 백업을 복원하려는 경우에 사용하는 |