※ Setting up PostgreSQL DBMS Replication Configuration.
※ Version: Linux 8.10 (Rocky), PostgreSQL 16.4.
이전 포스팅에서 우리는 주요 파라미터 설정을 하고 PostgreSQL 싱글 서버 구성을 완료했습니다.
이번 글에서는 DBMS(Database Management System) 이중화 구성을 실습해 보겠습니다.
본격적인 실습에 앞서 DBMS 이중화란 무엇이며 이를 구성하는 이유는 무엇인지 살펴보겠습니다.
DBMS 이중화?
• DBMS 이중화는 데이터베이스 관리 시스템의 가용성(Availability)과 안정성(Reliability)을 높이기 위한 기술입니다.
• 하나의 시스템에 장애가 발생해도 다른 시스템이 이를 이어받아 서비스 중단을 최소화하는 구성을 의미합니다.
DBMS 이중화는 HA(High Availability)와 Failover 시스템 구성에 활용되며, 아래와 같은 주요 목적을 가집니다.
DBMS 이중화를 구성하는 이유
1. 서비스 가용성 보장
• 단일 장애점(Single Point of Failure, SPOF)을 제거하여 장애 상황에서도 서비스가 지속되도록 보장합니다.
2. 장애 복구
• 하드웨어, 네트워크, 소프트웨어 문제로 인한 장애 발생 시 다른 시스템이 즉시 서비스를 이어받아 중단 시간을 최소화합니다.
3. 데이터 안전성 확보
• 실시간 데이터 복제 또는 동기화를 통해 데이터 손실을 방지하고 데이터를 안전하게 유지합니다.
4. 성능 향상
• 읽기/쓰기 작업을 여러 시스템으로 분산 처리하여 부하를 줄이고, 특히 읽기 요청이 많은 환경에서는 Read Replica를 활용해 성능을 극대화할 수 있습니다.
5.유지보수 및 업데이트 용이성
• 이중화된 환경에서는 한 시스템에서 업데이트나 유지보수를 진행하는 동안 다른 시스템이 서비스를 지속적으로 제공할 수 있습니다.
이제 DBMS 이중화를 구성하는 방식과 구성 시 고려 사항에 대해 알아보겠습니다.
DBMS 이중화 방식
DBMS 이중화에는 Active-Standby와 Active-Active 구성이 있습니다.
1. Active-Standby 구성
• 구조:
→ 주로 Active 노드가 서비스 요청을 처리합니다(쓰기 작업은 Active-Only).
→ Standby 노드는 대기 상태로 있다가 Active 노드 장애 시에만 서비스 역할 수행합니다.
→ DBMS 설정에 따라 Standby 노드를 Read-Only 상태로 활용할 수 있습니다.
• 방식:
▫ 동기식 복제(Synchronous):
→ 장점: 높은 데이터 일관성을 보장합니다.
→ 단점: 네트워크 지연과 동기화로 인해 성능 저하가 발생할 수 있습니다.
▫ 비동기식 복제(Asynchronous):
→ 장점: 성능에 중점을 둔 방식입니다.
→ 단점: 장애 발생 시 마지막 복제 시점 이후의 데이터가 유실될 가능성이 있습니다.
2. Active-Active 구성
• 구조:
두 시스템이 동시에 활성화되어 작업을 병렬 처리합니다.
주요 목적은 부하 분산(Load Balancing)과 높은 가용성 제공입니다.
• 특징:
→ 동기화 문제 해결이 필요하며, 이를 위해 데이터 충돌 방지 및 실시간 동기화 기술이 필요합니다.
(Locking Mechanisms, Conflict Resolution 등)
→ 포스팅 시점 기준으로 Oracle DBMS만 온전한 Active-Active 구성 가능합니다.
이중화를 구성할 때 고려할 점
1. 이중화 방식 선택
• Active-Standby:
→ 동기식 복제(Synchronous): 데이터 일관성 중요할 때 적합합니다.
→ 비동기식 복제(Asynchronous): 성능을 우선시할 때 적합하지만, 장애 발생 시 일부 데이터 유실 가능성이 존재합니다.
• Active- Active:
→ 동시 활성화 및 쓰기 작업 분산 필요 시 선택합니다.
→ 동기화 문제 해결을 위한 추가적인 기술적 조치(Oracel RAC) 필요합니다.
2. 장애 전환(Failover) 시간
• 장애 발생 시 서비스 전환이 얼마나 빠르게 이루어지는지가 중요합니다.
• Failover를 빠르게 처리할 수 있도록 구성이 필요합니다.
3. 데이터 일관성 및 정합성
• 다중 시스템 간 데이터 동기화를 위한 기법 사용:
→ 동기식 복제(Synchronous)
→ Locking Mechanisms, Conflict Resolution Mechanisms(Active-Active 환경에서 충돌 방지)
4. 운영 비용 및 관리 복잡성
• 이중화 시스템은 추가적인 하드웨어, 네트워크 장비, 스토리지 도입으로 운영 비용이 증가하며, 장애 복구, 데이터 동기화 등의 관리 복잡성 또한 높아질 수 있습니다.
→ 효과적으로 관리하기 위해 전문 인력과 모니터링 도구의 도입이 권장됩니다.
DBMS 이중화란 무엇이고, 어떤 목적으로 사용하는지, 구성 방식과 고려해야 할 점을 살펴보았습니다.
이제 PostgreSQL의 Physical Streaming Replication 기능을 활용해 DBMS 이중화 방법을 실습해 보겠습니다.
이번 실습에는 동일한 버전의 PostgreSQL이 설치된 두 대의 싱글 서버가 필요합니다.
우리가 구성할 아키텍처입니다.

