이번 문서에서는 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 | |
적용대상 | Main 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기술기획팀
이미지 제작 | 브랜드디자인팀
'엑셈 경쟁력 > DB 인사이드' 카테고리의 다른 글
DB 인사이드 | PostgreSQL HOT - 3. Fillfactor와 HOT Update (1) | 2023.08.31 |
---|---|
DB 인사이드 | PostgreSQL Replication - Slot (2) | 2023.07.26 |
DB 인사이드 | PostgreSQL Replication - 설정 확인 (0) | 2023.06.29 |
DB 인사이드 | PostgreSQL Replication - Catalog (0) | 2023.06.29 |
DB 인사이드 | PostgreSQL Replication - Function (0) | 2023.06.29 |
댓글