it-swarm-ko.tech

PostgreSQL 복제

우리는 사무실 주변에서이 문제를 지속적으로 조사하고 있으며 질문은 계속해서 제기됩니다. PostgreSQL 복제를 어떻게 처리합니까? 마스터-슬레이브, 마스터-멀티 슬레이브 및 마스터-마스터를 사용하여 단순하게 유지하면서 고급 클러스터에 대해 반드시 이야기하는 것이 아닙니다. MySQL에 대한 설정은 일반적으로 매우 간단합니다. 페일 오버는 완벽하지는 않지만 간단합니다. 특히 구성이 얼마나 쉬운 지에 대해서는 더욱 그렇습니다. 우리는 Slony를 가지고 놀았지만 너무 손을 댔습니다 (스키마 변경에는 개입이 필요하고 새 데이터베이스에는 개입이 필요합니다 등). PGPool2는 꽤 좋았습니다. 노드가 다운되고 복제를 다시 동기화 할 수있는 우아한 방법 (모든 것을 중단하고 타락한 노드를 다시 시드하는 것 제외)을 찾을 수 없었습니다. 기본적으로 내가 일반적으로 찾는 것은 다음과 같습니다.

  • 쉬운 설정 (어려운 설정에 안주하지만 확장하기 쉽습니다)
  • 단순한 장애 조치
  • 떨어진 노드를 다시 가져 오는 데는 시간이 필요합니다 (예 : mysql과 같이 서버가 다운되고 서버가 작동하고 복제가 따라 잡을 때까지 기다립니다).
  • 스키마 변경은 복제를 중단하지 않습니다.
  • 서버에 새 데이터베이스를 추가하는 것은 원활합니다 (예 : mysql과 같이 전체 DB 서버를 복제 할 수 있으므로 새 데이터베이스가 마스터에 생성되고 자동으로 슬레이브로 전파됨).

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

45
f4nt

짧은 대답-온라인 읽기 전용 슬레이브가 필요한 경우 아직 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 핵심 팀의 매니페스트에 의해 시작되었습니다.

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

가장 많은 사용자 기반을 가진 오늘날까지 PostgreSQL 복제 솔루션은 Slony-I (쓰기 비용이 더 비싸고 스키마 변경이 까다 로움), WAL shipping/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=2 자세한 내용은.

9
Michael Renner

그리고 링에 또 다른 해결책을 던지려면 : rubyrep.

요구 사항과 비교하려면 :

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

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

진지하게, 읽기 슬레이브가 필요하지 않은 경우 가장 좋은 솔루션입니다. WAL 아카이브 항목은 기껏해야 하찮은 일이었으며 서버 재부팅을 위해 배송 프로세스를 방해하는 경우 모든 것을 다시 설정해야합니다. slony와 londiste는 겨자를 자르지 않습니다. 메인 소스 트리에 머물고 상업적으로 사용하지 않으려면 Heartbeat가 최선의 방법입니다.

4
diq

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

설치가 쉽고 새 DB를 추가하는 것도 쉬우 며 복제가 "추적"됩니다.

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

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

Slony가 사용하기에 너무 고통스러워서 Londiste로 옮겼습니다.

2
KevinRae

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

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

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

버전 8.0부터 PostgreSQL의 표준 부분이므로 설치 및 실행에 필요한 모든 것이 이미있을 것입니다.

지침이 너무 장황하다고 생각되면 SkyTools WalMgr 을 살펴보십시오. 이것은 핫 스탠바이 데이터 단일 명령 작업에 대한 생성/장애 조치 프로세스를 만듭니다.

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

2
dpavlin

'새 데이터베이스 추가'를 제외하고 Mammoth Replicator ( https://projects.commandprompt.com/public/replicator )를 사용해 볼 수 있습니다. 오픈 소스이며 설정이 쉽고 장애 조치를 지원합니다. 주요 제한 사항은 단일 데이터베이스와 DDL 변경 사항을 복제 할 수 없다는 것입니다. 둘 다 TODO 목록에 있습니다.

1
Alexey Klyukin

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

이제 WAL (write-head log) 전달을 사용하여 Postgres로 자체 복제를 롤링하는 것이 is 가능합니다.

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

기본적으로 보조 노드를 연속 복구 모드로 전환하고 {작은 간격}마다 트랜잭션 로그를 가져올 수 있습니다. Postgres 구성에는 WAL이 완료 될 때 Postgres가 완료 될 때 특정 작업을 수행 할 수있는 "스텁"이 있습니다. 따라서 해당 설정이 해당 "스텁"을 활용하는 것이 조건입니다.

그러나 마스터-마스터 및/또는 순환 복제를 수행 할 수는 없습니다.

어떤 경우에도 확실히 중복성에 대해서는 작동하지만 "쉬운 설정", "단순한 장애 조치", "원활한"또는 이와 유사한 것으로 부르지 않습니다.

1
Alex Balashov

여기에서 토론을 참조하십시오. 도움이 될 수 있습니다.

http://blog.endpoint.com/2009/05/competitors-to-bucardo-version-1.html

페이지 하단에있는 Bucardo Version One의 경쟁자 :

http://www.planetpostgresql.org/

1
mm2010

저는 현재 텅스텐 리플리케이터를 찾고 있습니다. 아직 확실한 결론과는 거리가 멀지 만 살펴볼 가치가있을 것입니다.

www.continuent.com

0

Postgres-R 유망 해 보였지만 프로젝트가 아직 살아 있는지 모르겠습니다.

0
brunoqc