Postgres-XC를 시도했지만 아직 전체 SQL을 구현하지 않습니다 (SERIAL과 같은)
Postgres-R은 흥미로워 보이지만 개발자에 따르면 "제작 준비가되지 않았습니다".
그래서 나는 pgpool-II 3.0.1을 사용했습니다. 예, 잘 작동합니다. 그러나 내가 볼 수있는 한 2 개의 PG 노드에만 해당됩니다.
실제로 프로덕션 준비가되어 있고 여러 PG 노드와 작업 할 수있는 것이 있습니까?
Postgres-XC를 시도했지만 아직 전체 SQL을 구현하지 않습니다 (SERIAL과 같은)
Postgres-R은 흥미로워 보이지만 개발자에 따르면 "제작 준비가되지 않았습니다".
그래서 나는 pgpool-II 3.0.1을 사용했습니다. 예, 잘 작동합니다. 그러나 내가 볼 수있는 한 2 개의 PG 노드에만 해당됩니다.
실제로 프로덕션 준비가되어 있고 여러 PG 노드와 작업 할 수있는 것이 있습니까?
답변:
Peter의 평가에 동의해야합니다 . 현재 Postgres에 대한 훌륭한 다중 마스터 복제는 없습니다 . (진실한 다중 마스터 복제를 수행하는 것은 매우 어려운 문제이며 사용 가능한 솔루션에 관심이 없습니다.)
조사하고자하는 위키피디아의 잠재적 솔루션 목록에 대한 설명 :
PostgreSQL은 2 단계 커밋 기반 솔루션을 포함하여 다중 마스터 복제를위한 다양한 솔루션을 제공합니다. Bucardo, rubyrep, PgPool 및 PgPool-II, PgCluster 및 Sequoia와 독점 솔루션이 있습니다. 열성적인 (동기식) 복제를 구현하는 또 다른 유망한 방법은 Postgres-R이지만 여전히 개발 중입니다. 동기 복제를 구현하는 또 다른 프로젝트는 Postgres-XC입니다. Postgres-XC도 여전히 개발 중입니다.
이것은 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 호출에 일대일로 맵핑해야합니다.
postgresql에서 다중 마스터 복제를 위해 지난 2 년간 londiste를 사용해 왔습니다.
pg_queue를 사용하여 테이블을 대기열에 넣고 각 대기열에 원하는 다른 데이터베이스를 많이 구독 할 수 있으며 복제는 대기열별로 원자 적이며 매우 탄력적입니다.
여기 londiste에 대해 읽을 수 있습니다 ( http://pgfoundry.org/projects/skytools/ ), 이것이 Skype 직원 들이 클러스터에 사용하는 것입니다.
여전히 관심이 있으시면 다음 중 하나를 시도하십시오 : http://www.symmetricds.org/ (Java 만 해당)
사용 가능한 "멀티 마스터"복제 시스템을 찾았습니다.
RabbitMQ http://www.rabbitmq.com/- 메시지 미들웨어입니다.
Rabbit에서 Rabbit MQ 클러스터를 구성하십시오.
클러스터의 각 노드에 대한 큐를 작성하고 'fanout'유형 교환에 바인드하십시오.
이렇게하면 임의의 노드로 전송 된 메시지와 모든 큐가 다른 모든 노드로 복제됩니다. 이 작업 코드가 있습니다!