Bản sao PostgreSQL


45

Chúng tôi liên tục làm dơ cái này quanh văn phòng, và câu hỏi tiếp tục được đưa ra. Làm thế nào để bạn đối phó với bản sao PostgreSQL? Tôi thậm chí không nhất thiết phải nói về các cụm nâng cao, chỉ đơn giản là đơn giản với Master-Slave, Master-MultiSlave và Master-Master. Tôi thấy rằng việc thiết lập nó cho MySQL thường khá đơn giản. Failover là đơn giản nếu không hoàn hảo, đặc biệt là cách dễ dàng để cấu hình. Chúng tôi đã chơi với Slony, nhưng hơi quá tay (thay đổi lược đồ cần can thiệp, cơ sở dữ liệu mới yêu cầu can thiệp, v.v.). PGPool2 khá đẹp, cho đến khi một nút bị hỏng và chúng tôi không thể tìm thấy một cách duyên dáng (ngoài việc đưa mọi thứ xuống và quay lại nút bị rơi) để sao chép lại đồng bộ hóa. Về cơ bản đây là những gì tôi thường tìm kiếm:

  • Dễ dàng thiết lập (Tôi sẽ giải quyết cho việc thiết lập khó khăn, nhưng dễ mở rộng)
  • Chuyển đổi dự phòng đơn giản
  • Đưa một nút bị rơi trở lại chỉ cần thời gian (ví dụ như mysql. Máy chủ ngừng hoạt động, bạn đưa nó lên và chờ sao chép để bắt kịp)
  • Thay đổi lược đồ không phá vỡ nhân rộng
  • Thêm một cơ sở dữ liệu mới vào máy chủ là liền mạch (ví dụ như mysql, bạn có thể sao chép toàn bộ máy chủ DB, do đó, một cơ sở dữ liệu mới được tạo trên bản gốc, nó sẽ tự động truyền tới nô lệ)

MySQL xử lý hầu hết những thứ này khá tốt, nhưng tôi rất thích PostgreSQL. Ngoài ra, chúng tôi có một số tình huống trong đó là lựa chọn duy nhất của chúng tôi và chúng tôi muốn thêm bản sao vào hỗn hợp. Hiện tại bạn đang sử dụng cái gì, và bạn cảm thấy thế nào về giải pháp của mình? Đây không phải là một bài viết của MySQL so với PostgreSQL, tôi hứa, vì đó không phải là điều tôi đang cố gắng bắt đầu. :)


3
Tôi quan tâm đến câu trả lời cho điều này. Đến từ nền tảng MySQL, các tùy chọn sao chép cho PSQL là nông nghiệp để nói rằng ít nhất.
Dave Cheney

Vâng, cho đến nay mọi tùy chọn tôi đã chơi đều có những hạn chế đáng kể. Hy vọng tôi đang thiếu một cái gì đó rõ ràng .. nhưng tôi không nghĩ rằng tôi
f4nt

Tôi nghi ngờ không có gì khác, nhưng tôi mong muốn ai đó chứng minh mình sai
Vinko Vrsalovic

BTW, bạn đã thử pssql-general@postgresql.org chưa?
Vinko Vrsalovic

Câu trả lời:


9

Câu trả lời ngắn - chưa có giải pháp nào như vậy cho PostgreSQL nếu bạn cần nô lệ chỉ đọc trực tuyến.

Có hai dự án phát triển chính hiện đang diễn ra trong lĩnh vực này được bao gồm trong PostgreSQL 9.0 (Mùa xuân / Mùa hè 2010), cụ thể là:

  • Nhân rộng đồng bộ:

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

  • Chỉ đọc các nô lệ dự phòng nóng:

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

trong đó kết hợp nhằm mục đích đạt được sự dễ dàng sử dụng sao chép kiểu MySQL trừ đi các lỗi / vấn đề mà MySQL có cộng với độ tin cậy mà người dùng biết từ PostgreQuery.

