[ PostgreSQL ] Wal-g Backup ( Cloud ObjectStorage )
- -
현재 고객사에서 사용하고있는 wal-g Backup Opensource 관련하여 작성할예정이다.
WAL-G는 PostgreSQL, MySQL/MariaDB 및 MS SQL Server(MongoDB 및 Redis용 베타)용 아카이브 복원 도구입니다.
WAL-G는 몇 가지 주요 차이점이 있는 WAL-E의 후속 제품입니다. WAL-G는 Postgres용 LZ4, LZMA 또는 Brotli 압축, 다중 프로세서 및 비독점적 기본 백업을 사용합니다.
https://github.com/wal-g/wal-g
■ 다운로드
- 해당 URL에서 원하는 Version의 wal-g 를 다운로드
https://github.com/wal-g/wal-g/releases
■ Wal-g 설치
[root@postgres ~]# tar -zxvf wal-g.linux-amd64.tar.gz
wal-g
■ PostgreSQL 설치
- RPM을 이용하여 설치하도록 하겠습니다
https://yum.postgresql.org/rpmchart/ --> PostgreSQL 다운로드 가능
1.Postgresql package 설치
[root@postgres ~]# ll
total 60164
-rw-r--r-- 1 root root 1666016 Dec 1 09:06 postgresql12-12.3-5PGDG.rhel7.x86_64.rpm
-rw-r--r-- 1 root root 623648 Dec 1 09:06 postgresql12-contrib-12.3-5PGDG.rhel7.x86_64.rpm
-rw-r--r-- 1 root root 377888 Dec 1 09:06 postgresql12-libs-12.3-5PGDG.rhel7.x86_64.rpm
-rw-r--r-- 1 root root 5199596 Dec 1 09:06 postgresql12-server-12.3-5PGDG.rhel7.x86_64.rpm
[root@postgres ~]# yum -y install ./postgresql*
2.Database Data Directory 생성 & 권한 부여
[root@postgres ~]# mkdir -p /mnt/pgsql/12/data
[root@postgres ~]# chown -R postgres.postgres /mnt/pgsql/
3.PostgreSQL 설치
[root@postgres ~]# su - postgres
-bash-4.2$ /usr/pgsql-12/bin/initdb -D /mnt/pgsql/12/data/
이 데이터베이스 시스템에서 만들어지는 파일들은 그 소유주가 "postgres" id로
지정될 것입니다. 또한 이 사용자는 서버 프로세스의 소유주가 됩니다.
데이터베이스 클러스터는 "ko_KR.UTF-8" 로케일으로 초기화될 것입니다.
기본 데이터베이스 인코딩은 "UTF8" 인코딩으로 설정되었습니다.
initdb: "ko_KR.UTF-8" 로케일에 알맞은 전문검색 설정을 찾을 수 없음
기본 텍스트 검색 구성이 "simple"(으)로 설정됩니다.
자료 페이지 체크섬 기능 사용 하지 않음
이미 있는 /mnt/pgsql/12/data 디렉터리의 액세스 권한을 고치는 중 ...완료
하위 디렉터리 만드는 중 ...완료
사용할 동적 공유 메모리 관리방식을 선택하는 중 ... posix
max_connections 초기값을 선택하는 중 ...100
기본 shared_buffers를 선택하는 중... 128MB
기본 지역 시간대를 선택 중 ... Asia/Seoul
환경설정 파일을 만드는 중 ...완료
부트스트랩 스크립트 실행 중 ... 완료
부트스트랩 다음 초기화 작업 중 ... 완료
자료를 디스크에 동기화 하는 중 ... 완료
initdb: 경고: 로컬 접속용 "trust" 인증을 설정 함
이 값을 바꾸려면, pg_hba.conf 파일을 수정하든지,
다음번 initdb 명령을 사용할 때, -A 옵션 또는 --auth-local,
--auth-host 옵션을 사용해서 인증 방법을 지정할 수 있습니다.
작업완료. 이제 다음 명령을 이용해서 서버를 가동 할 수 있습니다:
/usr/pgsql-12/bin/pg_ctl -D /mnt/pgsql/12/data/ -l 로그파일 start
4. PostgreSQL 시작
-bash-4.2$ /usr/pgsql-12/bin/pg_ctl -D /mnt/pgsql/12/data/ -l /mnt/pgsql/12/pgsql.log start
■ Wal-g .walg.json 파일 생성
- wal-g Backup때 사용할 Config 파일을 생성하낟.
- .walg.json에 Cloud의 ObjectStorage와 관련된 정보를 적어주면 ObjectStorage로 바로 Postgres의 Backup & Archive 파일들이 저장되게된다.
"WALG_UPLOAD_CONCURRENCY": "2", --> 백업 업로드 중에 사용할 동시성 스트림수 Default 16
"WALG_DOWNLOAD_CONCURRENCY": "2", --> 백업 다운로드 중에 사용할 동시성 스트림수 Default 10
"WALG_UPLOAD_DISK_CONCURRENCY": "2",
"WALG_DELTA_MAX_STEPS": "7", --> 전제 백없 사이에 있을수 있는 델타 백업의 수
"WALG_COMPRESSION_METHOD": "brotli" -- > 압축 방법 ( 3개가 있는데 가장 나음 )
postgres@postgres:/mnt/pgsql/12# mkdir -p wal
postgres@postgres:/mnt/pgsql/12# cd wal/
postgres@postgres:/mnt/pgsql/12/wal# vi .walg.json
{
"WALG_S3_PREFIX": "s3://nhtest/test/walg/",
"AWS_ACCESS_KEY_ID": "VPcSO5skHg1bcxxp3CXz",
"AWS_SECRET_ACCESS_KEY": "Mbzt5rpYxj2A2vX467Hw7LBsCnfOc1YJKmOE0fqa",
"AWS_ENDPOINT": "https://kr.object.ncloudstorage.com",
"AWS_S3_FORCE_PATH_STYLE": "true",
"AWS_REGION": "us-east-1",
"PGHOST": "localhost",
"PGPORT": "5432",
"PGDATA": "/mnt/pgsql/12/data",
"WALG_UPLOAD_CONCURRENCY": "2",
"WALG_DOWNLOAD_CONCURRENCY": "2",
"WALG_UPLOAD_DISK_CONCURRENCY": "2",
"WALG_DELTA_MAX_STEPS": "7",
"WALG_COMPRESSION_METHOD": "brotli"
}
■ Postgres.conf 파일 수정
- Archive mode로 변경 ( Database Restart 필요 )
( /usr/pgsql-12/bin/pg_ctl -D /mnt/pgsql/12/data/ -l /mnt/pgsql/12/pgsql.log restart )
- Archive_command로 Archive가 바로 ObjectStorage로 올라가도록 변경 ( Database reload 필요 )
( /usr/pgsql-12/bin/pg_ctl reload -D /mnt/pgsql/12/data/ )
postgres@postgres:/mnt/pgsql/12/wal# cd /mnt/pgsql/12/data
*Archive 관련 파라미터 수정
postgres@postgres:/mnt/pgsql/12/data# vi postgresql.conf
archive_mode = on
archive_command = '/mnt/pgsql/12/bin/wal-g wal-push --config /mnt/pgsql/12/wal/.walg.json %p'
■ FULL Backup
postgres@postgres:/mnt/pgsql/12/wal# /mnt/pgsql/12/bin/wal-g backup-push --config /mnt/pgsql/12/wal/.walg.json /mnt/pgsql/12/data/ --full
INFO: 2021/12/07 10:15:02.892855 Doing full backup.
INFO: 2021/12/07 10:15:02.904687 Calling pg_start_backup()
INFO: 2021/12/07 10:15:02.969821 Walking ...
INFO: 2021/12/07 10:15:02.970009 Starting part 1 ...
INFO: 2021/12/07 10:15:02.970083 Starting part 2 ...
INFO: 2021/12/07 10:15:03.173430 Finished writing part 2.
INFO: 2021/12/07 10:15:03.421691 Finished writing part 1.
INFO: 2021/12/07 10:15:03.461775 Starting part 3 ...
INFO: 2021/12/07 10:15:03.461812 /global/pg_control
INFO: 2021/12/07 10:15:03.463342 Finished writing part 3.
INFO: 2021/12/07 10:15:03.468063 Calling pg_stop_backup()
INFO: 2021/12/07 10:15:04.520385 Starting part 4 ...
INFO: 2021/12/07 10:15:04.520463 backup_label
INFO: 2021/12/07 10:15:04.520472 tablespace_map
INFO: 2021/12/07 10:15:04.527869 Finished writing part 4.
INFO: 2021/12/07 10:15:04.902792 Wrote backup with name base_00000005000000000000003B
■ Backup List 조회
postgres@postgres:/mnt/pgsql/12/data# /mnt/pgsql/12/bin/wal-g --config /mnt/pgsql/12/wal/.walg.json backup-list
name last_modified wal_segment_backup_start
base_000000040000000000000031 2021-12-02T07:31:53Z 000000040000000000000031
base_000000040000000000000033 2021-12-03T04:40:33Z 000000040000000000000033
base_000000040000000000000038 2021-12-03T05:27:19Z 000000040000000000000038
base_00000005000000000000003B 2021-12-07T01:15:04Z 00000005000000000000003B
■ Restore
- 기존 DataFile 경로가 있으면 Error가 발생하기때문에 mv 한후 진행
- wal-g backup-fetch명령어로 objectstorage에서 백업본을 가져온다. 뒤에 LATEST 또는 백업본의 이름을 지정할수있다.
- postgresql.auto.conf에 restore_command 를 추가하여 Backup 이후에 발생한 Archive 또한 가져올수있다.
postgres@postgres:/mnt/pgsql/12# mv /mnt/pgsql/12/data /mnt/pgsql/12/data4
postgres@postgres:/mnt/pgsql/12# /mnt/pgsql/12/bin/wal-g backup-fetch --config=/mnt/pgsql/12/wal/.walg.json /mnt/pgsql/12/data LATEST
INFO: 2021/12/07 10:34:17.778360 LATEST backup is: 'base_00000005000000000000003B'
INFO: 2021/12/07 10:34:19.204340 Finished extraction of part_001.tar.br
INFO: 2021/12/07 10:34:19.204632 Finished decompression of part_001.tar.br
INFO: 2021/12/07 10:34:19.238117 Finished extraction of part_004.tar.br
INFO: 2021/12/07 10:34:19.238137 Finished decompression of part_004.tar.br
INFO: 2021/12/07 10:34:19.540026 Finished extraction of part_002.tar.br
INFO: 2021/12/07 10:34:19.540235 Finished decompression of part_002.tar.br
INFO: 2021/12/07 10:34:19.556205 Finished decompression of pg_control.tar.br
INFO: 2021/12/07 10:34:19.556215 Finished extraction of pg_control.tar.br
INFO: 2021/12/07 10:34:19.556221
Backup extraction complete
postgres@postgres:/mnt/pgsql/12/data# vi postgresql.auto.conf
restore_command='/mnt/pgsql/12/bin/wal-g wal-fetch --config=/mnt/pgsql/12/wal/.walg.json %f %p'
postgres@postgres:/mnt/pgsql/12/data# /usr/pgsql-12/bin/pg_ctl -D /mnt/pgsql/12/data/ -l /mnt/pgsql/12/pgsql.log start
waiting for server to start.... done
server started
'PostgreSQL' 카테고리의 다른 글
[ PostgreSQL ] Lock Session 확인 (9) | 2023.02.19 |
---|---|
[ PostgreSQL ] Autovacuum이란??? 무엇일까? (13) | 2023.01.26 |
[ PostgreSQL] Postgres HA 구성 repmgr ( auto-failover ) (0) | 2021.10.27 |
[PostgreSQL] PostgreSQL 정합성 확인!! (0) | 2021.09.07 |
[PostgreSQL] PostgreSQL + Repmgr 이중화 + pgpool (1) (0) | 2021.08.23 |
소중한 공감 감사합니다