본문 바로가기
엑셈 경쟁력/DB 인사이드

DB 인사이드 | PostgreSQL Replication - Parameter

by EXEM 2023. 7. 26.

이번 문서에서는 PostgreSQL Replication과 관련된 Parameter에 대해 알아보겠습니다.

아래 그림을 통해서 Replication 종류에 따라 설정이 필요한 Parameter를 확인할 수 있습니다. 각 Parameter에 대한 설명은 Replication Parameter에 알파벳 순서로 설명되어 있습니다.

Replication Parameter

archive_cleanup_command

Standby Server에서 더 이상 필요하지 않은 아카이브 WAL 파일을 정리하기 위해 사용됩니다. 보통 WAL 파일 정리를 쉽게 하기 위해 pg_archivecleanup Application을 주로 사용합니다.

 

archive_cleanup_command = 'pg_archivecleanup /PostgreSQL/Archive %r'

 

  Description
적용대상 Standby Server
카테고리 WRITE-AHEAD LOG → Archive Recovery
재기동 불필요
변경사항 • PostgreSQL 12 버전에서 생긴 Parameter입니다.

 

 

archive_command

WAL 파일이 가득 차면 Archive Directory에 보관하기 위해 실행하는 쉘 명령어를 지정합니다. 아래와 같이 지정하면 pg_wal Directory에 있는 WAL 파일을 /PostgreSQL/Archive Directory로 복사하라는 의미입니다.

 

archive_command = 'cp %p /PostgreSQL/Archive/%f'

 

  Description
적용대상 Main Server
카테고리 WRITE-AHEAD LOG → Archiving
재기동 불필요
예약값 %p : WAL 파일의 절대경로
%f : 아카이브 파일 이름

 

 

archive_mode

Archive Mode를 사용하는 것으로 설정하면, WAL 파일이 저장되는 Directory(pg_wal)에 저장되는 WAL 파일을 archive_command에 설정된 명령을 통하여 Archive Directory로 전달합니다.(주로 복사합니다.) wal_keep_size(PostgreSQL 12 버전이하 wal_keep_segments) Parameter에 의해 생성된 지 오래된 WAL 파일부터 삭제되기 때문에 삭제되는 WAL 파일을 보관하기 위한 용도로 사용합니다. wal_level = replica 이상으로 설정되어야 하며, wal_level = minimal인 경우 Archive Mode를 사용할 수 없습니다.

 

archive_command = 'cp %p /PostgreSQL/Archive/%f'

 

  Description
적용대상 Main Server
카테고리 WRITE-AHEAD LOG → Archiving
기본값 off
재기동 필요
Values always, on, off

 

 

archive_timeout

일반적으로 WAL 파일이 가득 차야 새로운 WAL 파일로 전환(Switch)되는데, 트랜잭션이 없는 등 WAL 파일에 저장할 내용이 없는 경우 아카이브가 발생하지 않습니다. 아카이브가 발생하지 않으면 File-based Replication과 Streaming Replication 설정 시 Main Server와 Standby Server 간의 Data Lag이 존재하는 상태가 길어지게 됩니다. archive_timeout Parameter를 통해서 WAL 파일을 주기적으로 전환하는 시간을 지정할 수 있으며, 이는 주기적으로 아카이브를 발생시킬 수 있습니다. 일반적으로 60초 정도로 설정하며, 너무 짧게 설정할 경우 Archive Directory 크기가 증가하므로 설정에 주의해야 합니다.

  Description
적용대상 Main Server
카테고리 WRITE-AHEAD LOG → Archiving
기본값 0
재기동 불필요

 

 

hot_standby

Database가 Standby 상태로 Replication이 이루어지는 Standby Server에서는 반드시 on으로 설정해야 합니다. off로 설정할 경우 Replication이 유지되는 동안 SQL을 수행할 수 없습니다.

  Description
적용대상 Standby Server
카테고리 WRITE-AHEAD LOG → Standby Servers
기본값 on
재기동 필요
Values on, off

 

 

max_replication_slots

Database가 지원할 수 있는 Replication Slot의 최대 수를 지정합니다. 기본값은 10이며, 현재 존재하는 Replication Slot 수보다 작은 값으로 설정하면 서버가 구동되지 않습니다. 또한 Replication Slot을 사용하기 위해서는 wal_level = replica 이상으로 설정해야 합니다.

  Description
적용대상 Main Server
카테고리 REPLICATION → Sending Servers
기본값 10 (PostgreSQL 9.6 버전이하는 0)
재기동 필요
변경사항 • PostgreSQL 10 버전부터 기본값이 0에서 10으로 변경되었습니다.

 

 

max_wal_senders

