PostgreSQL 복제


45

우리는이 문제를 사무실 주변에서 끊임없이 쫓아 내고 계속해서 문제가 제기됩니다. PostgreSQL 복제를 어떻게 처리합니까? Master-Slave, Master-MultiSlave 및 Master-Master로 간단하게 유지하면서 고급 클러스터에 대해서도 이야기하지는 않습니다. MySQL에 대한 설정은 일반적으로 매우 간단하다는 것을 알았습니다. 완벽하지는 않지만 특히 구성하기가 쉬운 경우 장애 조치는 간단합니다. 우리는 Slony와 함께 해왔지만 약간의 변화가 있습니다 (스키마 변경에는 개입이 필요하고 새로운 데이터베이스에는 개입이 필요합니다). PGPool2는 노드가 다운 될 때까지 꽤 좋았으며 복제를 다시 동기화 할 수있는 방법을 찾을 수 없었습니다. 기본적으로 여기 내가 일반적으로 찾고있는 것이 있습니다.

  • 손쉬운 설정 (어려운 설정을 위해 정착하지만 쉽게 확장 할 수 있습니다)
  • 단순한 장애 조치
  • 장애가 발생한 노드를 다시 가져 오려면 시간이 필요합니다 (예 : mysql. 서버가 다운되어 서버를 가져 와서 복제가 완료 될 때까지 대기)
  • 스키마 변경으로 복제가 중단되지 않습니다
  • 서버에 새 데이터베이스를 추가하는 것은 매끄 럽습니다 (예 : mysql과 같이 전체 DB 서버를 복제 할 수 있으므로 마스터에 새 데이터베이스가 만들어지고 슬레이브에 자동으로 전파됨)

MySQL은 이러한 것들을 대부분 잘 처리하지만 PostgreSQL에 대해서는 어느 정도 좋아합니다. 게다가, 우리는 이것이 유일한 옵션 인 상황에 처해 있으며 믹스에 복제를 추가하고 싶습니다. 현재 무엇을 사용하고 있으며 솔루션에 대해 어떻게 생각하십니까? 이것은 MySQL과 PostgreSQL의 게시물이 아닙니다. 나는 그것이 시작하려는 것이 아니기 때문에 약속합니다. :)


3
이에 대한 답변에 관심이 있습니다. MySQL 배경에서 나온 PSQL의 복제 옵션은 가장 농업 적입니다.
Dave Cheney

예, 지금까지 내가 사용한 모든 옵션에는 상당한 단점이 있습니다. 내가 뭔가를 분명 누락 기대 .. 그러나 나는 내가 생각하지 않는다
f4nt

다른 것이 없다고 생각하지만 누군가 나를 잘못 증명하고 싶어합니다.
Vinko Vrsalovic

BTW, pgsql-general@postgresql.org를 사용해 보셨습니까?
Vinko Vrsalovic

답변:


9

짧은 대답-온라인 읽기 전용 슬레이브가 필요한 경우 PostgreSQL에는 아직 그러한 솔루션이 없습니다.

PostgreSQL 9.0 (Spring / Summer 2010)에 포함 된 두 가지 주요 개발 프로젝트가 현재이 영역에서 진행 중입니다.

  • 동기식 복제 :

http://wiki.postgresql.org/wiki/NTT's_Development_Projects

  • 핫 대기 슬레이브 만 읽기 :

http://wiki.postgresql.org/wiki/Hot_Standby

이는 MySQL 스타일 복제의 사용 편의성에서 MySQL의 버그 / 문제를 뺀 것과 PostgreSQL의 사용자가 알고있는 신뢰성을 달성하는 것을 목표로합니다.

이 모든 것은 2008 년 PostgreSQL Core Team의 매니페스트에 의해 시작되었습니다.

http://archives.postgresql.org/pgsql-hackers/2008-05/msg00913.php

현재 가장 큰 사용자 기반을 가진 PostgreSQL 복제 솔루션은 Slony-I (쓰기에 더 비싸고 스키마 변경을 어렵게 만듭니다), WAL 배송 / walmgr (노예를 온라인으로 사용할 수 없음) 및 Skype / Skytools의 pgQ / londiste ( 완성 된 솔루션보다 더 많은 도구 / 빌딩 블록).

Log Shipping, walmgr 및 Slony-I에 대해 몇 가지 글을 썼습니다.

자세한 내용은 http://blogs.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20


6
Synchronous Replication + Hot Standby를 사용할 수 있습니다- 사용 가능한 기술에 대한 자세한 요약 은 wiki.postgresql.org/wiki/… 를 참조하십시오
David Fraser

5

그리고 또 다른 해결책을 반지에 던져 넣으려면 : rubyrep.

