Nhân rộng đa chủ Hoa Kỳ cho Postgres?


16
  1. Tôi đã thử Postgres-XC và nó chưa triển khai SQL đầy đủ (như SERIAL)

  2. Theo các nhà phát triển, Postgres-R có vẻ thú vị nhưng nó "chưa sẵn sàng sản xuất".

Vì vậy, tôi đã sử dụng pgpool-II 3.0.1. Vâng, nó hoạt động độc đáo. Nhưng theo như tôi có thể thấy nó chỉ dành cho 2 nút PG.

Có bất cứ điều gì ngoài đó thực sự sản xuất sẵn sàng VÀ có khả năng làm việc với nhiều nút PG không?


Một vài năm trước, chúng tôi đã gặp vấn đề tương tự. Cuối cùng, chúng tôi đã chuyển tất cả các công cụ của chúng tôi sang Oracle. Hy vọng rằng bạn có thể tìm thấy bản sao đa máy có thể sử dụng được trong những ngày này, tôi đã không nhìn thấy ... Chúc may mắn, không hơn không kém.
grufftech

2
PostgreSQL tài liệu riêng 's nói sử dụng một ứng dụng middleware :) .." Synchronous Multimaster Replication .. PostgreSQL không cung cấp loại này nhân rộng, mặc dù PostgreSQL hai giai đoạn cam kết (CHUẨN BỊ GIAO DỊCH và COMMIT chuẩn bị) có thể được sử dụng để thực hiện trong này mã ứng dụng hoặc phần mềm trung gian "
warren

Bạn không giới hạn ở hai nút.
foocorpluser

Câu trả lời:


6

Bạn đã xem xét Bucardo chưa? Đó là multimaster không đồng bộ. Nó không hoàn toàn bị bắt và không phải là một giải pháp chung, nhưng nó có thể đáng để thử.


1
Tôi không đủ cụ thể rõ ràng: Tôi cần sao chép đồng bộ. Bên cạnh đó, ý nghĩa của điều này trong FAQ là gì? "Bucardo có thể sao chép giữa hơn hai chủ nhân không? Không. Hiện tại, Bucardo chỉ hỗ trợ chủ nhân thành chủ (cũng như chủ nhân cho nhiều nô lệ)." Vậy nó có đa chủ hay không?
mrkafk

4
Chỉ khi định nghĩa của bạn về "đa" là "2"!
hmallett

Xin lưu ý rằng bắt đầu với Bucardo 5, giới hạn của chỉ 2 chủ nhân đã được dỡ bỏ
Joril

3

Tôi phải đồng ý với đánh giá của Peter: Hiện tại không có bản sao đa chủ thực sự tốt cho Postgres. (Thực hiện sao chép đa chủ thực sự là một vấn đề rất khó khăn và tôi không say mê với bất kỳ giải pháp khả dụng nào.)

Nắm bắt danh sách các giải pháp tiềm năng của Wikipedia mà bạn có thể muốn điều tra:

PostgreSQL cung cấp nhiều giải pháp để nhân rộng đa chủ, bao gồm các giải pháp dựa trên cam kết hai pha. Có Bucardo, rubyrep, PGPool và PGPool-II, PGCluster và Sequoia cũng như một số giải pháp độc quyền. Một cách tiếp cận đầy hứa hẹn khác, thực hiện sao chép háo hức (đồng bộ) là Postgres-R, tuy nhiên nó vẫn đang được phát triển. Một dự án khác, thực hiện nhân rộng đồng bộ là Postgres-XC. Postgres-XC cũng vẫn đang được phát triển.


Wow, chỉ cần đọc danh sách đó gây sốc và khủng bố cho tôi. :)
Peter Eisentraut

Đối với tôi, đó là sự chán nản và ghê tởm :-)
voretaq7

Tôi nghĩ rằng việc sử dụng một hệ thống tương tự như etcd cho cấu hình và truyền thông là có thể, có lẽ đang chạy bất kỳ câu lệnh cập nhật nào trong phạm vi hai pha ... một phần khó sẽ giữ một nút cho đến khi nó bị bắt kịp và khớp với các nút khác .. . Tôi thực sự thích một giải pháp tự động gần như cho việc này
Tracker1

