Postgres에 사용 가능한 다중 마스터 복제?


16
  1. Postgres-XC를 시도했지만 아직 전체 SQL을 구현하지 않습니다 (SERIAL과 같은)

  2. Postgres-R은 흥미로워 보이지만 개발자에 따르면 "제작 준비가되지 않았습니다".

그래서 나는 pgpool-II 3.0.1을 사용했습니다. 예, 잘 작동합니다. 그러나 내가 볼 수있는 한 2 개의 PG 노드에만 해당됩니다.

실제로 프로덕션 준비가되어 있고 여러 PG 노드와 작업 할 수있는 것이 있습니까?


몇 년 전에 우리는 같은 문제에 부딪쳤다. 결국 우리는 모든 것을 오라클로 옮겼습니다. 잘만되면 요즘 사용 가능한 멀티 마스터 복제를 찾을 수있을 것입니다.
grufftech

2
PostgreSQL을 '자신의 문서는 미들웨어 응용 프로그램 : .. "를 사용 말한다 동기 멀티 마스터 복제 PostgreSQL의 2 단계이에서를 구현하는 데 사용할 수 있습니다 커밋 (TRANSACTION을 준비하고 PREPARED COMMIT)하지만 .. PostgreSQL의이 복제의 유형을 제공하지 않습니다 응용 프로그램 코드 또는 미들웨어 "
warren

두 개의 노드로 제한되지 않습니다.
foocorpluser

답변:


6

Bucardo 을 고려 하셨습니까 ? 비동기식 멀티 마스터입니다. 완전히 파악되지 않았으며 일반적인 해결책은 아니지만 시도해 볼 가치가 있습니다.


1
충분히 명확하지 않았습니다. 동기식 복제가 필요합니다. 또한 FAQ에서 이것의 의미는 무엇입니까? "Bucardo는 둘 이상의 마스터간에 복제 할 수 있습니까? 아니요. 현재 Bucardo는 마스터 대 마스터 (및 많은 슬레이브에 대한 마스터) 만 지원합니다." 멀티 마스터인가?
mrkafk

4
"multi"의 정의가 "2"인 경우에만!
hmallett

Bucardo 5부터 2 명의 마스터로 제한이 해제되었습니다.
Joril

3

Peter의 평가에 동의해야합니다 . 현재 Postgres에 대한 훌륭한 다중 마스터 복제는 없습니다 . (진실한 다중 마스터 복제를 수행하는 것은 매우 어려운 문제이며 사용 가능한 솔루션에 관심이 없습니다.)

조사하고자하는 위키피디아의 잠재적 솔루션 목록에 대한 설명 :

PostgreSQL은 2 단계 커밋 기반 솔루션을 포함하여 다중 마스터 복제를위한 다양한 솔루션을 제공합니다. Bucardo, rubyrep, PgPool 및 PgPool-II, PgCluster 및 Sequoia와 독점 솔루션이 있습니다. 열성적인 (동기식) 복제를 구현하는 또 다른 유망한 방법은 Postgres-R이지만 여전히 개발 중입니다. 동기 복제를 구현하는 또 다른 프로젝트는 Postgres-XC입니다. Postgres-XC도 여전히 개발 중입니다.


와우, 그 목록을 읽는 것만으로도 충격과 공포가 발생합니다. :)
Peter Eisentraut

나를 위해 그것은 우울증과 혐오입니다 :-)
voretaq7

구성 및 통신에 etcd와 비슷한 시스템을 사용하는 것이 가능할 것이라고 생각합니다. 아마 2 단계 커밋 내에서 모든 update 문을 실행할 수 있습니다 ... 어려운 부분은 잡히고 다른 노드와 일치 할 때까지 노드를 유지하는 것입니다. 나는 이것에 대한 거의 자동적 인 솔루션을 정말로 좋아합니다
Tracker1

3

이것은 Java 중심이지만, 원시 데이터베이스 클라이언트 API는 JDBC 데이터 소스에 브릿지 될 수 있습니다. Tungsten Myosotis는 JDBC 브리징 고유의 MySQL에 대한 예입니다.


  • 텅스텐 엔터프라이즈는 다중 마스터 비동기에 적합합니다. MySQL, PostgreSQL 및 Oracle에서 작동한다고 생각합니다. 독립형으로 실행되거나 Java 응용 프로그램에 임베드 될 수 있습니다. MySQL에서 작동하는 것을 보았지만 PostgreSQL을 주장합니다. Replicator 구성 요소는 오픈 소스이지만 전체 솔루션에는 더 많은 부품이 있으며 라이센스 비용이 필요합니다. Continuent는 원래 멀티 마스터 동기화를 위해 Sequoia를 가지고 있었지만이를 포기하고 멀티 마스터 비동기 대신 Tungsten을 만들었습니다. 동기 ACID 일관성보다 더 전략적인 비즈니스 확장을 고려합니다. 텅스텐은 Java로 작성되었으므로 Myosotis를 제공하여 기본 데이터베이스 클라이언트를 연결합니다.

  • SymmetricDS는 다중 마스터 비동기에 적합합니다. 오픈 소스입니다. bin 로깅 대신 트리거를 설치 / 제거하여 업데이트를 캡처합니다. 독립형으로 실행되거나 Java 응용 프로그램에 임베드 될 수 있습니다.

  • HA-JDBC는 다중 마스터 동기에 적합합니다. C-JDBC 및 Sequoia와 같은 오래된 기능이없는 소프트웨어를 대체합니다. 오픈 소스입니다. 2 단계 커밋을 사용하며 방언을 통해 PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase 및 기타 여러 가지에서 작동합니다. 주로 임베디드 용이므로 Java 응용 프로그램에 내장하여 PostgreSQL에 연결합니다. 분산 잠금, 시퀀스, 시간, 랜드 등은 Redhat / JBoss의 jGroup에 의해 처리됩니다. 앱에서 교착 상태가 발생하여 롤백을 지원하지 않는 경우 "병렬"대신 트랜잭션 모드 "직렬"이 좋은 기능 중 하나입니다. 이 "직렬"모드를 성공적으로 사용하여 DB- 클러스터를 인식하지 못하는 레거시 앱을 개량하여 트랜잭션 재시도 코드가 누락되었습니다. 직렬 모드는 하루를 절약하고 불쾌한 재 작성을 피했습니다.

  • H2는 다중 마스터 동기에 적합합니다. 오픈 소스입니다. HA-JDBC 아키텍처와 유사한 2 단계 커밋을 사용하여 독립형 데이터베이스 또는 클러스터를 지원하지만 2 단계 커밋에 추가 구성 요소가 필요하지 않습니다. 그것이 분산 잠금을 자체적으로 수행하는지 또는 jGroups 또는 Hazelcast와 같은 타사에 의존하는지 확실하지 않습니다.