Tất cả những điều này đã được khởi động bởi một bảng kê khai từ Nhóm cốt lõi PostgreQuery năm 2008:

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

Các giải pháp sao chép PostgreSQL cho đến ngày nay với cơ sở người dùng lớn nhất là Slony-I (tốn kém hơn cho việc viết, làm thay đổi lược đồ một cách khó khăn), vận chuyển WAL / walmgr (Không thể sử dụng nô lệ trực tuyến) và pgQ / londiste từ Skype / Skytools ( nhiều công cụ / khối xây dựng hơn một giải pháp đã hoàn thành).

Tôi đã viết một vài điều trên Log Shipping, walmgr và Slony-I, xem

http://bloss.amd.co.at/mt/mt-search.cgi?blog_id=1&tag=pgrep&limit=20 để biết thêm thông tin.


6
Bản sao đồng bộ + Chế độ chờ nóng hiện có sẵn - xem wiki.postgresql.org/wiki/ cho một bản tóm tắt tốt về các kỹ thuật có sẵn
David Fraser

5

Và để ném một giải pháp khác vào vòng: rubyrep.

Để so sánh với yêu cầu của bạn:

  • Dễ dàng thiết lập
    Có, đó thực sự là trọng tâm chính của rubyrep.
  • Chuyển đổi dự phòng đơn giản
    Có. Trong thực tế rubyrep thực hiện sao chép chính chủ - để thất bại, không có hành động nào là cần thiết cả. Chỉ cần bắt đầu sử dụng cơ sở dữ liệu khác.
  • Thay đổi lược đồ không phá vỡ nhân rộng
    Có.
    Đối với các thay đổi khóa không chính, sao chép thậm chí không phải dừng (nhưng đảm bảo lược đồ thay đổi cùng một lúc)
    Để thêm / xóa bảng, chỉ cần khởi động lại trình nền sao chép. Chỉ thay đổi cột khóa chính của bảng cần một chút nỗ lực.
  • Thêm một cơ sở dữ liệu mới vào máy chủ là liền mạch (ví dụ như mysql, bạn có thể sao chép toàn bộ máy chủ DB, do đó, một cơ sở dữ liệu mới được tạo trên máy chủ, nó tự động truyền tới nô lệ)
    Điều này chỉ được hỗ trợ theo cách hạn chế: mỗi rubyrep thiết lập sao chép chỉ một cơ sở dữ liệu tại một thời điểm. (Nhưng rất dễ dàng để thiết lập sao chép cho nhiều hơn một cơ sở dữ liệu.)

4

Bạn đã không đề cập đến việc có một nô lệ đọc nóng như một yêu cầu, vì vậy tôi sẽ đề xuất sử dụng Heartbeat với bộ nhớ chia sẻ hoặc DRBD. Nó chỉ làm điều đúng đắn và quản trị là một làn gió. Nó tương đương với Linux của cụm Microsoft SQL Server cũ. Một nút đang hoạt động và nút còn lại bị động trong khi dữ liệu được chia sẻ giữa hai nút. Bạn không phải lo lắng về sao chép dựa trên SQL vì tất cả đều được xử lý thấp hơn ở cấp độ khối.

Nghiêm túc mà nói, đó là giải pháp tốt nhất nếu bạn không cần đọc nô lệ. Các công cụ lưu trữ WAL là tốt nhất và bạn phải thiết lập lại mọi thứ nếu bạn làm gián đoạn quá trình vận chuyển để khởi động lại máy chủ. slony và londiste không cắt mù tạt. Nếu bạn muốn ở trên cây nguồn chính và không đi thương mại, Heartbeat là lựa chọn tốt nhất của bạn.


2

Từ yêu cầu của bạn, có vẻ như PITR là cách dễ nhất để giải quyết vấn đề của bạn:

Sao lưu trực tuyến và phục hồi tại thời điểm (PITR)