요구 사항과 비교하려면 다음을 수행하십시오.

  • 손쉬운 설정
    그렇습니다. 실제로 rubyrep의 주요 초점입니다.
  • 단순한 장애 조치
    예. 실제로 rubyrep은 마스터-마스터 복제를 수행합니다. 장애 조치를 위해 아무 조치도 필요하지 않습니다. 다른 데이터베이스를 사용하기 시작하십시오.
  • 스키마 변경으로 복제가 중단되지 않습니다
    . 예.
    기본이 아닌 키 변경의 경우 복제를 중지 할 필요조차 없습니다 (그러나 스키마가 동시에 양쪽에서 변경되는지 확인).
    테이블을 추가 / 제거하려면 복제 데몬을 다시 시작하면됩니다. 테이블의 기본 키 열만 변경하면 약간의 노력이 필요합니다.
  • 서버에 새 데이터베이스를 추가하는 것은 매끄 럽습니다 (예 : mysql과 같이 전체 DB 서버를 복제 할 수 있으므로 새 데이터베이스가 마스터에서 생성되고 슬레이브에 자동으로 전파됨)
    이는 제한된 방식으로 만 지원됩니다. 각 rubyrep 설치 프로그램은 한 번에 하나의 데이터베이스 만 복제합니다. 그러나 둘 이상의 데이터베이스에 대한 복제를 설정하는 것은 매우 쉽습니다.

4

요구 사항으로 핫 읽기 슬레이브를 언급하는 것에 대해서는 언급하지 않았으므로 공유 스토리지 또는 DRBD와 함께 하트 비트 사용을 제안합니다. 그것은 단지 옳은 일을하고 행정은 산들 바람입니다. 이전 Microsoft SQL Server 클러스터링과 동일한 Linux입니다. 한 노드는 활성 상태이고 다른 노드는 수동적이며 데이터는 두 노드간에 공유됩니다. SQL 기반 복제는 블록 수준에서 모두 처리되므로 SQL 기반 복제에 대해 걱정할 필요가 없습니다.

진지하게, 그것은 당신이 노예를 읽을 필요가 없다면 최고의 솔루션입니다. WAL 아카이브 항목은 기껏해야 호크했으며 서버 재부팅을위한 배송 프로세스를 중단 한 경우 모든 것을 다시 설정해야합니다. 슬로건과 론 디스 테는 겨자를 자르지 않습니다. 메인 소스 트리에 머무르고 상업적으로 가지 않으려면 하트 비트가 가장 좋습니다.


2

요구 사항에서 PITR이 문제를 해결하는 가장 쉬운 방법 인 것 같습니다.

온라인 백업 및 특정 시점 복구 (PITR)

슬레이브 서버를 쿼리해야한다고 말하지 않았으므로 PITR이 적합 할 수 있습니다.

버전 8.0의 PostgreSQL의 표준 부분이므로 이미 실행하고 실행하는 데 필요한 모든 것을 갖추고있을 것입니다.

지시 사항이 너무 길면 SkyTools WalMgr 을 살펴보고 핫 스탠바이 데이터 단일 명령 작업을 생성 / 페일 오버하는 프로세스를 만듭니다.

보다 복잡한 복제 시나리오의 경우 Slony-1에 대한 경험이 많았지 만 PostgreSQL에는 유용한 복제 / HA 옵션이 많이 있습니다.


그리고 그 옵션은 ...?
Dave Cheney

... 블로그 게시물 blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html에 나열된 답변 중 하나 ...
dpavlin

2

비동기 마스터 / 슬레이브 복제를 원하는 경우 Londiste (Skype의 skytools 패키지의 일부) wiki.postgresql.org/wiki/Londiste_Tutorial을 고려하십시오.

설치가 쉽고 새로운 DB를 쉽게 추가 할 수 있으며 복제는 "캐치"됩니다.

장애 조치는 기본적으로 제공되지 않습니다. 애플리케이션 연결 문자열을 변경하거나 다른 소프트웨어 계층 뒤의 DB 연결을 난독 처리해야합니다.

일부 스키마 변경은 쉽습니다. 다른 사람들은 더 어렵다. 응용 프로그램에 따라 다릅니다. 다음 버전의 skytools (ver 3.0)는 DDL을 처리하고 장애 조치를보다 쉽게하기위한 기능을 포함해야합니다.

우리는 Slony가 너무 고통스럽기 때문에 Londiste로 이사했습니다.



1

당신이 찾고있는 것을 제공하는 무료 / 오픈 소스 방법은 실제로 없습니다. 턴키 방식을 원한다면 다양한 타사 상용 복제 솔루션을 살펴보십시오.

지금, 이다 롤 포스트 그레스와 자신의 복제 쓰기 헤드 로그 (WAL) 출시를 사용하는 정렬 할 수 있습니다 :

http://www.postgresql.org/docs/8.3/interactive/warm-standby.html

기본적으로 보조 노드를 연속 복구 모드로 설정하고 {소 간격}마다 트랜잭션 로그를 가져올 수 있습니다. Postgres 구성에는 WAL이 완료 될 때 Postgres가 수행 될 때 특정 작업을 수행 할 수 있도록하는 "스텁"이 있으며 "스텁"을 사용하여 해당 설정을 전제로합니다.

그러나 이렇게하면 마스터 마스터 및 / 또는 순환 복제를 수행 할 수 없습니다.

어쨌든 그것은 과도하게 작동하지만 "쉬운 설정", "간단한 장애 조치", "원활한"또는 그와 비슷한 것으로 부르지 않을 것입니다.


PITR가 :-) WAL을 사용하기 때문에이 대답은, PITR 제안의 중복
dpavlin



당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.