Innovating today, leading tomorrow

OpenSQL_Technical Guide
[OpenSQL] Barman의 구성과 설치 방법

[OpenSQL] Barman의 구성과 설치 방법

Introduction

Barman 의 구성 방식과 설치에 대해 알아보겠습니다. 해당 문서는 Barman 매뉴얼 기반으로 정리되었습니다.

PostgreSQL 의 기본 백업, WAL 보관과 같은 물리적인 백업이나 특정 시점 복구(PITR), Replication 등에 대한 개념을 숙지하고 해당 문서를 활용하시기 바랍니다.

Barman (Backup and Recovery Manager for PostgreSQL) 은 PostgreSQL 서버의 장애 복구를 위한 관리 도구이며 싱글 서버부터 여러 대의 서버를 원격으로 백업 및 복구가 가능합니다.

Architecture

다중 서버에 대한 지원이 가능합니다. Barman 은 버전이 다르더라도 여러 PostgreSQL 인스턴스에서 오는 백업 데이터를 처리할 수 있습니다.

단순화를 위해 기본 아키텍처를 가정하고 백업 방식에 대해 간단하게 먼저 알아보겠습니다.

  • PostgreSQL 인스턴스 1개 서버
  • Barman이 설치된 1개 백업 서버

구성1. 스트리밍 프로토콜 백업

PostgreSQL 9.4 이상을 사용하고 일반적인 경우에 해당하는 경우 스트리밍 프로토콜을 사용하는 백업의 경우입니다.

다음과 같은 구성을 할 수 있습니다.

  • PostgreSQL 에 대한 표준 연결
  • pg_basebackup(기본 백업 작업) 및 pg_receivewal (WAL 스트리밍) 에서 사용되는 스트리밍 연결

위와 같은 구성에서 추가적인 SSH 구성을 통한 아카이브 파일 백업도 함께 구성 가능합니다.

  • PostgreSQL 서버에서 Barman 서버로 archive_command 를 사용할 수 있도록 SSH 연결 구성


구성2. rsync / SSH 를 통한 백업

해당 기능이 필요한 경우 rsync 및 SSH 설치가 되어야 합니다.

  • PostgreSQL 에 대한 표준 연결
  • Barman 서버에서 Postgres 서버로 rsync 를 사용할 수 있도록 SSH 연결 구성
  • Postgres 서버에서 Barman 서버로 archive_command 사용할 수 있도록 SSH 연결 구성

구성 1. 의 구조처럼 WAL Streaming 을 사용하는 백업도 함께 구성이 가능합니다.


Install

설치 요구 사항

  • OS : Linux/Unix 계열
  • PostgreSQL : v10 이상(Barman 최신 버전의 경우 v11 이상)
  • Package : Python 3.6 이상, psycopg2 2.42 이상, python-argcomplete, python-dateutil, python-setuptools, rsync 3.1.0 이상(선택 사항)

테스트 환경

  • OS : Red Hat Enterprise Linux release 8.6 (Ootpa)
  • PostgerSQL Version : v15.4
  • Barman Version : 3.9.0 Barman by EnterpriseDB

필수 패키지 설치

필수 라이브러리 설치한 뒤 OS 환경에 맞는 epel Repo를 설치합니다. 이후 epel 저장소의 barman 패키지를 설치하게 됩니다. yum install barman을 수행하여 barman을 사용하기 위한 python3 및 rsync 패키지가 함께 설치됩니다.

yum install make gcc postgresql-libs postgresql-devel postgresql-server openssl-devel python3-devel libxml2-devel lz4-devel libzstd-devel bzip2-devel perl
-- barman 서버에서는 server까지는 설치 필요 없이 postgresql(client), postgresql-libs만 설치해도 pg_receivewal을 포함한 대부분의 유틸리티 사용이 가능합니다.

-- 필요시 PGDG repo 구성
rpm -Uvh https://download.postgresql.org/pub/repos/yum/reporpms/EL-8-x86_64/pgdg-redhat-repo-latest.noarch.rpm

yum install -y epel-release
yum install -y barman