애플리케이션이 이미 Java로 작성되지 않은 경우 PostgreSQL 및 기타 데이터베이스에 대한 JDBC 기반 복제에는 기본 JDBC 브리지가 필요합니다. MySQL의 경우 Tungsten Enterprise는 Myosotis라는 선택적 구성 요소를 제공합니다. 필자는 PHP / Perl / C / mysqlclient를 JDBC로 브리지하는 데 이것을 성공적으로 사용했다. 여기서 JDBC 데이터 소스는 4 노드 MySQL / InnoDB 클러스터를 가리키는 HA-JDBC 프록시 데이터 소스가되었다.

텅스텐은 Replicator 및 Router 구성 요소에서 PostgreSQL을 지원하지만 Myosotis 구성 요소는 확실하지 않습니다. 아마도. Tungsten Replicator / Router 구성 요소는 다중 마스터 비동기 용이지만 Myosotis는 HA-JDBC 또는 H2와 같은 대체 JDBC 백엔드로 동기화 할 수 있습니다.

JDBC 브리지에 기본 PostgreSQL이 있으면 그것에 대해 듣고 싶습니다. 이론적으로 JDBC 유형 4 드라이버가있는 모든 데이터베이스를 브리지 할 수 있습니다. 유형 4 JDBC는 해당 데이터베이스의 기본 클라이언트 인터페이스처럼 기본 데이터베이스 프로토콜을 사용하므로 기본 호출을 JDBC 호출에 일대일로 맵핑해야합니다.



1

postgresql에서 다중 마스터 복제를 위해 지난 2 년간 londiste를 사용해 왔습니다.

pg_queue를 사용하여 테이블을 대기열에 넣고 각 대기열에 원하는 다른 데이터베이스를 많이 구독 할 수 있으며 복제는 대기열별로 원자 적이며 매우 탄력적입니다.

여기 londiste에 대해 읽을 수 있습니다 ( http://pgfoundry.org/projects/skytools/ ), 이것이 Skype 직원 들이 클러스터에 사용하는 것입니다.


흠. 흥미롭지 만 여기에서 본 wiki.postgresql.org/wiki/…에 따르면 Londiste 는 Master-Slave와 Asynchronous입니까? 그렇다면 어떻게 다중 마스터가 될 수 있습니까? 또한 실제로 동기식 복제가 필요합니다. (활성) 클러스터 노드 중 하나라도 실패하면 트랜잭션이 실패해야합니다.
mrkafk

이 복제는 매우 느린가 될 것이다, 그렇지 않으면 사후 트랜잭션입니다
lynxman

나는 엉덩이에 통증처럼 들리는 것을 의미하지는 않지만 (nitpicking) ... 1. pgpool-II를 사용했고 거래는 매우 빠르게 진행되었지만 (벤치 마크를 수행하지는 않았지만) 2. 개별 거래가 느려질 수 있으므로 전반적인 거래 처리량이 낮은 좋은 이유는 없습니다. 어쨌든, 아마도 가장 중요한 점은 Londiste 멀티 마스터는 어떻습니까? pg 서버 1에 쓰고 2에 복제하고 pg 서버 2에 쓰고 서버 1에 복제 할 수 있습니까?
mrkafk


-2

사용 가능한 "멀티 마스터"복제 시스템을 찾았습니다.

  1. RabbitMQ http://www.rabbitmq.com/- 메시지 미들웨어입니다.

  2. Rabbit에서 Rabbit MQ 클러스터를 구성하십시오.

  3. 클러스터의 각 노드에 대한 큐를 작성하고 'fanout'유형 교환에 바인드하십시오.

이렇게하면 임의의 노드로 전송 된 메시지와 모든 큐가 다른 모든 노드로 복제됩니다. 이 작업 코드가 있습니다!


2
@mrafk-가지고있는 "작업 코드"를 게시 / 링크 하시겠습니까?
warren

2
이것은 postgres를 사용한 복제와 어떤 관련이 있습니까? 그러면 메시지가 배포되지만 DB에서 데이터 메시지 / 업데이트를받는 위치는 어디이며 메시지 큐에서 메시지를받는 노드를 어떻게 업데이트합니까?
monksy

3
이것은 직면 한 근본적인 문제에 대한 해결책 일 수 있지만 이 질문에 대한 대답 은 아닙니다 .
Tom Anderson
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.