WAL Sender 프로세스에 연결할 수 있는 최대 수를 지정합니다. 기본값은 10이며, WAL Sender 프로세스는 max_connections 보다 큰 값으로 설정할 수 없으며, 일반적으로 Standby Server의 수 + 1로 설정합니다.

  Description
적용대상 Main Server
카테고리 REPLICATION → Sending Servers
기본값 10 (PostgreSQL 9.6 버전이하는 0)
재기동 필요
변경사항 • PostgreSQL 10 버전부터 기본값이 0에서 10으로 변경되었습니다.(0은 Replication이 비활성화를 의미)

 

 

primary_conninfo

Main Server에 연결 시 사용할 접속 문자열을 설정합니다. 기본적으로 Main Server의 Host(IP), Port, Replication 권한이 있는 User, Password를 지정합니다.

  Description
적용대상 Standby Server
카테고리 WRITE-AHEAD LOG → Standby Servers
기본값 primary_conninfo = ‘host=10.10.45.230 port=5432 user=replicauser password=mypass’
재기동 불필요
변경사항 • PostgreSQL 12 버전부터 생긴 Parameter 입니다.
• PostgreSQL 11 버전까지는 recovery.conf에 기술되어 있습니다.

 

 

primary_slot_name

Main Server에서 사용하는 Replication Slot 이름을 지정합니다. Replication Slot을 사용하지 않는 경우 지정하지 않아도 됩니다.

  Description
적용대상 Standby Server
카테고리 WRITE-AHEAD LOG → Standby Servers
재기동 불필요
변경사항 • PostgreSQL 12 버전부터 생긴 Parameter 입니다.
• PostgreSQL 11 버전까지는 recovery.conf에 기술되어 있습니다.

 

 

restore_command

WAL Archive 파일을 이용하여 Database를 복구할 때 사용하는 쉘 명령을 지정합니다.

  Description
적용대상 Standby Server
카테고리 WRITE-AHEAD LOG → Archive Recovery
재기동 불필요
변경사항 • PostgreSQL 12 버전부터 생긴 Parameter 입니다.
• PostgreSQL 11 버전까지는 recovery.conf에 기술되어 있습니다.
예약값 %p : WAL 파일이 복사 절대경로
%f : 아카이브 파일 이름

 

 

wal_keep_size

WAL 파일이 보관되는 pg_wal Directory에 저장 가능한 WAL 파일들의 총크기를 지정합니다. 메가바이트(MB) 단위로 설정이 가능하며, 하나의 WAL 파일은 통상 16MB 이므로 wal_keep_size WAL 파일의 개수를 계산할 수 있습니다. Standby Server에서 Replication 하기 전에 WAL 파일이 삭제되어 Replication이 중단되는 상황을 방지하기 위해 WAL 파일 개수를 조절해야 합니다.

  Description
적용대상 Standby Server
카테고리 REPLICATION → Sending Servers
기본값 0
재기동 불필요
변경사항 • PostgreSQL 13 버전부터 생긴 Parameter 입니다.
• PostgreSQL 12 버전까지 WAL 파일 개수를 지정하는 wal_keep_segments Parameter를 사용하였습니다.

 

 

wal_level

PostgreSQL 9.0 버전에서 도입되었고 WAL에 기록되는 정보의 양을 결정합니다. 사용할 수 있는 값으로는 minimal, replica, logical이 있습니다. Physical Replication을 사용하고자 할 때는 replica로 설정하며, Logical Replication을 사용하고자 할 때는 logical로 설정해야 합니다.

  Description
적용대상 Main Server
카테고리 WRITE-AHEAD LOG → Settings
기본값 replica (PostgreSQL 9.6 이하버전은 minimal)
재기동 필요
Values minimal : Crash나 immediate shutdown으로 인해 복구에 필요한 정보만 기록.
replica : PostgreSQL 9.6 버전부터 archive와 hot_standby 내용 통합.
    - archive : minimal + WAL 보관 필요한 정보를 추가.
    - hot_standby : Archive + Standby Server에서 읽기 전용 쿼리를 실행하는데 필요한 정보
logical : replica + 논리적 디코딩을 지원하는 데 필요한 정보를 추가. 저장되는 데이터양이 많아져 WAL의 크기 증가.
변경사항 • PostgreSQL 9.4 버전부터 logical이 추가되었습니다.
• PostgreSQL 9.6 버전부터 replica가 archive와 hot_standby를 대신합니다.
• PostgreSQL 10 버전부터 기본값이 minimal에서 replica로 변경되었습니다.

 

 

 

 

기획 및 글 | DB기술기획팀

이미지 제작 | 브랜드디자인팀

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

댓글