1. 사전 준비
• 두 서버에 설치된 PostgreSQL 버전은 반드시 동일해야 합니다.
• 두 서버 간 PostgreSQL 기본 포트(5432)에 대해 TCP 통신이 허용되어야 합니다.
2. Active(Primary) 서버 설정
▸ postgresql.conf 수정
# replication settings
max_wal_senders = 10 # WAL Sender 프로세스의 최대 개수를 설정하는 파라미터
max_replication_slots = 10 # Replication Slot의 최대 개수를 설정하는 파라미터
▸ pg_hba.conf 수정
# replication
host replication replicator <primary_IP_address>/32 trust
host replication replicator <standby_IP_address>/32 trust
# for rewind
host postgres replicator <primary_IP_address>/32 trust
host postgres replicator <standby_IP_address>/32 trust
▸ 파라미터 적용을 위해 아래 명령어로 재기동
pg_ctl restart
▸ Replication Role 생성
CREATE ROLE replicator WITH REPLICATION PASSWORD 'replicator_password' LOGIN;
3. Standby 서버 설정
▸ 데이터 영역 삭제
rm -rf $PGDATA/*
▸ Primary 서버 데이터 복제
→ 베이스백업을 활용하여 초기 데이터 복제
pg_basebackup -h <primary_IP_address> -U replicator -D /data -Fp -Xs -P
▸ standby.signal 파일 생성
touch $PGDATA/standby.signal
▸ postgresql.conf 수정
# connection info
primary_conninfo = 'host=<primary_IP_address> port=5432 user=replicator password=replicator_password application_name=node02_standby'
▸ Standby 서버 시작
pg_ctl start
4. 복제 상태 확인
▸ Primary 서버에서 확인
psql
SELECT * FROM pg_stat_replication;
▸ Primary 서버에서 테이블 생성
CREATE TABLE test_table (i int);
▸ Standby 서버에서 생성된 테이블 확인
psql
\dt

▸ OS 명령어로 프로세스 상태 확인
ps -ef | grep postgres

이번 포스팅에서 우리는 PostgreSQL 이중화 구성까지 완료하였습니다.
다음 포스팅에서는 이중화된 DBMS 장애 발생 시 처리 방법과 원상 복구 방법에 대해 알아보겠습니다.
'PostgreSQL' 카테고리의 다른 글
| PostgreSQL: 쉘 스크립트로 PostgreSQL 고가용성(HA) 구현 (2) | 2024.12.11 |
|---|---|
| PostgreSQL: 고가용성(HA) 도구 비교 - Patroni vs repmgr (0) | 2024.12.10 |
| PostgreSQL: 이중화 장애 처리, 원상 복구 방법 (32) | 2024.12.09 |
| PostgreSQL: postgresql.conf 파라미터 설정 방법 (33) | 2024.12.02 |
| PostgreSQL: RHEL 기반 Linux에 PostgreSQL 설치 방법 (32) | 2024.11.29 |