Bạn đã không nói rằng bạn cần truy vấn máy chủ nô lệ, vì vậy PITR có thể đúng.

Đây là một phần tiêu chuẩn của PostgreSQL từ phiên bản 8.0, vì vậy bạn có thể đã có mọi thứ cần thiết để khởi động và chạy nó.

Nếu bạn tìm thấy hướng dẫn quá chi tiết, hãy xem SkyTools WalMgr mà sẽ làm cho quá trình tạo / chuyển đổi dự phòng dữ liệu nóng chờ lệnh nhiệm vụ duy nhất.

Đối với các kịch bản sao chép phức tạp hơn, tôi đã có kinh nghiệm tốt về Slony-1, nhưng PostgreSQL có nhiều tùy chọn sao chép / HA tốt.


và những lựa chọn đó là ...?
Dave Cheney

... được liệt kê trong bài đăng blog blog.endpoint.com/2009/05/competitor-to-bucardo-version-1.html được tham chiếu trong một trong những câu trả lời ...
dpavlin

2

Nếu bạn muốn sao chép chủ / nô lệ không đồng bộ, hãy xem xét Londiste (một phần của gói skytools từ Skype) wiki.postgresql.org/wiki/Londiste_Tutorial

Thật dễ dàng để cài đặt, thêm một DB mới thật dễ dàng, sao chép chỉ "bắt kịp".

Failover không được tích hợp sẵn mặc dù. Bạn sẽ cần thay đổi chuỗi kết nối ứng dụng của mình hoặc làm xáo trộn kết nối DB đằng sau một lớp phần mềm khác.

Một số thay đổi lược đồ là dễ dàng. Những người khác thì khó khăn hơn. Nó phụ thuộc vào ứng dụng của bạn. Phiên bản tiếp theo của skytools (ver 3.0) được cho là xử lý DDL và bao gồm các phương tiện để giúp chuyển đổi dự phòng dễ dàng hơn.

Chúng tôi chuyển đến Londiste sau khi thấy Slony quá đau đớn để sử dụng.



1

Thực sự không có bất kỳ cách miễn phí / nguồn mở nào để cung cấp những gì bạn đang tìm kiếm. Nếu bạn muốn một cái gì đó là chìa khóa trao tay, hãy xem các giải pháp nhân rộng thương mại của bên thứ ba khác nhau.

Bây giờ, nó khả năng sắp xếp của cuộn sao chép của riêng bạn với Postgres sử dụng log ghi đầu (Wal) vận chuyển:

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

Về cơ bản, đây là nơi bạn có thể đặt một nút thứ cấp vào chế độ phục hồi liên tục và nhập nhật ký giao dịch vào đó mỗi {khoảng nhỏ}. Cấu hình Postgres có "sơ khai" để cho phép bạn thực hiện một số việc nhất định khi Postgres khi WAL hoàn thành và không, và đó là những gì thiết lập được đưa ra - sử dụng các "sơ khai" đó.

Tuy nhiên, điều đó không cho phép bạn thực hiện sao chép chính chủ và / hoặc sao chép.

Trong mọi trường hợp, nó chắc chắn hoạt động cho sự phong phú, nhưng tôi sẽ không gọi nó là "thiết lập dễ dàng", "chuyển đổi dự phòng đơn giản", "liền mạch" hoặc bất cứ điều gì tương tự.


câu trả lời này trùng lặp với đề xuất PITR, vì PITR sử dụng WAL :-)
dpavlin

1

Ngoại trừ việc 'thêm cơ sở dữ liệu mới', bạn có thể dùng thử Trình sao chép Mammoth ( https://projects.commandprompt.com/public/replicator ). Đó là mã nguồn mở, dễ cài đặt và hỗ trợ chuyển đổi dự phòng. Những hạn chế chính là cơ sở dữ liệu đơn lẻ và không có khả năng sao chép các thay đổi DDL, cả hai đều nằm trong danh sách TODO.



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.