EDB BART 설치하기
Image from BARMAN Official Manual
Backup And Recovery Tool
- 복수의 EDB 서버를 대상으로 complete, hot, physical 백업을 지원
- 풀 베이스 백업(full base backup)과 블록 레벨(block-level)의 증분 백업 2가지 타입을 지원
- 로컬 또는 리모트 호스트를 대상으로 백업과 복구
- 사용자가 정의한대로 백업 유지 가능(retention policy support)
- 압축 백업 지원
- 백업 데이터 체크섬 정합성 지원
- 백업 상세 정보가 직관적으로 이해되도록 구성
- 좀더 간단하게 Point-in-time 복구가 가능
지원하는 플랫폼
- CentOS 6.X 또는 7.X
- Red Hat 엔터프라이즈 리눅스 6.X 또는 7.X
- Ubuntu 18.04 (Debian 9.X)
지원하는 EDB & PG 버전
- EDB 9.5, 9.6, 10, 11, 12
- PG 9.5, 9.6, 10, 11, 12
설치 과정의 주요 절차 요약
-. 1. BART 유틸리티를 실행하는 유저 설정
|- BART가 관리하는 백업 카탈로그의 owner
|- BART 유틸리티와 bart-scanner를 실행할 수 있는 유저
|- BART가 관리하는 DB 서버와 상호(to and from) SSH/SCP 접속이 가능하도록 세팅
|- EDB에서는 enterprisedb OS유저를, PostgreSQL에서는 postgres OS유저를 사용하는 것도 가능
-. 2. BART 호스트에서 설정해야 할 것들
|- BART_HOME/etc/bart.cfg에서 자신의 상황에 맞게 설정
|- pg_basebackup 유틸리티가 BART 호스트에 설치돼 있어야 함
|- LD_LIBRARY_PATH를 환경변수에 등록
-. 3. EDB 데이터베이스 서버에서 설정해야 할 것들
|- WAL archive 모드를 on으로 설정 (이 글은 archive 모드가 on임을 전제)
|- BART 호스트와 비밀번호 입력 없이 SSH/SCP 접근이 가능하도록 세팅
|- replication + superuser 권한을 가진 유저 생성 (이 글에서는 enterprisedb 유저를 이용)
|- pg_hba.conf 파일에서 superuser 및 replication 권한을 가진 유저의 접근 허용 (trust)
설치하기
- 이 글은 EDB v11.6 & BART v2.5.2을 사용하는 것을 전제로 작성된 설치 매뉴얼이고 EDB사의 오피셜 가이드를 참고하여 작성했다.
-
A 호스트는 standalone EDB가 기동중인 호스트이고 B 호스트는 BART 호스트 서버로 A 호스트와는 물리적으로 별개로 네트워크로 연결돼 있으며 A 호스트를 백업 대상으로 한다는 것을 전제로 한다.
- A 호스트(EDB 서버) IP 172.17.0.2
- B 호스트(BART 호스트) IP 172.17.0.3
1. BART 유틸리티를 실행하는 유저 설정
BART 백업 카탈로그의 소유자이자 BART 유틸리티를 실행할 bart 유저를 생성한다. 이 글에서는 enterprisedb라는 OS 유저를 bart 유저로 사용한다.
# root 유저로 진행한다.
groupadd enterprisedb
useradd -g enterprisedb enterprisedb
passwd enterprisedb
bart OS 유저(이 글에서는 enterprisedb 유저)의 profile에 환경변수를 등록한다.
# enterprisedb user's bash_profile
export LD_LIBRARY_PATH=/usr/edb/as11/lib:$LD_LIBRARY_PATH
BART 백업 디렉토리를 생성한다.
# root 유저로 진행한다.
mkdir /opt/backup
chown enterprisedb:enterprisedb /opt/backup
chgrp enterprisedb /opt/backup
chmod 700 /opt/backup
EDB 호스트 쪽으로 패스워드 인증을 피하기 위한 공개키 방식의 인증 세팅하기
BART는 호스트 간에 패스워드 인증이 필요없는 접속을 전제로 하기 때문에 ssh 접속 관련 세팅을 해야 한다. bart 유저의 홈디렉토리에서 ssh/scp 인증을 위한 공개키를 생성한다.
[enterprisedb@EFM_EDB_11_standby ~]$ cd ~
[enterprisedb@EFM_EDB_11_standby ~]$ mkdir .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chown enterprisedb .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chgrp enterprisedb .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chmod 700 .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/enterprisedb/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/enterprisedb/.ssh/id_rsa.
Your public key has been saved in /home/enterprisedb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fVgd7cDnB77xO/TYiSqyBAUSdh9zu/EwNfcSdDjlW4g enterprisedb@EFM_EDB_11_standby
The key's randomart image is:
+---[RSA 2048]----+
| +.o o . o.=++ |
| . o o + o o=Ooo|
| o = Eo+O.|
| . .*o + *|
| . S.o.. =.|
| . . ...|
| . oo+|
| .. . ..+o|
| .o ... .|
+----[SHA256]-----+
[enterprisedb@EFM_EDB_11_standby ~]$
공개키를 EDB 호스트에 전송하고 세팅하기
[enterprisedb@EFM_EDB_11_standby ~]$ scp ~/.ssh/id_rsa.pub enterprisedb@172.17.0.2:/tmp/tmp.pub
The authenticity of host '172.17.0.2 (172.17.0.2)' can't be established.
ECDSA key fingerprint is SHA256:7e4vC3M6fguUK407DUl+04Ua/d0Rt7lXOwdrvGWcc9g.
ECDSA key fingerprint is MD5:60:ca:62:72:dd:d0:f9:41:95:ad:ad:54:8e:a9:f6:11.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.2' (ECDSA) to the list of known hosts.
enterprisedb@172.17.0.2's password:
id_rsa.pub 100% 405 591.3KB/s 00:00
EDB 서버에 접근하여 공개키 세팅해주기.
[enterprisedb@EFM_EDB_11_standby ~]$ ssh enterprisedb@172.17.0.2
[enterprisedb@EFM_EDB_11_master ~]$ cd ~
[enterprisedb@EFM_EDB_11_master ~]$ mkdir .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chown enterprisedb .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chgrp enterprisedb .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chmod 700 .ssh
[enterprisedb@EFM_EDB_11_master ~]$ cat /tmp/tmp.pub >> ~/.ssh/authorized_keys
[enterprisedb@EFM_EDB_11_master ~]$ chmod 600 ~/.ssh/authorized_keys
[enterprisedb@EFM_EDB_11_master ~]$ rm /tmp/tmp.pub
ssh 접속 테스트
[enterprisedb@EFM_EDB_11_standby ~]$ ssh 172.17.0.2
Last login: Mon Feb 17 17:40:03 2020 from 172.17.0.3
[enterprisedb@EFM_EDB_11_master ~]$
2. BART 호스트에서 설정해야 할 것들
edb-as1*-server-client는 반드시 설치되어 있어야 한다. 클라이언트를 먼저 설치한 후에 BART 패키지를 설치한다.
# root user
yum install -y edb-as11-server-client
yum install -y edb-bart
# pg_basebackup 존재 여부 확인
ls -al /usr/edb/as11/bin/pg_basebackup
$BART_HOME(/usr/edb/bart) 하위의 etc 디렉토리에 있는 템플릿을 이용하여 bart.cfg 설정파일 만든 후 적절한 값으로 파라미터들을 수정한다. [BART] 에는 BART 호스트에 관한 정보를 입력하고 EDB 호스트에 대한 항목은 적절한 alias로 네이밍을 하고나서 그 호스트에 관한 정보를 입력한다.
파라미터 | 필수 여부 | 디폴트 값 | 서버별 설정 | 글로벌 설정 |
---|---|---|---|---|
bart_host | Yes | 없음 | 불가 | 가능 |
backup_path | Yes | 없음 | 불가 | 가능 |
pg_basebackup_path | Yes | 없음 | 불가 | 가능 |
xlog_method | No | Fetch | 불가 | 가능 |
retention_policy | No | 0 | 불가 | 가능 |
wal_compression | No | 하지 않음 | 가능 | 가능 |
copy_wals_during_restore | No | 하지 않음 | 가능 | 가능 |
logfile | No | 없음 | 가능 | 가능 |
scanner_logfile | No | 없음 | 가능 | 가능 |
bart_socket_directory | No | 없음 | 불가 | 가능 |
thread_count | No | 1 | 가능 | 가능 |
retention_policy | No | 0 | 불가 | 가능 |
이 글에서는 아래와 같이 파라미터 값을 설정했다. [BART] 항목(section)에는 BART 유틸리티로 관리하는 DB들에 전역적(globally)으로 적용되길 원하는 설정값을 넣고 [EPAS11]라는 alias를 부여한 DB에 대해서는 해당 DB에만 적용되길 원하는 설정값을 입력한다.
[BART]
bart_host= enterprisedb@172.17.0.3
backup_path = /opt/backup
pg_basebackup_path = /usr/edb/as11/bin/pg_basebackup
logfile = /tmp/bart.log
scanner_logfile = /tmp/bart_scanner.log
thread_count = 5
[EPAS11]
host = 172.17.0.2
port = 5444
user = repuser
cluster_owner = enterprisedb
#archive_command = 'scp %p enterprisedb@172.17.0.2:/archive/arc_wal/%f'
description = "EPAS 11 Server"
remote_host = enterprisedb@172.17.0.2
retention_policy = 8 BACKUPS
allow_incremental_backups = enabled
backup_name = edb11_%year-%month-%dayT%hour:%minute:%second
edb 클라이언트 설치 및 BART 패키지 설치가 문제가 없었고 bart.cfg 파일도 자신의 환경과 백업 요구사항에 맞게 수정했다면 이 타이밍에 bart CHECK-CONFIG를 실행하여 기본 세팅에 문제가 없는지 체크한다.
[enterprisedb@EFM_EDB_11_standby etc]$ bart CHECK-CONFIG
INFO: Verifying that pg_basebackup is executable
INFO: success - pg_basebackup(/usr/edb/as11/bin/pg_basebackup) returns version 11.700000
[bart@EFM_EDB_11_standby etc]$
3. EDB 데이터베이스 서버에서 설정해야 할 것들
Replication 데이터베이스 유저 생성
- EDB인 경우 enterprisedb 유저를 쓴다면 따로 Replication 유저를 만들 필요는 없다.
- superuser 권한도 있어야 한다.
- 유저 생성 후 해당 유저의 접속을 위해 pg_hba.conf를 적절히 수정한 뒤 reload한다.
edb=# CREATE ROLE repuser WITH LOGIN REPLICATION SUPERUSER PASSWORD 'password' ;
CREATE ROLE
edb=#
host template1 repuser 172.17.0.3/32 trust
host replication repuser 172.17.0.3/32 trust
BART 서버 쪽으로 패스워드 인증을 피하기 위한 공개키 방식의 인증 세팅하기
BART는 호스트 간에 패스워드 인증이 필요없는 접속을 전제로 하기 때문에 ssh 접속 관련 세팅을 해야 한다. bart 유저의 홈디렉토리에서 ssh/scp 인증을 위한 공개키를 생성한다.
[enterprisedb@EFM_EDB_11_master ~]$ cd ~
[enterprisedb@EFM_EDB_11_master ~]$ mkdir .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chown enterprisedb .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chgrp enterprisedb .ssh
[enterprisedb@EFM_EDB_11_master ~]$ chmod 700 .ssh
[enterprisedb@EFM_EDB_11_master ~]$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/home/enterprisedb/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/enterprisedb/.ssh/id_rsa.
Your public key has been saved in /home/enterprisedb/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:fVgd7cDnB77xO/TYiSqyBAUSdh9zu/EwNfcSdDjlW4g enterprisedb@EFM_EDB_11_master
The key's randomart image is:
+---[RSA 2048]----+
| +.o o . o.=++ |
| . o o + o o=Ooo|
| o = Eo+O.|
| . .*o + *|
| . S.o.. =.|
| . . ...|
| . oo+|
| .. . ..+o|
| .o ... .|
+----[SHA256]-----+
[enterprisedb@EFM_EDB_11_master ~]$
공개키를 EDB 호스트에 전송하고 세팅하기
[enterprisedb@EFM_EDB_11_master ~]$ scp ~/.ssh/id_rsa.pub enterprisedb@172.17.0.2:/tmp/tmp.pub
The authenticity of host '172.17.0.3 (172.17.0.3)' can't be established.
ECDSA key fingerprint is SHA256:7e4vC3M6fguUK407DUl+04Ua/d0Rt7lXOwdrvGWcc9g.
ECDSA key fingerprint is MD5:60:ca:62:72:dd:d0:f9:41:95:ad:ad:54:8e:a9:f6:11.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.17.0.3' (ECDSA) to the list of known hosts.
enterprisedb@172.17.0.3's password:
id_rsa.pub 100% 405 591.3KB/s 00:00
EDB 서버에 접근하여 공개키 세팅해주기.
[enterprisedb@EFM_EDB_11_master ~]$ ssh enterprisedb@172.17.0.3
[enterprisedb@EFM_EDB_11_standby ~]$ cd ~
[enterprisedb@EFM_EDB_11_standby ~]$ mkdir .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chown enterprisedb .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chgrp enterprisedb .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ chmod 700 .ssh
[enterprisedb@EFM_EDB_11_standby ~]$ cat /tmp/tmp.pub >> ~/.ssh/authorized_keys
[enterprisedb@EFM_EDB_11_standby ~]$ chmod 600 ~/.ssh/authorized_keys
[enterprisedb@EFM_EDB_11_standby ~]$ rm /tmp/tmp.pub
ssh 접속 테스트
[enterprisedb@EFM_EDB_11_standby ~]$ ssh 172.17.0.3
Last login: Mon Feb 17 17:40:03 2020 from 172.17.0.2
[enterprisedb@EFM_EDB_11_master ~]$
본격적인 세팅 점검
아카이브 모드 설정과 pg_hba 접속 인증 관련 설정에 문제가 없다면 SHOW-SERVERS 명령어로 설정한 내용을 확인해본다.
bart SHOW-SERVERS -s epas11
[enterprisedb@EFM_EDB_11_standby ~]$ bart SHOW-SERVERS -s epas11
SERVER NAME : epas11
BACKUP FRIENDLY NAME: edb11_%year-%month-%dayT%hour:%minute:%second
HOST NAME : 172.17.0.2
USER NAME : repuser
PORT : 5444
REMOTE HOST : enterprisedb@172.17.0.2
RETENTION POLICY : 8 Backups
DISK UTILIZATION : 512.00 MB
NUMBER OF ARCHIVES : 0
ARCHIVE PATH : /opt/backup/epas11/archived_wals
ARCHIVE COMMAND : scp %p enterprisedb@172.17.0.3:/opt/backup/epas11/archived_wals/%f
XLOG METHOD : fetch
WAL COMPRESSION : disabled
TABLESPACE PATH(s) :
INCREMENTAL BACKUP : ENABLED
DESCRIPTION : "EPAS 11 Server"
ARCHIVE COMMAND 파라미터 설정에 따라 BART 호스트(172.17.0.3)의 /opt/backup/epas11/archived_wals 디렉토리 PATH로 scp 프로토콜을 통해 WAL 파일들이 아카이빙 될 것이다.
이 설정 확인 단계에서 자신의 환경에 맞게 archive_command 파라미터가 설정되어 있지 않다면 bart INIT -s [server_name] -o 옵션을 넣은 명령어로 백업 대상 EDB의 postgresql.auto.conf에 자신의 환경에 맞는 archive_command가 오버라이딩 되도록 할 수 있다. 새로운 archive_command를 적용하려면 재시작이 필요하다.
여기까지 문제가 없다면 bart-scanner를 백그라운드 모드로 실행한다.
$BART_HOME/bart-scanner --daemon
[enterprisedb@EFM_EDB_11_standby ~]$ ps -ef | grep bart
enterpr+ 3526 1 0 05:53 ? 00:00:00 bart-scanner --daemon
enterpr+ 3527 3526 0 05:53 ? 00:00:00 bart-scanner --daemon
bart-scanner는 풀 베이스 백업을 취득한 시점 이후에 WAL 파일에서 변경된 블록이 무엇인지 판별(scanning)하는 프로세스다. 증분 백업을 도입한다면 증분 백업의 바탕(parent)이 되는 풀 베이스 백업을 먼저 실행해야 하는데 bart-scanner는 풀 베이스 백업을 취득한 시점 이후에 WAL 파일에서 변경된 블록에 관한 정보를 modified block map (MBM)라는 파일에 기록하고 각 WAL 파일에 하나씩 MBM 파일을 생성하는 역할을 한다.
최종적인 세팅 확인
CHECK-CONFIG 서브 커맨드를 통해서 각종 세팅값에 문제가 없는지 확인한다.
bart CHECK-CONFIG -s epas11
[enterprisedb@EFM_EDB_11_standby ~]$ bart CHECK-CONFIG -s epas11
INFO: Checking server epas11
INFO: Verifying cluster_owner and ssh/scp connectivity
INFO: success
INFO: Verifying user, host, and replication connectivity
INFO: success
INFO: Verifying that user is a database superuser
INFO: success
INFO: Verifying that cluster_owner can read cluster data files
INFO: success
INFO: Verifying that you have permission to write to vault
INFO: success
INFO: /opt/backup/epas11
INFO: Verifying database server configuration
INFO: success
INFO: Verifying that WAL archiving is working
INFO: waiting 30 seconds for /opt/backup/epas11/archived_wals/000000010000000000000023
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: WAL file to be processed: 000000010000000000000023
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: success
INFO: Verifying that bart-scanner is configured and running
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
백업 실행
[enterprisedb@EFM_EDB_11_standby ~]$ bart BACKUP -s epas11 -z
INFO: DebugTarget - getVar(checkDiskSpace.bytesAvailable)
INFO: new backup identifier generated 1582268019243
INFO: creating 5 harvester threads
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: WAL file to be processed: 000000010000000000000024
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: WAL file to be processed: 000000010000000000000025
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: WAL file to be processed: 000000010000000000000026
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
NOTICE: pg_stop_backup complete, all required WAL segments have been archived
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: DebugTarget - getVar(checkInotifyEvent.eventAvailable)
INFO: backup completed successfully
INFO:
BART VERSION: 2.5.2
BACKUP DETAILS:
BACKUP STATUS: active
BACKUP IDENTIFIER: 1582268019243
BACKUP NAME: edb11_2020-02-21T06:53:39
BACKUP PARENT: none
BACKUP LOCATION: /opt/backup/epas11/1582268019243
BACKUP SIZE: 179.19 MB
BACKUP FORMAT: tar.gz
BACKUP TIMEZONE: UTC
XLOG METHOD: fetch
BACKUP CHECKSUM(s): 0
TABLESPACE(s): 0
START WAL LOCATION: 000000010000000000000025
BACKUP METHOD: streamed
BACKUP FROM: master
START TIME: 2020-02-21 06:53:39 UTC
STOP TIME: 2020-02-21 06:53:54 UTC
TOTAL DURATION: 15 sec(s)
[enterprisedb@EFM_EDB_11_standby ~]$