안녕하세요. 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 파일이 생성됨. |
쉽지만 안쉬움 끗!