[root@localhost ~]# yum install barman
Last metadata expiration check: 0:00:20 ago on Mon 29 Jan 2024 10:19:46 AM KST.
Dependencies resolved.

=====================================================================================================
Package Arch Version Repository Size
=====================================================================================================
Installing:
barman noarch 3.9.0-1.el8 ol8_developer_EPEL 33 k
Installing dependencies:
python3-argcomplete noarch 1.9.3-6.el8 ol8_appstream 60 k
python3-barman noarch 3.9.0-1.el8 ol8_developer_EPEL 526 k
python3-pip noarch 9.0.3-23.el8 ol8_appstream 20 k
python3-psycopg2 x86_64 2.7.5-7.el8 ol8_appstream 172 k
python3-setuptools noarch 39.2.0-7.el8 ol8_baseos_latest 163 k
python36 x86_64 3.6.8-38.module+el8.9.0+90104+968a3e84 ol8_appstream 18 k
rsync x86_64 3.1.3-19.el8_7.1 ol8_baseos_latest 410 k
Enabling module streams:
python36 3.6

Transaction Summary
====================================================================================================
Install 8 Packages
  • 패키지를 yum으로 설치하면 /etc/barman 경로가 생성되고, barman OS USER도 함께 생성됩니다.
  • barman OS USER 의 패스워드 설정을 해줍니다.
  • 설치 후 파일 권한이 root USER에게 있기 때문에 barman OS user에게 소유권을 변경해줍니다.
[root@localhost ~]# cd /etc/barman/
[root@localhost barman]# ls
barman.conf conf.d
[root@localhost barman]# pwd
/etc/barman
[root@localhost barman]# cat /etc/passwd
...
barman:x:995:992:Backup and Recovery Manager for PostgreSQL:/var/lib/barman:/bin/bash

[root@localhost ~]# passwd barman
Changing password for user barman.
New password:
Retype new password:
passwd: all authentication tokens updated successfully.

[root@localhost barman]# chown -R barman:barman /etc/barman

Barman 의 기능은 설치된 PostgreSQL 바이너리에 따라 다르게 수행할 수 있습니다.

  • Streaming Backup : pg_basebackup 바이너리 필요
  • Streaming WAL archiving with streaming_archiver : pg_receivewal 또는 pg_receivexlog 바이너리 필요
  • Verifying backups with barman verify-backup : pg_verifybackup 바이너리 필요

대상 OS에 따라 위와 같은 바이너리는 PostgreSQL 클라이언트 또는 서버 패키지와 함께 설치됩니다.

PostgreSQL 서버 세팅

아래는 barman을 사용하기 위한 PostgreSQL의 함수 권한을 barman superuser에게 부여하는 명령어 입니다.

PostgreSQL 버전에 따라 명령어가 다른것을 유의합니다.

CREATE USER barman WITH REPLICATION SUPERUSER PASSWORD '[BARMAN_USER_PASSWD]';

GRANT EXECUTE ON FUNCTION pg_start_backup(text, boolean, boolean) to barman;
GRANT EXECUTE ON FUNCTION pg_stop_backup() to barman;
GRANT EXECUTE ON FUNCTION pg_stop_backup(boolean, boolean) to barman;

-- PostgreSQL 15버전 이상은 위 세 줄을 다음 두 줄로 대체
----------------------------------------------------------------------------------------------------
-- GRANT EXECUTE ON FUNCTION pg_backup_start(text, boolean) to barman;
-- GRANT EXECUTE ON FUNCTION pg_backup_stop(boolean) to barman;
----------------------------------------------------------------------------------------------------

GRANT EXECUTE ON FUNCTION pg_switch_wal() to barman;
GRANT EXECUTE ON FUNCTION pg_create_restore_point(text) to barman;

GRANT pg_read_all_settings TO barman;
GRANT pg_read_all_stats TO barman;
  • PostgreSQL 파라미터 적용
-- WAL Sender 파라미터는 연결할 PostgreSQL 아키텍처에 따라 다릅니다.
max_wal_senders = 2

-- 백업에 필요한 모든 정보가 트랜잭션 로그 파일에 포함되도록 해당 매개변수를 적용합니다.
wal_level = 'replica' | 'logical'

