내용으로 건너뛰기
GaramX
사용자 도구
로그인
사이트 도구
검색
도구
문서 보기
이전 판
역링크
최근 바뀜
미디어 관리자
사이트맵
로그인
>
최근 바뀜
미디어 관리자
사이트맵
현재 위치:
home
»
postgresql
»
replication
추적:
postgresql:replication
이 문서는 읽기 전용입니다. 원본을 볼 수는 있지만 바꿀 수는 없습니다. 문제가 있다고 생각하면 관리자에게 문의하세요.
======= PostgreSQL Replication ======= 자! 서버복제를 구성하여 보자! 어떻게 되는지 하나 하나 알아 보자고요. 여러가지 방법이 있습니다. 분석을 해야하나 장단점이 있는데 좀 알아보고 맞는 것 찾아봐야 겠습니다. WAL을 넘겨서 Standby Server가 Active Server의 자료와 동기화하는방법이 있고, 로지컬로 변경분을 전송하는 방법이 있다. ===== WAL ===== PostgreSQL에서 제공하는 복제 서버 구축 방식을 요약하면 다음과 같다. * 마스터 서버에서 발생하는 모든 작업을 로그로 만든다. * 이 로그를 스탠바이 서버(들)로 전달한다. * 스탠바이 서버(들)에서 받은 로그를 복원(재실행)한다. * 이렇게 하면 마스터 서버와 같은 스키마/데이터를 가지는 복제 서버가 탄생하게 된다. 이 때, 마스터 서버의 로그를 WAL(Write Ahead Log)이라고 하며, 이 로그는 CentOS 기준 /var/lib/pgsql/9.x/data/pg_xlog 디렉토리에 쌓이게 된다. 어디에 쌓이든 postgresql.conf파일에서 설정된다. ===== Log Shipping ===== WAL파일을 전송하면 Standby Server에서 복구방식으로 Database를 동기화 한다. Stream 방식도 별도의 설명이 있는 것같은데 archive_timeout시간을 main서버에서 조절가능하다.(초단위) Main Server의 부담이 있다고 한다. Standby Server가 다운되었을 경우 오버헤드가 있을 수 있다. 본 설정은 Ubuntu에서 postgresql-16으로 하였다. {다른 OS(Debian)과 묶어 보려하였으나 postgresql의 빌드버전차이로 Debian과는 연결을 못 하였다.} PostgreSQL이 설치된 Platform이 다르다면 Replication 불가능합니다. 또한 Major Version은 동일해야 합니다. 클러스터의 물리적인 복제이기 때문에 동일한 pg 버전 간의 복제만 가능합니다. 아래와 같은 순서로 진행한다. - scp를 위한 key준비 ( Main Server에서 Standby Server로 ) - WAL파일을 위한 Archive파일 전송하기 위한 path 구성 - Main Server 설정 - Data Backup 및 Restore - Standby Server 설정 ==== 1.scp 준비 ==== public key 생성 <code bash> # Main Server에서 postgres@main-server:~$ ssh-keygen # .ssh/id_rsa.pub파일 내용을 Standby Server의 .ssh/authorized_keys에 내용을 추가 하여 넣음 postgres@main-server:~$ cat .ssh/id_rsa.pub # public key를 복사 </code> <code bash> # Standby Server에서 postgres@standby-server:~$ mkdir .ssh postgres@standby-server:~/.ssh$ vi authorized_keys # 복사한 main server의 public key를 authorized_keys에 붙여넣기를 한다. </code> ==== 2.WAL파일을 위한 Archive파일 전송하기 위한 path 구성 ==== Standby Server의 Archive파일를 받기위한 Directory생성 <code bash> # Standby Server postgres@standby-server:~$ mkdir Archive </code> ==== 3.Main Server 설정 ==== postgresql.conf 파일수정 postgresql 16버전기준 설정파일위치 /etc/postgresql/16/main/postgresql.conf <code> wal_level = replica archive_mode = on archive_command = 'scp %p postgres@standby-server:/var/lib/postgresql/Archive/%f' archive_timeout = 30 # force a WAL file switch after this max_wal_senders = 10 # max number of walsender process </code> * archive_timeout : sec / WAL File(16MB)이 가득 차지 않아도 30초마다 WAL File을 Switching) ==== 4.Data Backup 및 Restore ==== Main Server를 stop & start data backup <code bash> # dibian인 경우 /var/lib/postgresql/16/main cd /var/lib/postgresql/16 tar -cvf Data.tar main </code> Data.tar를 Standby Server로 복사하고 압축해제 <code bash> tar -xvf Data.tar </code> <code bash> touch standby.signal </code> Standby Server에는 standby.signal 파일이 존재해야한다. ==== 3.Standby Server 설정 ==== <code> restore_command = 'test -f /var/lib/postgresql/Archive/%f && cp /var/lib/postgresql/Archive/%f %p' archive_cleanup_command = 'pg_archivecleanup /var/lib/postgresql/Archive %r' hot_standby = on # "off" disallows queries during recovery </code> DB가 Standby 상태로 스트리밍 복제가 이루어지는 Slave노드에는 반드시 on으로 설정되어 있어야 한다. ===== Stream Replication ===== ====== Logical Replication ====== Logical은 DDL문장이 아닌 것들에 대해서 지정이 가능하고, 당연히 유연성이 있으나, Interface대용으로 사용하기에 적당할 것같다. <code > CREATE ROLE repluser REPLICATION LOGIN PASSWORD 'pingxxxx'; mama계정으로 접속해야죠 CREATE PUBLICATION maro_publication FOR ALL TABLES; GRANT USAGE ON SCHEMA maro_schema TO repluser; REVOKE USAGE ON SCHEMA maro_schema FROM repluser; GRANT SELECT ON ALL TABLES IN SCHEMA maro_schema TO repluser; REVOKE SELECT ON ALL TABLES IN SCHEMA maro_schema FROM repluser; CREATE SUBSCRIPTION maro_subscription CONNECTION 'dbname=marodb host=garam port=55432 user=repluser password=ping5433' PUBLICATION maro_publication ; DROP SUBSCRIPTION maro_subscription; \dRp, \dRs alias padm='psql -p 55432 -d marodb' </code>
postgresql/replication.txt
· 마지막으로 수정됨: 2025/04/15 10:05 저자
127.0.0.1
문서 도구
문서 보기
이전 판
역링크
맨 위로