데이터베이스 백업 및 복구는 데이터베이스 관리자(DBA)가 수행하는 중요한 일상 작업 중 하나입니다. 데이터베이스 백업은 데이터 손실 시 데이터를 복구하는 데 사용할 수 있는 데이터 복사본입니다.
이 블로그는 Apache® Cassandra® 데이터베이스를 백업하고 실패 후 복원하는 방법을 보여줍니다.
소개
Apache Cassandra는 분산되어 있지만 클러스터의 노드 중 하나에 데이터가 포함되어 있는 한 비즈니스 데이터 손실 없이 단일 및 다중 노드 오류를 견딜 수 있습니다. 그러나 가장 좋은 방법은 데이터베이스에 대한 백업을 구성하는 것입니다.
전체 클러스터 재구축, 데이터 손상, 우발적인 데이터 삭제 등과 같은 장애가 발생한 경우 백업에서 데이터를 복구하고 영향을 최소화하거나 전혀 없이 비즈니스 운영을 계속할 수 있습니다.
점점 더 많은 회사에서 Cassandra와 같은 NoSQL 데이터베이스를 사용하여 빅 데이터로 더 널리 알려진 대량의 비즈니스 데이터를 성공적으로 관리하고 있습니다. 많은 주요 조직에서 널리 사용되는 Cassandra는 확장성, 내결함성 및 일관성을 보장하여 빅 데이터를 지원합니다.
카산드라 데이터베이스 백업 및 복원
다음 유틸리티를 사용하여 Cassandra 데이터베이스의 스냅샷을 만들고 필요할 때 복원할 수 있습니다.
nodetool
(스냅샷을 찍기 위해)sstableloader
(스냅샷 백업을 복원하려면)
다음 이미지는 sstableloader
를 사용하여 클라우드 클러스터에서 Cassandracluster로 이동하는 것을 보여줍니다. :
이미지 출처 :https://dzone.com/articles/using-casandras-sstable-bulk
백업
다음 예에서는 nodetool
을 사용합니다. Cassandra 데이터베이스keyspace(users)의 스냅샷을 찍기 위해 직원이라는 테이블과 함께 .
소스 Cassandra 클러스터 세부정보:
$ nodetool -u cassandra -pw ******** -h localhost status
Datacenter: us-central1
=======================
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns (effective) Host ID Rack
UN 10.128.0.2 121.52 KiB 256 63.3% 5957997f-7471-4c21-bead-37a6604812e2 f
UN 10.128.0.3 92.22 KiB 256 68.0% 87c2a663-a965-4675-b5ed-c4a46d77c796 f
UN 10.128.0.4 225.3 KiB 256 68.8% 8e12557f-be00-4387-bff3-ef51f431b9a0 f
키스페이스를 백업하려면 다음 명령어를 사용하세요. :
$ nodetool -h localhost -u cassandra -pw ****** snapshot users -t "users-201904201800"
Requested creating snapshot(s) for [users] with snapshot name [users-201904201800] and options {skipFlush=false}
Snapshot directory: users-201904201800
그러면 다음 예와 같이 백업 스냅샷이 생성됩니다.
/bitnami/cassandra/data/data/users/employee-c1319df0636211e9a0e3570eb7f8fd5f/snapshots/users-201904201800
$ ls -ltr
total 44
-rw-r--r-- 2 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db
-rw-r--r-- 2 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db
-rw-r--r-- 2 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db
-rw-r--r-- 2 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db
-rw-r--r-- 2 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32
-rw-r--r-- 2 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db
-rw-r--r-- 2 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db
-rw-r--r-- 2 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt
-rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json
-rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql
$ date
Sat Apr 20 12:08:21 UTC 2019
이제 /snapshot을 보관하세요. 디렉토리 파일을 백업하고 tar 파일을 /bitnami/Cassandra/data/data/backup으로 이동합니다. 디렉토리.
$ tar -cvf users-201904201800.tar *.*
manifest.json
md-1-big-CompressionInfo.db
md-1-big-Data.db
md-1-big-Digest.crc32
md-1-big-Filter.db
md-1-big-Index.db
md-1-big-Statistics.db
md-1-big-Summary.db
md-1-big-TOC.txt
schema.cql
$ ls -ltr
total 64
-rw-r--r-- 2 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db
-rw-r--r-- 2 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db
-rw-r--r-- 2 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db
-rw-r--r-- 2 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db
-rw-r--r-- 2 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32
-rw-r--r-- 2 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db
-rw-r--r-- 2 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db
-rw-r--r-- 2 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt
-rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json
-rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql
-rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:22 users-201904201800.tar
cp *.tar /bitnami/cassandra/data/data/backup.
/bitnami/cassandra/data/data/backup
$ ls -ltr
-rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar
백업 tar 파일을 기본이 아닌 위치에 복사한 후 직원 표.
참고 :Cassandra는 정의된 파티션 키와 복제 요소를 기반으로 클러스터 전체에 데이터를 배포하므로 모든 노드에서 이 백업 명령을 실행해야 합니다. 이 예에서는 모든 노드를 한 번에 백업하는 crontab의 Linux® 셸 스크립트를 사용합니다.
$ cqlsh -u cassandra -p *******
Connected to Test_Cassandra at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cassandra@cqlsh> use users;
cassandra@cqlsh:users> select * from employee;
emp_id | employee_address | employee_name
--------+------------------+---------------
8796 | Singapore | Joy
5647 | London | Mike
3452 | Canada | Nancy
6453 | China | John
(4 rows)
cassandra@cqlsh:users> drop table employee;
cassandra@cqlsh:users> select * from employee;
InvalidRequest: Error from server: code=2200 [Invalid query] message="unconfigured table employee"
복원
직원을 복원하려면 키스페이스(사용자)의 테이블 스냅샷 백업, sstableloader
를 사용해야 합니다. 공익사업. sstableloader
유틸리티는 stable 집합을 각 노드에 복사할 뿐만 아니라 클러스터에 대해 정의된 복제 전략을 기반으로 데이터의 적절한 부분을 모든 노드에 전송합니다. 데이터를 복원하기 위해 빈 테이블이 필요하지 않습니다.
다음 단계를 사용하여 tar 파일을 backup/users로 복원합니다. :
$ pwd
/bitnami/cassandra/data/data/backup/users
$ ls -ltr
total 20
-rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar
$ tar -xvf *.tar
manifest.json
md-1-big-CompressionInfo.db
md-1-big-Data.db
md-1-big-Digest.crc32
md-1-big-Filter.db
md-1-big-Index.db
md-1-big-Statistics.db
md-1-big-Summary.db
md-1-big-TOC.txt
schema.cql
복원할 테이블 이름으로 사용자 디렉터리에 대한 소프트 링크를 만듭니다.
$ ln -s /bitnami/cassandra/data/data/backup/users employee
$ ls -ltr
total 64
-rw-r--r-- 1 cassandra cassandra 865 Apr 20 12:05 schema.cql
-rw-r--r-- 1 cassandra cassandra 92 Apr 20 12:05 md-1-big-TOC.txt
-rw-r--r-- 1 cassandra cassandra 56 Apr 20 12:05 md-1-big-Summary.db
-rw-r--r-- 1 cassandra cassandra 4683 Apr 20 12:05 md-1-big-Statistics.db
-rw-r--r-- 1 cassandra cassandra 32 Apr 20 12:05 md-1-big-Index.db
-rw-r--r-- 1 cassandra cassandra 16 Apr 20 12:05 md-1-big-Filter.db
-rw-r--r-- 1 cassandra cassandra 10 Apr 20 12:05 md-1-big-Digest.crc32
-rw-r--r-- 1 cassandra cassandra 134 Apr 20 12:05 md-1-big-Data.db
-rw-r--r-- 1 cassandra cassandra 43 Apr 20 12:05 md-1-big-CompressionInfo.db
-rw-r--r-- 1 cassandra cassandra 31 Apr 20 12:05 manifest.json
-rw-r--r-- 1 cassandra cassandra 20480 Apr 20 12:23 users-201904201800.tar
lrwxrwxrwx 1 cassandra cassandra 41 Apr 20 15:56 employee -> /bitnami/cassandra/data/data/backup/users
.cql을 사용하여 테이블 구조를 만듭니다. 스냅샷 백업에 의해 생성된 파일입니다.
keyspace 백업을 실행할 때 , schema.cql이라는 파일을 생성합니다. 키스페이스에 있는 개체의 데이터 정의 언어(DDL)를 포함하는 .
schema.cql 사용 실수로 삭제된 직원 개체를 생성합니다.
$ cqlsh -u cassandra -p ******** -f schema.cql
Warnings:
dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0
dclocal_read_repair_chance table option has been deprecated and will be removed in version 4.0
$ cqlsh -u cassandra -p ******* -f schema.cql
sstableloader
를 사용하여 스냅샷에서 데이터 복원 , 모든마구간을 읽습니다. 백업에서 데이터를 클러스터로 스트리밍합니다. 그런 다음 클러스터에 정의된 복제 전략에 따라 데이터의 해당 부분을 각 노드로 전송합니다.
Syntax: sstableloader -u <username> -pw passwrod -d <hostname> <employee table softlink name with location>
다음 명령을 사용하여 데이터를 복원하십시오.
$ sstableloader -u cassandra -pw ******** -d cassandra-cluster-1-node-0 /bitnami/cassandra/data/data/backup/users/employee
Established connection to initial hosts
Opening sstables and calculating sections to stream
Streaming relevant part of /bitnami/cassandra/data/data/backup/users/md-1-big-Data.db to [/10.128.0.2, /10.128.0.3, /10.128.0.4]
progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:0/1 0 % [/10.128.0.4]0:1/1 100% total: 33% 0.032KiB/s (avg: 0.032KiB/s)
progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:0/1 0 % [/10.128.0.4]0:1/1 100% total: 33% 0.000KiB/s (avg: 0.031KiB/s)
progress: [/10.128.0.2]0:0/1 0 % [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 66% 0.113KiB/s (avg: 0.050KiB/s)
progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 85.129KiB/s (avg: 0.074KiB/s)
progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 0.000KiB/s (avg: 0.073KiB/s)
progress: [/10.128.0.2]0:1/1 100% [/10.128.0.3]0:1/1 100% [/10.128.0.4]0:1/1 100% total: 100% 0.000KiB/s (avg: 0.073KiB/s)
Summary statistics:
Connections per host : 1
Total files transferred : 3
Total bytes transferred : 0.393KiB
Total duration : 5346 ms
Average transfer rate : 0.073KiB/s
Peak transfer rate : 0.074KiB/s
마구간에서 데이터를 검색하려면 모든 노드에 대해 이 단계를 반복하세요.
nodetool repair
를 사용하여 데이터 복구 , 명령이 실행되는 노드에 저장된 데이터의 모든 복제본을 비교하고 각 복제본을 최신 버전으로 업데이트합니다.
$ nodetool repair -u Cassandra -pw ********
[2019-04-21 07:59:14,701] Starting repair command #1 (5b123ad0-640b-11e9-a0e3-570eb7f8fd5f), repairing keyspace users with repair options (parallelism: parallel, primary range: false, incremental: true, job threads: 1, ColumnFamilies: [], dataCenters: [], hosts: [], # of ranges: 768, pull repair: false)
[2019-04-21 07:59:16,450] Repair completed successfully
[2019-04-21 07:59:16,451] Repair command #1 finished in 1 second
[2019-04-21 07:59:16,460] Replication factor is 1. No repair is needed for keyspace 'system_auth'
[2019-04-21 07:59:16,474] Starting repair command #2 (5c22e780-640b-11e9-a0e3-570eb7f8fd5f), repairing keyspace system_traces with repair options (parallelism: parallel, primary range: false, incremental: true, job threads: 1, ColumnFamilies: [], dataCenters: [], hosts: [], # of ranges: 513, pull repair: false)
finished (progress: 1%)
[2019-04-21 07:59:17,653] Repair completed successfully
[2019-04-21 07:59:17,653] Repair command #2 finished in 1 second
직원에 대한 데이터 검증 우리가 떨어뜨린 테이블. 이전 명령은 이전에 수행한 백업에서 데이터를 복원했습니다. 이제 데이터가 제대로 복원되었는지 확인하기 위해 데이터를 검증해야 합니다.
$ cqlsh -u cassandra -p ********
Connected to Test_Cassandra at 127.0.0.1:9042.
[cqlsh 5.0.1 | Cassandra 3.11.4 | CQL spec 3.4.4 | Native protocol v4]
Use HELP for help.
cassandra@cqlsh> use users;
cassandra@cqlsh:users> select * from employee;
emp_id | employee_address | employee_name
--------+------------------+---------------
8796 | Singapore | Joy
5647 | London | Mike
3452 | Canada | Nancy
6453 | China | John
(4 rows)
결론
이 게시물에서는 테이블을 Cassandradatabase에 백업하고 복원하는 방법을 배웠습니다. 그러나 전체 키스페이스/데이터베이스를 복원해야 하는 경우 테이블 복원 부분 없이 이전 단계를 사용하십시오. 키스페이스를 다시 만들어야 합니다. sstableloader
를 사용하여 데이터 로드 .
소스 및 대상 데이터베이스 클러스터의 노드 수는 sstableloader
에서 중요하지 않습니다. 각 마구간을 읽기 때문에 그런 다음 클러스터에 정의된 복제 전략에 따라 데이터를 배치하면서 데이터를 클러스터로 스트리밍합니다.
피드백 탭을 사용하여 의견을 남기거나 질문을 하십시오.
전문가 관리, 관리 및 구성으로 환경 최적화
Rackspace의 애플리케이션 서비스(RAS) 전문가는 광범위한 애플리케이션 포트폴리오에서 다음과 같은 전문적이고 관리되는 서비스를 제공합니다.
- 전자상거래 및 디지털 경험 플랫폼
- 전사적 자원 관리(ERP)
- 비즈니스 인텔리전스
- Salesforce CRM(고객 관계 관리)
- 데이터베이스
- 이메일 호스팅 및 생산성
우리는 다음을 제공합니다:
- 편향 없는 전문성 :즉각적인 가치를 제공하는 기능에 중점을 두고 현대화 여정을 간소화하고 안내합니다.
- 광신적인 경험 ™:프로세스를 먼저 결합합니다. 기술 두 번째.®전담 기술 지원을 통한 접근 방식으로 포괄적인 솔루션 제공
- 타의 추종을 불허하는 포트폴리오 :광범위한 클라우드 경험을 적용하여 올바른 클라우드에서 올바른 기술을 선택하고 배포할 수 있도록 지원합니다.
- 민첩한 전달 :귀하의 여정에서 귀하를 만나고 귀하의 성공에 맞춰 귀하의 성공을 맞춥니다.
시작하려면 지금 채팅하세요.