파일백업을위한 bareos 소개
도입기시작하는 말
안녕하세요, 고니 입니다.
기존에 작성했던 컨텐츠들 업데이트를 하면서 문서의 리팩토링(Refactoring)을 진행해보려고 합니다.
IT인프라를 운영하다보면 시스템이 안정적으로 운영되는건 물론이고, 백업에 대한 중요성도 증가하게 되죠.
랜섬웨어(Ransomware)에 걸렸을 경우, 조치할 수 있는 방법중에 하나가 백업된 내용을 복구하는것도 방법이 될꺼고요.
누군가 그러더라구요. IT인프라 운영의 마지막은 백업이라고....
백업 방식에 대해 정리해볼께요.
백업방식
-
Full Backup (전체백업)
- 백업되는 시점의 모든 데이터를 백업하는 방식입니다.
- 데이터양이 많아지면 백업되는 시간이 증가되겠지만, 복구되는 시점은 가장 간단한 방법으로 복구를 할 수 있습니다.
- 백업되는 시점의 모든 데이터를 백업하는 방식입니다.
-
Incremental Backup (증분백업)
- 지난 백업 이후 변경된 사항에 대해서만 백업을 수행합니다.
- 변경된 데이터만 백업하기 때문에 Full backup보다 백업의 소요시간이 단축되죠, 복구절차의 경우 Full backup 이후 변경된 데이터만 순차적으로 복구해야하기 때문에 Full Backup보다는 백업절차가 증가될수 있습니다.
-
Decremental Backup (차등백업)
- 지난 백업 이후 변경된 사항을 포함한 백업을 수행합니다.
- 변경된 모든 데이터를 포함하고 있기 때문에 증분백업보다는 백업속도와 용량이 증가할 수 있지만, 복구때는 전체 백업 과 백업데이터만 보관하고 있으면 되기 때문에 증분백업보다는 백업절차가 간소화 될 수 있습니다
-
백업방법별 용량 비교
- Full backup
10G * 7일 = 총 백업용량 70G - Incremental Backup
10G + 4G + 2G + 0G + 8G + 2G + 2G = 총 백업용량 28G - Dcremental Backup
10G + 4G + 6G(4G+2G) + 8G + 2G + 4G(2G+2G) = 총 백업용량 34G
- Full backup
이제 약장수가 약 팔듯이, 제가 운영했던 Opensource Backup 솔루션을 소개해보려고 합니다.
왜냐하면, Backup솔루션 자체가 굉장히 고가의 솔루션이기도 하고, 상용솔루션 만큼 백업과 복구가 가능했었더든요.
Bareos 소개
- 2000년 1월에 출시한 Opensource Backup인 Bacula의 Fork된 OSS Backup솔루션
- Bacula는 AGPL v3 + 독점라이선스 , Bareos는 AGPL v3 로 운영 (커뮤니티 vs 서브스크립션)
- Bacula는 독점라이선스로 운영하면서 커뮤니티보다는 B2B로 모델을 중점으로 두면서 2011년에 Bareos로 Forking되었음
- Linux(Centos/Ubuntu/Suse/Debian), Windows등 다양한 OS 환경에서 설치가능
- '19년 6월 기준 최신 릴리즈는 18.2.5 버전이 릴리즈.
Bareos 기본 시스템 구성도
- Director : 백업 정책 / 스케쥴 / 클라이언트를 관리하는 모듈
- sd(storage-daemon) : 백업데이터를 저장하는 모듈
- fd(file-daemon) : 백업할 데이터가 저장된 클라이언트
- bconsole : 콘솔용 프로그램 (클라이언트 생성 및 백업 정책 설정은 불가)
- webui : 웹기반에서 백업 / 복구 job을 수행할 수 있는 모듈 (클라이언트 생성 및 백업 정책 설정은 불가)
Bareos설치하기
-
Director 설치하기
- Director을 위한 패키지 설치
$> wget https://download.bareos.org/current/EL_7/bareos.repo /etc/yum.repos.d/bareos.repo $> yum install bareos bareos-director bareos-common bareos-database-mysql -y
-
DB구성 (순서대로 진행)
$> /usr/lib/bareos/scripts/create_bareos_database mysql $> /usr/lib/bareos/scripts/make_bareos_tables mysql $> /usr/lib/bareos/scripts/grant_bareos_privileges mysql
-
DB구성 파일 생성
$> cat /etc/bareos/bareos-dir.d/catalog/MyCatalog.conf Catalog { Name = MyCatalog dbdriver = "mysql" dbname = "{{ DB이름 }}" dbuser = "{{ DB접속계정 }}" dbpassword = "{{ DB접속패스워드 }}" dbsocket=/tmp/mysql.sock }
-
Director → SD구성을 위한 파일 정보 수정
$> cat /etc/bareos/bareos-dir.d/storage/File.conf Storage { Name = File Address = {{ SD서버IP }} Password = "{{ SD연동용 패스워드 }}" // SD서버용 패스워드 설정과 동일해야 함 Device = FileStorage1 Device = FileStorage2 Maximum Concurrent Jobs = 2 Media Type = File }
-
스케쥴 정보
#백업 수행을 위한 설정 (기본값은 모듈벼로 분리되어 있으나, 운영상 편리를 위해 통합된 config가 효율적인듯...) 파일명 : /etc/bareos/bareos-dir.d/job/{{클라이언트 이름}}.conf $> cat /etc/bareos/bareos-dir.d/schedule/{{백업 정책 이름}}.conf Schedule { Name = "{{ 스케쥴 이름 }}" Run = Full mon at 01:00 #Full 백업 수행 날짜와 시간 수행 Run = Incremental tue-sun at 01:00 #Incremental 백업 수행 날짜와 시간 수행 }
- 클라이언트 정보
Client { Name = {{ 클라이언트 이름 }} Description = "Client resource of the Director itself." Address = localhost Password = "{{ 클라이언트접속용 패스워드 }}" # password for FileDaemon }
-
파일셋 설정
FileSet { Name = "{{ 클라이언트 이름 }}" Include { Options { compression=lz4 #파일 압축방식 signature=SHA1 #암호화 방식 (sha1 / md5 중 가능) Sparse = yes } File = "/usr/sbin" #백업 경로 File = "/etc/bareos/" File = "/etc/bareos-webui/" } }
- 백업 Job정보
$> Job { Name = "{{ 클라이언트 이름 }}" JobDefs = "{{ 클라이언트 이름 }}" Client = "{{ 클라이언트 이름 }}" }
-
백업 정책 정보
$> JobDefs { Name = "{{ 클라이언트 이름 }}" Type = Backup Level = {{ 백업 정책이름 }} Client = {{ 클라이언트 이름 }} FileSet = {{ 클라이언트 이름 }} Schedule = "{{ 스케쥴이름 }}" Storage = File Messages = Standard Pool = {{ 클라이언트 이름 }} Priority = 10 Write Bootstrap = "/var/lib/bareos/%c.bsr" }
-
백업 Pool 정보
$> Pool { Name = {{ 클라이언트 이름 }} Pool Type = Backup Recycle = yes # 볼륨 재사용 여부 AutoPrune = yes # 보관기간 만료시 Pool에 write되지 않도록 정책 설정 Volume Retention = 30 days # 볼륨 보관 기간 Maximum Volume Bytes = 100G # 파일당 최대기록 용량 Maximum Volumes = 100 # 볼륨당 최대 생성 갯수 Label Format = "{{ 클라이언트 이름 }}-" # Pool생성 이름 Purge Oldest Volume = yes }
- Director을 위한 패키지 설치
-
SD구성
- 패키지 설치
$> yum install bareos-storage -y
- SD실행을 위한 설정
$> cat /etc/bareos/bareos-sd.d/storage/bareos-sd.conf Storage { Name = {{ SD이름 }} Maximum Concurrent Jobs = 20 }
- Director와 연동을 위한 설정
$> cat /etc/bareos/bareos-sd.d/director/bareos-dir.conf Director { Name = {{ Director 이름 }} Password = "{{ SD연동용 패스워드 }}" }
- 스토리지 구성
$> cat /etc/bareos/bareos-sd.d/device/FileStorage.conf Device { Name = FileStorage1 Media Type = File Archive Device = /backup <-- 백업 데이터 저장 경로 LabelMedia = yes; # lets Bareos label unlabeled media Random Access = yes; <-- HDD처럼 랜덤액세스가 가능한 매체인 경우 yes로 변경(tape는 no로 설정) AutomaticMount = yes; RemovableMedia = no; AlwaysOpen = yes; Maximum Concurrent Jobs = 10 }
- 패키지 설치
-
FD설정
- 패키지 설치
$> yum install bareos-filedaemon bareos-fd -y
- FD서비스 설정
$> cat /etc/bareos/bareos-fd.d/client/myself.conf Client { Name = {{클라이언트 이름 }} Maximum Concurrent Jobs = 20 }
- Director 연동
$> cat /etc/bareos/bareos-fd.d/director/bareos-dir.conf Director { Name = {{ Director 이름 }} Password = "{{ Director 접속 패스워드 }}" }
- 패키지 설치
백업 작업 수행
- 백업 / 복구 작업은 webui / bconsole을 이용해 수행이 가능하나, 운영상 편리를 위해 webui에서 수행
- Webui 접근 후 Jobs → Run 메뉴 이동
- Job : 백업 작업 선택
- Client : 백업 클라이언트이름
- Fileset : 백업 대상
- Storage : File (기본값)
- Pool : 백업데이터 보관주기 설정
- Level : 백업유형 (Full / Incremental 중 선택)
- Priority : 백업 작업 우선순위 선택
- When : 백업 수행시간 (옵션)
- Jobs → Show 메뉴 이동
- 백업 결과 확인
복구 작업 수행
-
Restore 메뉴 이동
- Client : 복구수행할 클라이언트
- Backup Jobs : 백업 했던 job
- Merge all client fileset : 여러개의 파일셋으로 백업된 경우 하나로 합쳐서 복구 수행 (단일 파일셋으로 구성하는 경우 영향없음)
- Merge all related jobs to last full backup of selected backup job : 최근에 수행한 백업데이터로 복구 수행
- Restore to client : 복구할 클라이언트 수행
- Restore job : 기본값
- replace files on client : 복구 대상에에서 파일 저장 정책
- always : 복구파일로 덮어씀
- never : 기존파일 보관
- if file being restored is older than existing file : 백구 파일이 오래된 경우 복구파일로 덮어씀
- if file being restored is newer than existing file : 백구 파일이 최신인 경우 복구파일로 덮어씀
- Restore location on client : 복구 파일 경로
-
복구 작업 수행결과 확인