-- 스트리밍 연결을 통해 WAL 파일을 수신하기 위해 매개변수를 적용합니다.
max_replication_slots = 2
  • pg_hba.conf 파일 수정
host    replication     streaming_barman     [BARMAN_SERVER_IP]/32        trust
host replication barman   [BARMAN_SERVER_IP]/32  trust
host all   barman    [BARMAN_SERVER_IP]/32 trust


Barman 서버 세팅

  • PostgreSQL 서버에 접근하기 용이하게 .pgpass 파일을 생성합니다.
[root@localhost ~]# su - barman
[barman@localhost ~]$ touch .pgpass
[barman@localhost ~]$ chmod 600 .pgpass
[barman@localhost ~]$ vi .pgpass

#hostname:port:database:username:password
[POSTGRESQL_SERVER_IP]:5432:postgres:barman:[BARMAN_USER_PASSWD]


SSH 세팅

SSH 키 교환은 서로 다른 시스템의 사용자 간에 비밀번호 없는 보안 연결을 구현하는데 매우 일반적인 방법입니다.

PostgreSQL 서버와 Barman 서버 모두 생성해주고 WAL 보관 및 백업에 사용하게 됩니다.

WAL 스트리밍만 적용하거나 PostgreSQL 서버 백업만 구성을 원한다면 해당 세팅은 필요하지 않습니다.

  • PostgreSQL 서버 SSH 세팅 (PostgreSQL to Barman)
[postgres@localhost:~]$ mkdir ~/.ssh
[postgres@localhost:~]$ chmod 700 ~/.ssh
[postgres@localhost:~]$ cd ~/.ssh
[postgres@localhost:.ssh]$ ssh-keygen -t rsa
... (Enter 3번)

[postgres@localhost:.ssh]$ ssh-copy-id -i id_rsa.pub barman@[BARMAN_SERVER_IP]
... (barman USER 의 패스워드 입력)
  • Barman 서버 SSH 세팅 (Barman to PostgreSQL)
[barman@localhost ~]$ mkdir .ssh
[barman@localhost ~]$ chmod 700 ~/.ssh
[barman@localhost ~]$ cd ~/.ssh
[barman@localhost .ssh]$ ssh-keygen -t rsa
... (Enter 3번)

[barman@localhost .ssh]$ ssh-copy-id -i id_rsa.pub postgres@[POSTGRESQL_SERVER_IP]
... (postgres USER 의 패스워드 입력)
  • Barman 서버 to PostgreSQL 서버
[barman@localhost ~]$ ssh postgres@192.168.1.215
Last login: Wed Feb 7 00:26:00 2024
[postgres@localhost:~]$
  • PostgreSQL 서버 to Barman 서버
[postgres@localhost:~]$ ssh barman@192.168.1.214
Last login: Tue Feb 6 20:23:13 2024
[barman@localhost ~]$

※ 출처 : https://docs.pgbarman.org/release/3.10.0/index.html

광고성 정보 수신

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다.
내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보
  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
 

개인정보 수집 및 이용

개인정보 수집, 활용 목적 및 기간

(주)티맥스티베로의 개인정보 수집 및 이용 목적은 다음과 같습니다. 내용을 자세히 읽어보신 후 동의 여부를 결정해 주시기 바랍니다.

  • 수집 목적: 티맥스티베로 뉴스레터 발송 및 고객 관리
  • 수집 항목: 성함, 회사명, 회사 이메일, 연락처, 부서명, 직급, 산업, 담당업무, 관계사 여부, 방문 경로
  • 보유 및 이용 기간: 동의 철회 시까지

※ 위 개인정보 수집 및 이용에 대한 동의를 거부할 권리가 있습니다.
※ 필수 수집 항목에 대한 동의를 거부하는 경우 뉴스레터 구독이 제한될 수 있습니다.

개인정보의 처리 위탁 정보

  • 업체명: 스티비 주식회사
  • 위탁 업무 목적 및 범위: 광고가 포함된 뉴스레터 발송 및 수신자 관리
  •