3

Đây là định hướng Java nặng, nhưng API máy khách cơ sở dữ liệu nguyên gốc có thể được kết nối với các nguồn dữ liệu JDBC. Vonfram Myosotis là một ví dụ cho MySQL có nguồn gốc từ cầu nối JDBC.


  • Vonfram Enterpriese là tốt cho không đồng bộ đa chủ. Tôi nghĩ rằng nó hoạt động cho MySQL, PostgreSQL và Oracle. Nó có thể chạy độc lập hoặc được nhúng trong một ứng dụng Java. Tôi đã thấy nó hoạt động cho MySQL, nhưng họ yêu cầu PostgreSQL. Thành phần tái tạo của họ là nguồn mở, nhưng giải pháp đầy đủ có nhiều phần hơn và đòi hỏi chi phí cấp phép. Continuent ban đầu có Sequoia cho đồng bộ đa chủ nhưng họ đã từ bỏ nó và tạo ra Vonfram thay vì không đồng bộ đa chủ - họ xem xét mở rộng quy mô kinh doanh chiến lược hơn tính nhất quán ACID đồng bộ. Vonfram được viết bằng Java, do đó, đó là lý do tại sao họ cung cấp Myosotis để kết nối các máy khách cơ sở dữ liệu nguyên gốc.

  • Đối xứng là tốt cho không đồng bộ đa chủ. Nó là nguồn mở. Nó cài đặt / gỡ cài đặt kích hoạt để nắm bắt các bản cập nhật, thay vì ghi nhật ký bin. Nó có thể chạy độc lập hoặc được nhúng trong một ứng dụng Java.

  • HA-JDBC là tốt cho đồng bộ đa chủ. Nó thay thế các phần mềm không còn tồn tại cũ như C-JDBC và Sequoia. Nó là nguồn mở. Nó sử dụng cam kết hai pha và hoạt động cho PostgreSQL, MySQL, Oracle, SQL Server, Derby, Sybase và nhiều thứ khác thông qua phương ngữ. Nó chủ yếu được nhúng, do đó, nhúng vào một ứng dụng Java để kết nối nó với PostgreSQL. Khóa phân tán, trình tự, thời gian, rand, vv được xử lý bởi jgroup từ Redhat / JBoss. Một tính năng hay là chế độ giao dịch "nối tiếp" thay vì "song song", nếu ứng dụng của bạn gặp bế tắc và không hỗ trợ khôi phục. Tôi đã sử dụng thành công chế độ "nối tiếp" này để trang bị thêm một ứng dụng cũ không nhận biết cụm DB, vì vậy nó bị thiếu mã thử lại giao dịch. Chế độ nối tiếp lưu trong ngày và tránh viết lại khó chịu.

  • H2 là tốt cho đồng bộ đa chủ. Nó là nguồn mở. Nó hỗ trợ các cơ sở dữ liệu độc lập hoặc các cụm sử dụng cam kết hai pha, tương tự như kiến ​​trúc HA-JDBC, nhưng tất cả trong một thay vì yêu cầu một thành phần bổ sung cho cam kết hai pha. Không chắc chắn nếu nó tự phân phối khóa, hoặc phụ thuộc vào bên thứ ba như jgroup hoặc Hazelcast.

Bất kỳ bản sao dựa trên JDBC nào cho PostgreSQL và các cơ sở dữ liệu khác đều cần một cầu nối riêng với JDBC, trừ khi ứng dụng của bạn đã được viết bằng Java. Đối với MySQL, Vonfram Enterprise cung cấp một thành phần tùy chọn có tên Myosotis. Tôi đã sử dụng thành công điều này để kết nối PHP / Perl / C / mysqlclient với JDBC, trong đó nguồn dữ liệu JDBC là nguồn dữ liệu proxy HA-JDBC trỏ đến cụm MySQL / InnoDB 4 nút.

