백업 및 복원 개요
백업 및 복원 개요 (Overview)
HBase 백업/복원 기능을 소개해요. 예상치 못한 장애 시 데이터를 복구하고, 특정 시점(snapshot)으로 데이터베이스를 되돌리는 방법을 살펴볼게요. 전체 백업과 증분 백업의 차이와 계획 전략도 함께 다뤄요.
출처: 문서
본문
백업 및 복원은 많은 데이터베이스에서 제공하는 표준 기능이에요. 효과적인 백업/복원 전략은 사용자가 예상치 못한 장애 시 데이터를 복구할 수 있게 해줘요. HBase 백업/복원 기능은 HBase를 정식 데이터 저장소로 사용하는 기업이 치명적 장애에서 복구할 수 있게 도와줘요. 또 다른 중요한 기능은 데이터베이스를 특정 시점으로 복원하는 것으로, 일반적으로 스냅샷(snapshot)이라고 불러요.
HBase 백업/복원 기능은 HBase 클러스터의 테이블에 전체 백업(full backup)과 증분 백업(incremental backup)을 만들 수 있게 해줘요. 전체 백업은 증분 백업이 적용되어 반복적 스냅샷을 만드는 기반이 돼요. 증분 백업은 예를 들어 Cron 작업처럼 일정에 따라 실행해 시간 경과에 따른 변경사항을 포착할 수 있어요. 증분 백업은 마지막 백업 이후의 변경사항만 포착하고 관리자가 데이터베이스를 이전의 어떤 증분 백업으로도 복원할 수 있게 해주기 때문에 전체 백업보다 비용 효율적이에요. 또한 유틸리티는 백업 전체 데이터셋을 복원하고 싶지 않다면 테이블 수준의 데이터 백업·복구도 가능하게 해줘요.
백업/복원 기능은 HBase Replication 기능을 보완해요. HBase 복제는 데이터의 "핫(hot)" 복사본(복제된 데이터가 즉시 질의에 사용 가능한 상태)을 만드는 데 이상적이지만, 백업/복원 기능은 데이터의 "콜드(cold)" 복사본(시스템 복원을 위해 수동 단계가 필요한 상태)을 만드는 데 이상적이에요. 이전에는 사용자가 ExportSnapshot 기능을 통해서만 전체 백업을 만들 수 있었어요. 증분 백업 구현은 ExportSnapshot이 제공했던 이전의 "방법"을 개선한 새로운 기능이에요.
백업/복원 기능은 클러스터 간 파일 전송에 DistCp를 사용해요. HADOOP-15850은 CopyCommitter#concatFileChunks가 (파일들이 독립적인데도) DistCp 대상 클러스터로 전송되는 파일을 무조건 연결하려던 버그를 수정해요. HADOOP-15850의 수정 없이는 전송이 실패해요. 그래서 백업/복원 기능은 아래와 같은 hadoop 버전이 필요해요.
- 2.7.x
- 2.8.x
- 2.9.2+
- 2.10.0+
- 3.0.4+
- 3.1.2+
- 3.2.0+
- 3.3.0+
용어 (Terminology)
백업/복원 기능은 시스템을 통해 제어 흐름이 어떻게 진행되는지 이해하는 데 사용할 수 있는 새 용어를 소개해요.
- 백업(backup): 테이블을 특정 시점의 상태로 복원할 수 있는 데이터와 메타데이터의 논리적 단위.
- 전체 백업(full backup): 특정 시점의 테이블 내용을 완전히 포함하는 백업 유형.
- 증분 백업(incremental backup): 전체 백업 이후 테이블의 변경사항을 담는 백업 유형.
- 백업 세트(backup set): 백업을 실행할 수 있는 하나 이상의 테이블을 참조하는 사용자 정의 이름.
- 백업 ID(backup ID): 하나의 백업을 다른 백업과 구분하는 고유 이름. 예: backupId_1467823988425
계획 (Planning)
환경에서 백업/복원을 구현하는 데 사용할 수 있는 몇 가지 일반적인 전략이 있어요. 다음 섹션은 이 전략들이 어떻게 구현되는지, 그리고 각각의 잠재적 트레이드오프를 보여줘요.
이 백업/복원 도구는 TDE(Transparent Data Encryption)가 활성화된 HDFS 클러스터에서는 테스트되지 않았어요. 이는 공개 이슈 HBASE-16178과 관련이 있어요.
클러스터 내 백업 (Backup within a cluster)
이 전략은 백업이 생성된 클러스터와 같은 클러스터에 백업을 저장해요. 이 접근 방식은 소프트웨어 자체가 이미 제공하는 안전성 이상의 추가 안전성을 제공하지 않으므로 테스트에만 적합해요.
전용 클러스터를 사용한 백업 (Backup using a dedicated cluster)
이 전략은 더 큰 결함 허용(fault tolerance)을 제공하고 재해 복구로 가는 길을 제공해요. 이 설정에서는 백업 대상 클러스터의 HDFS URL을 백업 유틸리티에 제공해 별도의 HDFS 클러스터에 백업을 저장해요. 다른 물리적 위치(예: 다른 데이터 센터)로 백업하는 것을 고려해 보세요.
일반적으로 백업 전용 HDFS 클러스터는 비용 절감을 위해 더 경제적인 하드웨어 프로파일을 사용해요.
클라우드 또는 스토리지 벤더 어플라이언스로 백업 (Backup to the Cloud or a storage vendor appliance)
HBase 증분 백업을 보호하는 또 다른 방법은 오프사이트에 있고 서드파티 벤더가 소유한 프로비저닝된 보안 서버에 데이터를 저장하는 거예요. 벤더는 S3 및 기타 HDFS 호환 대상 같은 Hadoop 호환 파일시스템을 사용하는 퍼블릭 클라우드 제공업체나 스토리지 벤더일 수 있어요.
HBase 백업 유틸리티는 여러 대상으로의 백업을 지원하지 않아요. 해결 방법은 HDFS 또는 S3에서 백업 파일의 복사본을 수동으로 만드는 거예요.
첫 구성 단계 (First-time configuration steps)
이 섹션은 백업/복원 기능을 사용하기 위해 반드시 해야 하는 구성 변경을 담고 있어요. 이 기능은 I/O 집약적인 작업을 병렬화하기 위해 YARN의 MapReduce 프레임워크를 많이 사용하므로, 구성 변경은 hbase-site.xml 너머로 확장되어요.
YARN에서 "hbase" 시스템 사용자 허용 (Allow the "hbase" system user in YARN)
YARN container-executor.cfg 구성 파일은 다음 속성 설정을 가져야 해요: allowed.system.users=hbase. 이 구성 파일 항목에는 공백이 허용되지 않아요.
이 단계를 건너뛰면 첫 번째 백업 작업 실행 시 런타임 오류가 발생해요.
백업/복원을 위한 유효한 container-executor.cfg 파일 예시:
yarn.nodemanager.log-dirs=/var/log/hadoop/mapred
yarn.nodemanager.linux-container-executor.group=yarn
banned.users=hdfs,yarn,mapred,bin
allowed.system.users=hbase
min.user.id=500
HBase 관련 변경 (HBase specific changes)
hbase-site.xml에 다음 속성을 추가하고, HBase가 이미 실행 중이라면 재시작해 주세요.
",..."은 리터럴 텍스트가 아니라 값의 쉼표로 구분된 목록임을 뜻하는 생략 부호예요.
<property>
<name>hbase.backup.enable</name>
<value>true</value>
</property>
<property>
<name>hbase.master.logcleaner.plugins</name>
<value>org.apache.hadoop.hbase.backup.master.BackupLogCleaner,...</value>
</property>
<property>
<name>hbase.procedure.master.classes</name>
<value>org.apache.hadoop.hbase.backup.master.LogRollMasterProcedureManager,...</value>
</property>
<property>
<name>hbase.procedure.regionserver.classes</name>
<value>org.apache.hadoop.hbase.backup.regionserver.LogRollRegionServerProcedureManager,...</value>
</property>
<property>
<name>hbase.coprocessor.region.classes</name>
<value>org.apache.hadoop.hbase.backup.BackupObserver,...</value>
</property>
<property>
<name>hbase.coprocessor.master.classes</name>
<value>org.apache.hadoop.hbase.backup.BackupMasterObserver,...</value>
</property>
<property>
<name>hbase.master.hfilecleaner.plugins</name>
<value>org.apache.hadoop.hbase.backup.BackupHFileCleaner,...</value>
</property>
더 알아보기 (Learn more)
백업/복원 명령, 백업 이미지 관리, 추가 주제는 각 하위 문서를 보시길 권해요.