Barman

개요

OpenSQL의 효율적인 백업 및 복구를 지원하는 Barman 구성 및 실행방법에 대해 설명한다.


환경 설정

Barman

Streaming Replication을 통한 백업을 사용하는 경우 PostgreSQL 클라이언트 유틸리티가 필요

$ sudo dnf install -y postgresql16 postgresql16-libs

PostgreSQL 유틸리티 pg_receivewal 을 사용자 barman 이 사용할 수 있도록 경로 설정

$ echo 'export PATH=$PATH:/usr/pgsql-16/bin' >> ~/.bashrc
$ source ~/.bashrc

  • /etc/barman.conf

; Main configuration file

[barman] # 글로벌 환경 구성, OS 사용자 이름 및 barman 데이터와 로그를 저장할 경로 등을 지정

; System user
barman_user = barman
configuration_files_directory = /etc/barman.d

; Main directory
barman_home = /var/lib/barman

log_file = /var/log/barman/barman.log
log_level = INFO

  • /etc/barman.d/opensql.conf

[opensql] # 서버 이름
cluster = opensql   # 후술할 모듈들과 같은 구성임을 나타내기 위한 태그
conninfo = host=node1 port=5432 user=opensql dbname=opensql
streaming_conninfo = host=node1 port=5432 user=opensql_streaming dbname=opensql
backup_method = postgres
streaming_archiver = on
slot_name = barman

[pg-2]    # 모델 이름, Patroni REST API에서 제공하는 멤버 이름과 일치해야 함
cluster = opensql   # 이 모델이 종속된 서버를 구분하기 위한 태그
model = true        # 서버 정의가 아닌, 서버에 종속되어 일부 옵션을 오버라이딩 하는 '모델'임을 명시
conninfo = host=node2 port=5432 user=opensql dbname=opensql
streaming_conninfo = host=node2 port=5432 user=opensql_streaming dbname=opensql

[pg-3]
cluster = opensql
model = true
conninfo = host=node3 port=5432 user=opensql dbname=opensql
streaming_conninfo = host=node3 port=5432 user=opensql_streaming dbname=opensql

Barman Agent

Primary - Replica 로 구성된 PostgreSQL 클러스터에서 Primary 노드에 Streaming 연결을 맺고 WAL을 스트리밍 받기 위해 Barman은 Primary 노드로의 접속 정보를 필요로 한다.

OpenSQL v3.0 부터 도입되는 Patroni의 REST API를 활용하면 Switchover 및 Failover가 발생하는 경우에도 클러스터의 정보 및 Primary 노드로의 접속 정보를 동적으로 가져올 수 있다.

Barman 자체적인 Configuration Switch 기능과 연동하여, PostgreSQL 클러스터의 리더 노드에 변경이 생긴 경우에도 Barman이 Streaming Connection을 새로운 Primary 노드로 맺기 위한 관리 서버 Barman Agent를 제공한다.

$ pip install -r requirements.txt

## Barman을 실행할 수 있는 권한이 있는 사용자여야 한다.
## Barman 기본 환경 설정의 [barman] 섹션 barman_user 필드
$ python3 server.py &
## Systemd 서비스로 등록하는 방안 고려

Barman Agent가 실행되는 경로에 config.yaml 설정파일이 존재해야 한다. 해당 설정파일의 예시 및 설정할 수 있는 항목들에 대한 설명은 아래와 같다.

listen: "192.168.0.100"
port: 8080
cluster: opensql
patroni:
  - patroni_1:8008
  - patroni_2:8008
  - patroni_3:8008
  • listen : Barman Agent 서버의 TCP 리스너가 바인딩할 네트워크 인터페이스 주소를 입력한다. 항목이 없는 경우 기본 0.0.0.0 값이 사용된다.

  • port : Barman Agent 서버의 TCP 리스너가 바인딩할 포트 번호를 입력한다. 항목이 없는 경우 기본 8080 값이 사용된다.

  • cluster : 필수 항목으로 Barman 환경 구성에서 설정한 서버 이름과 일치해야 한다. barman config-switch 명령을 실행할 때 참조된다.

  • patroni : 필수 항목으로 YAML 리스트 형식으로 접근 가능한 Patroni 서버들의 REST API 엔드포인트들을 입력한다. 요청을 받고 최신 Patroni 클러스터 정보를 가져오기 위해 참조되며 Patroni 서버로 보내는 HTTP 요청은 2초의 Timeout을 가진다. 실패한 Endpoint는 제외되고 마지막으로 성공한 Endpoint를 캐시하여 사용한다.

Patroni

Barman에서 사용할 Replication Slot과 Patroni에서 Role Change가 발생했을 때 실행할 Callback을 지정한다.

  • patroni.yml

    bootstrap:
      dcs:
        slots:
          barman:
            type: physical


실행

Streaming Replication 실행

$ barman receive-wal opensql ## Foreground 프로세스로 receive-wal 시작
Starting receive-wal for server opensql

$ barman cron                ## barman receive-wal 을 실행하는 Cron Job을 등록
Starting WAL archiving for server opensql
Starting streaming archiver for server opensql

Last updated