Vonfram hỗ trợ PostgreSQL trong các thành phần Bộ sao chép và Bộ định tuyến của họ, nhưng không chắc chắn về thành phần Myosotis. Có lẽ. Các thành phần Bộ tái tạo / Bộ định tuyến Vonfram dành cho không đồng bộ đa chủ, nhưng Myosotis có thể kết nối bạn với một back-end JDBC thay thế như HA-JDBC hoặc H2 để đồng bộ.

Nếu có một PostgreSQL có nguồn gốc từ cầu JDBC, tôi muốn nghe về nó. Về lý thuyết, bất kỳ cơ sở dữ liệu nào có trình điều khiển JDBC Type 4 đều có thể được bắc cầu. JDBC loại 4 nói giao thức cơ sở dữ liệu riêng giống như giao diện máy khách gốc cho cơ sở dữ liệu đó, do đó cần có ánh xạ một đến một của các cuộc gọi gốc đến các cuộc gọi JDBC.


2

Câu trả lời là không.


Đã vài năm kể từ khi tôi nghiên cứu, nhưng công ty của tôi đã đi đến kết luận này khi chúng tôi thử.
grufftech

1

Tôi đã sử dụng londiste trong 2 năm qua để sao chép đa chủ trong postgresql.

Bạn đặt các bảng của mình vào hàng đợi bằng pg_queue và bạn có thể đăng ký như nhiều cơ sở dữ liệu khác mà bạn muốn cho mỗi hàng đợi, việc sao chép là nguyên tử theo hàng đợi và nó rất linh hoạt.

Bạn có thể đọc về londiste tại đây ( http://pgfoundry.org/projects/skytools/ ), đây là những gì mà các chàng trai Skype sử dụng cho cụm của họ, họ cũng đã tạo ra nó, vì vậy nó sẽ tăng gấp đôi :)


Hmm thật thú vị, nhưng theo những gì tôi đã thấy ở đây: wiki.postgresql.org/wiki/iêu , Londiste là Master-Slave và không đồng bộ? Vậy làm thế nào nó có thể là đa chủ? Ngoài ra, tôi thực sự cần sao chép đồng bộ: giao dịch sẽ thất bại nếu bất kỳ nút cụm (hoạt động) nào bị lỗi.
mrkafk

Bản sao này là sau giao dịch nếu không nó sẽ khá chậm
lynxman

Tôi không có nghĩa là đau ở mông (nitpicking), nhưng ... 1. Tôi đã sử dụng pgpool-II và các giao dịch đã diễn ra khá nhanh (mặc dù tôi chưa thực hiện được điểm chuẩn) và 2. mặc dù giao dịch cá nhân có thể chậm hơn, tôi không thấy một lý do chính đáng nào cho thông lượng chung của giao dịch thấp. Dù sao, có lẽ điểm quan trọng hơn là Londiste multi-master như thế nào? Tôi có thể ghi vào máy chủ pg 1 và sao chép thành 2 và ghi vào máy chủ pg 2 và sao chép vào máy chủ 1 không?
mrkafk


-2

Tôi tìm thấy hệ thống sao chép "đa chủ" có thể sử dụng:

  1. lấy RabbitMQ http://www.rabbitmq.com/ - đó là một phần mềm trung gian tin nhắn.

  2. cấu hình một cụm MQ Rabbit trong Rabbit.

  3. tạo hàng đợi cho mỗi nút trong một cụm và liên kết chúng với trao đổi loại 'fanout'.

Bằng cách này, một thông điệp được gửi đến bất kỳ nút nào và bất kỳ hàng đợi nào sẽ được sao chép sang tất cả các nút khác. Tôi có một mã làm việc cho việc này!


2
@mrafk - bạn có đăng / liên kết "mã làm việc" mà bạn có không?
warren

2
Điều này có liên quan gì đến việc nhân rộng với postgres? Điều này sẽ phân phối các tin nhắn, nhưng bạn sẽ nhận được các thông báo / cập nhật dữ liệu từ DB ở đâu và làm thế nào để cập nhật các nút nhận tin nhắn trên hàng đợi tin nhắn?
tu sĩ

3
Đây có thể là một giải pháp cho vấn đề cơ bản mà bạn đang gặp phải, nhưng nó không phải là một câu trả lời cho câu hỏi này.
Tom Anderson
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.