메뉴 닫기

Rocky 9 – PostgreSQL(13.16) Replication

안녕하세요. PostgreSQL 설치 후, 리플리케이션 설정을 진행해보겠습니다.

 

PostgreSQL은 확장성과 준수를 강조하는 고급 오픈 소스 관계형 데이터베이스 관리 시스템(RDBMS)입니다. 신뢰성, 견고함 및 복잡한 쿼리를 지원합니다. PostgreSQL은 작은 애플리케이션부터 대규모 시스템까지 적합한 확장성을 제공합니다.

 

PostgreSQL  특징

ACID 준수: 데이터의 신뢰성과 일관성을 보장

확장성: 사용자 정의 데이터 유형, 연산자 및 함수를 지원

풍부한 인덱싱 옵션: 다양한 인덱싱 방법으로 쿼리 성능을 향상

동시성 제어: 여러 사용자가 데이터베이스에 동시에 상호작용할 수 있게 함.

PostgreSQL과 MySQL/MariaDB 리플리케이션의 차이점

리플리케이션 유형:

PostgreSQL: 물리적 및 논리적 리플리케이션을 지원

MySQL/MariaDB: 주로 바이너리 로그 기반의 리플리케이션을 사용

구성:

PostgreSQL: 주로 PostgreSQL.conf 및 pg_hba.conf 파일을 통해 구성

MySQL/MariaDB: 리플리케이션 사용자 설정 및 바이너리 로그 관리가 필요

데이터 일관성:

PostgreSQL: 데이터 일관성과 무결성을 보장하며 ACID 준수에 중점을 둠.

My/MariaDB: 다양한 스토리지 엔진(예: InnoDB, MyISAM)을 제공하여 항상 완전한 ACID 준수를 보장하지는 않을 수 있습니다.


 

1. 마스터 및 슬레이브 서버 공통 작업

시스템 패키지 업데이트

# dnf update

PostgreSQL 및 추가 패키지 설치

# dnf install -y PostgreSQL-server PostgreSQL-contrib

PostgreSQL 서비스 시작 및 활성화

# systemctl start postgresql

# systemctl enable postgresql

2. 마스터 서버 설정

PostgreSQL 커맨드 라인 접속

# sudo -u postgres psql

테스트 데이터베이스와 테이블 생성

postgres=# CREATE DATABASE test_db;

postgres=# \c test_db

postgres=# CREATE TABLE test_table (id SERIAL PRIMARY KEY, name VARCHAR(50));

postgres=# INSERT INTO test_table (name) VALUES (‘Sample Data’);

postgres=# INSERT INTO test_table (name) VALUES (‘Alice’), (‘Bob’), (‘Charlie’), (‘David’), (‘Eve’);

리플리케이션 전용 계정 생성 및 권한 설정

postgres=# CREATE ROLE repl WITH REPLICATION LOGIN PASSWORD ‘qwer1234’;

vi /var/lib/pgsql/data/pg_hba.conf

host replication repl 슬레이브 IP/32 md5

생성한 계정명이랑 슬레이브 IP를 수정해줍니다.

vi /var/lib/pgsql/data/postgresql.conf

listen_addresses = ‘*’

wal_level = replica

max_wal_senders = 10

수정해줍니다.

PostgreSQL 서비스 재시작

# sudo systemctl restart postgresql

 3. 슬레이브 서버 설정

마스터 서버의 데이터를 그대로 가져오기 때문에 먼저 데이터 백업을 진행합니다.

# systemctl stop postgresql // DB먼저 종료

# mkdir -p /backup

# cp -arp /var/lib/pg/data /backup

# rm -rf /var/lib/pg/data

pg_basebackup을 사용하여 데이터 가져오기

# pg_basebackup -h 마스터 IP -U repl -D /var/lib/pgsql/data -Fp -Xs -P

마스터 서버 데이터 가져오기

standby.signal 파일 생성

# touch /var/lib/pg/data/standby.signal

vi /var/lib/pgsql/data/postgresql.conf

primary_conninfo = ‘host=마스터 IP port=5432 user=repl password=qwer1234’

-> 하단에 추가해줍니다.

vi /var/lib/pgsql/data/pg_hba.conf

host replication repl 마스터 IP/32 md5

-> 마스터 서버의 데이터 파일들을 그대로 가져오기때문에 슬레이브 IP로 설정되어있을 것이다. 마스터 서버 IP로 변경해줍니다.

데이터 디렉토리 권한 변경

# sudo chown -R postgres:postgres /var/lib/pgsql/data

PostgreSQL 서비스 재시작

# systemctl restart postgresql

마스터 서버에서 리플리케이션 확인

postgres=# SELECT * FROM pg_stat_replication;

슬레이브 서버에서 리플리케이션 확인

postgres=# SELECT * FROM pg_stat_wal_receiver;

마스터 서버에서 생성한 테스트 데이터를 확인해봅시다~

 

참고 사항

로그 파일은 /var/lib/pg/data/log/ 경로에 있음.

예를 들어, 화요일에 진행했다면 PostgreSQL-Tue.log 파일이 생성됨.

쉽지만 안쉬움 끗!

Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x