PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

PostgreSQL Streaming Replication so với Logical Replication

Tôi tự cho mình là một người thích khám phá. Trong một số điều đó là. Thông thường, tôi sẽ luôn đặt cùng một món ăn từ một nhà hàng quen thuộc vì sợ thất vọng nhiều hơn sự e ngại khi thử món mới.

Và tất nhiên, một người đói có xu hướng chỉ ăn vừa phải?

Tuy nhiên, khi nói đến công nghệ, đặc biệt là SQL (PostgreSQL), tôi có xu hướng lao hết tốc lực (định nghĩa của tôi về việc khám phá) vào những lĩnh vực không quen thuộc, với hy vọng học hỏi được. Còn cách nào tốt hơn để học hỏi hơn là trải nghiệm?

Vậy sự lan man này có liên quan gì đến việc sao chép Logical và Streaming trong PostgreSQL?

Tôi là một người mới hoàn toàn trong những lĩnh vực này với kiến ​​thức không. Vâng, tôi có nhiều hiểu biết về lĩnh vực này của Postgres giống như tôi hiểu về vật lý thiên văn.

Tôi có đề cập rằng tôi không có kiến ​​thức gì không?

Do đó, trong bài đăng trên blog này, tôi sẽ cố gắng tìm hiểu sự khác biệt trong các loại sao chép này. Nếu không có kinh nghiệm thực tế, tôi không thể hứa với bạn rằng ' Hãy kết thúc tất cả 'bản thảo để nhân rộng.

Có khả năng những người khác ít thành thạo hơn trong lĩnh vực cụ thể này (chẳng hạn như tôi) sẽ được hưởng lợi từ bài đăng trên blog này.

Những người dùng và nhà phát triển có kinh nghiệm đồng hành cùng chuyến đi, tôi hy vọng sẽ gặp bạn trong các nhận xét bên dưới.

Một vài định nghĩa cơ bản

Theo nghĩa rộng của thuật ngữ này, Replication có nghĩa là gì?

Nhân bản như được định nghĩa trên Wiktionary có điều này nói lên:

"Quá trình mà một đồ vật, con người, địa điểm hoặc ý tưởng có thể được sao chép bắt chước hoặc sao chép lại."

Tuy nhiên, mục được liệt kê thứ 5 có nhiều áp dụng hơn cho bài đăng trên blog này và tôi cảm thấy chúng ta cũng nên xem xét nó:

"(điện toán) Quá trình sao chép dữ liệu điện tử thường xuyên từ một cơ sở dữ liệu trong một máy tính hoặc máy chủ sang cơ sở dữ liệu ở một máy chủ khác để tất cả người dùng chia sẻ cùng một mức thông tin. Được sử dụng để cải thiện khả năng chịu lỗi của hệ thống."

Bây giờ có một cái gì đó chúng ta có thể đi vào. Việc đề cập đến việc sao chép dữ liệu từ máy chủ hoặc cơ sở dữ liệu này sang máy chủ khác? Bây giờ chúng ta đang ở trong lãnh thổ quen thuộc ...

Vì vậy, bổ sung những gì chúng ta biết từ định nghĩa đó, các định nghĩa của Sao chép trực tuyến và Sao chép lôgic là gì?

Hãy xem PostgreSQL Wiki cung cấp những gì:

Nhân rộng luồng:"cung cấp khả năng liên tục gửi và áp dụng các bản ghi WAL XLOG cho một số máy chủ dự phòng để giữ cho chúng luôn cập nhật.

Và Tài liệu PostgreSQL có định nghĩa này cho Bản sao lôgic:

"Sao chép lôgic là một phương pháp sao chép các đối tượng dữ liệu và các thay đổi của chúng, dựa trên nhận dạng bản sao của chúng (thường là khóa chính). Chúng tôi sử dụng thuật ngữ lôgic trái ngược với sao chép vật lý, sử dụng địa chỉ khối chính xác và sao chép từng byte. "

Chương 19.6 Bản sao từ tài liệu chính thức cũng có rất nhiều tính năng tốt, vì vậy hãy chắc chắn và truy cập vào nguồn đó.

Dưới đây, tôi sẽ cố gắng chuyển tiếp những khác biệt trong thuật ngữ của giáo dân. (Hãy nhớ rằng, nếu tôi vấp ngã, tôi chỉ là một người mới.) Đây là một cái nhìn tổng quan 'ở mức cao'.

Sao chép lôgic

Cơ sở dữ liệu "nguồn" tạo CÔNG KHAI bằng lệnh TẠO CÔNG KHAI. (Tôi nghĩ về điều này một cách đơn giản với tư cách là 'người gửi'.)

Tài liệu gọi nó là nhà xuất bản.

Cơ sở dữ liệu của nhà xuất bản này có dữ liệu mà chúng tôi muốn sao chép. Tuy nhiên, chúng ta phải có một cái gì đó để nhân rộng và đây là nơi mà (các) đối tác của nhà xuất bản đến. 'Người đăng ký'. Lưu ý rằng tôi đã ném ở dạng số nhiều thay thế vì từ những gì tôi đã tìm thấy thông qua các tìm kiếm trực tuyến, đó là một thiết lập thực tế để có nhiều người đăng ký.

Một 'người đăng ký' (cũng có thể được coi là cơ sở dữ liệu bản sao) tạo một ĐĂNG KÝ cho cơ sở dữ liệu "nguồn" (nhà xuất bản) xác định thông tin kết nối và bất kỳ ấn phẩm nào mà nó đăng ký.

Người đăng ký cũng có thể là nhà xuất bản, tạo CÔNG KHAI của riêng mình mà những người đăng ký khác có thể đăng ký.

Điều gì xảy ra bây giờ?

Mọi thay đổi dữ liệu xảy ra trên nhà xuất bản đều được gửi đến người đăng ký. Đó là tất cả mọi thứ, nhưng có thể được định cấu hình hoặc giới hạn ở một số hoạt động nhất định (tức là CHÈN, CẬP NHẬT hoặc XÓA).

Ví dụ cấp cao:

Giả sử chúng tôi cập nhật một hàng hoặc nhiều hàng trên một bảng cụ thể trong nhà xuất bản, những cập nhật và thay đổi đó được sao chép, trên phiên bản của người đăng ký hoặc nhiều người đăng ký nếu loại cấu hình đó được triển khai.

Dưới đây là một số điều cần nhớ mà tôi cảm thấy xứng đáng được đề cập:

  • Cấu hình wal_level của cơ sở dữ liệu nhà xuất bản phải được đặt thành logic.
  • Sao chép lôgic không có bất kỳ lệnh DDL (Ngôn ngữ Định nghĩa Dữ liệu) nào.
  • Từ trang Xung đột trong tài liệu:"Sao chép lôgic hoạt động tương tự như các hoạt động DML thông thường, ở đó dữ liệu sẽ được cập nhật ngay cả khi nó đã được thay đổi cục bộ trên nút người đăng ký. Nếu dữ liệu đến vi phạm bất kỳ ràng buộc nào, quá trình sao chép sẽ dừng lại. Điều này được gọi là xung đột. Khi sao chép các thao tác CẬP NHẬT hoặc XÓA, dữ liệu bị thiếu sẽ không tạo ra xung đột và các thao tác đó sẽ đơn giản bị bỏ qua. "
  • Các bảng của nhà xuất bản, phải có một cách để tự nhận dạng (được gọi là "bản sao") để sao chép đúng các hoạt động DML (CẬP NHẬT và XÓA) trong bất kỳ bản sao nào cho các hàng bị ảnh hưởng đó. Nếu bảng có khóa chính, đây là mặc định (có vẻ như là lựa chọn hợp lý đối với tôi), nhưng trong trường hợp không có khóa chính, các tùy chọn cấu hình khác sẽ có sẵn. Toàn bộ hàng có thể được sử dụng nếu không có khóa ứng viên nào khác tồn tại (được gọi là "đầy đủ"), mặc dù tài liệu đề cập đây thường không phải là một giải pháp hiệu quả. (Xem phần NHẬN DIỆN REPLICA trong tài liệu để biết mô tả cấp thấp hơn về cách đặt nó)

Hạn chế

Tài liệu trong phần 31.4. Các hạn chế có một số nhắc nhở chính về các hạn chế mà tôi sẽ đề cập đến. Hãy chắc chắn và xem lại trang được liên kết ở trên để biết chi tiết chính xác.

  • Lược đồ cơ sở dữ liệu và bất kỳ lệnh DDL nào không được hỗ trợ trong bản sao. Người ta cho rằng ban đầu có thể sử dụng pg_dump, tuy nhiên, bạn sẽ cần phải tự cập nhật thêm bất kỳ thay đổi và tiến bộ nào trong lược đồ cho tất cả các bản sao.
  • Dữ liệu trong các cột trình tự sẽ được sao chép. Tuy nhiên, bản thân chuỗi sẽ chỉ phản ánh giá trị bắt đầu. Đối với những lần đọc, điều đó không sao cả. Nhưng nếu đây là mục đích của bạn để chuyển đổi dự phòng, bạn sẽ cần phải tự CẬP NHẬT giá trị hiện tại. Tài liệu đề xuất pg_dump tại đây.
  • Cắt ngắn chưa được hỗ trợ.
  • Sao chép đối tượng lớn không được hỗ trợ.
  • Chế độ xem, chế độ xem cụ thể hóa, bảng gốc phân vùng hoặc bảng ngoài không được hỗ trợ trên cả nhà xuất bản hoặc người đăng ký.
Tải xuống Báo cáo chính thức hôm nay Quản lý &Tự động hóa PostgreSQL với ClusterControlTìm hiểu về những điều bạn cần biết để triển khai, giám sát, quản lý và mở rộng PostgreSQLTải xuống Báo cáo chính thức

Các trường hợp sử dụng phổ biến được báo cáo

  • Bạn chỉ quan tâm đến một số dữ liệu nhất định và những thay đổi dữ liệu mà bạn thực sự sao chép thay vì chỉ sao chép toàn bộ cơ sở dữ liệu.
  • Khi bạn cần (các) bản sao cho các hoạt động chỉ đọc, chẳng hạn như kịch bản phân tích.
  • Cho phép người dùng hoặc các tập hợp con khác nhau của người dùng có quyền truy cập bị hạn chế hoặc bị giám sát vào dữ liệu.
  • Phân phối dữ liệu.
  • Khả năng tương thích với các phiên bản PostgreSQL khác.

Sao chép truyền trực tuyến

Từ việc nghiên cứu, đọc và nghiên cứu tính năng Streaming Replication, một điều tôi thu thập được ngay trước mắt, đó là chọn thiết lập sao chép không đồng bộ (mặc định) hoặc đồng bộ.

À, nhiều thuật ngữ không quen thuộc hơn phải không?

Đây là định nghĩa 'cấp cao' của tôi về cả hai:

Với sao chép không đồng bộ, sau khi giao dịch được cam kết trên bản chính, sẽ có một chút chậm trễ khi giao dịch tương tự được cam kết và được ghi trên bản sao. Có khả năng mất dữ liệu với loại cấu hình này.

  • Một, giả sử bản chính gặp sự cố.
  • Hai là (các) bản sao kém xa bản chính, nó đã loại bỏ dữ liệu và thông tin cần thiết để (các) bản sao thậm chí là 'hiện tại'.

Tuy nhiên, trong sao chép đồng bộ, không có giao dịch nào được coi là hoàn thành, cho đến khi nó được xác nhận bởi cả (các) máy chủ chính và bản sao. Cái nào sẽ viết một cam kết cho WAL của cả hai máy chủ.

Theo thuật ngữ tôi hiểu, điều này có nghĩa là các bài viết trên bản chính cũng đã được xác nhận và viết trên bản sao.

Đây là lời giải thích chính thức từ phần 26.2.8. Sao chép đồng bộ trong tài liệu chính thức:

“Khi yêu cầu sao chép đồng bộ, mỗi cam kết của một giao dịch ghi sẽ đợi cho đến khi nhận được xác nhận rằng cam kết đã được ghi vào nhật ký ghi trước trên đĩa của cả máy chủ chính và máy chủ dự phòng. “

Một đoạn văn khác từ tài liệu có một bản tóm tắt hay về những gì phải có (theo ý kiến ​​của tôi), một lợi ích to lớn:"Khả năng duy nhất mà dữ liệu có thể bị mất là nếu cả thiết bị chính và dự phòng bị treo cùng một lúc."

Mặc dù không có gì là không thể, nhưng đó vẫn là sự đảm bảo khá tốt rằng bạn sẽ không bị bỏ quên nếu không có bản sao dữ liệu của mình.

Được rồi, chúng tôi biết mình phải chọn một trong các cấu hình thiết lập này nhưng ý chính tổng thể là gì?

Tóm lại, Streaming Replication sẽ gửi và áp dụng các tệp WAL (Write Ahead Log) từ một máy chủ cơ sở dữ liệu (máy chủ hoặc chính), tới một 'bản sao' (cơ sở dữ liệu nhận).

Nhưng có một cảnh báo ở đây cần ghi nhớ. Về khả năng, các tệp WAL từ bản chính có thể được tái chế trước khi standy nhận được chúng. Một cách để giảm thiểu điều này là tăng cài đặt wal_keep_searies lên giá trị cao hơn.

Điểm về sao chép truyền trực tuyến

Các tài nguyên liên quan ClusterControl for PostgreSQL PostgreSQL Streaming Replication - Hướng dẫn chuyên sâu về nhân bản Slony cho PostgreSQL của chuyên gia
  • Theo mặc định, bản sao Truyền trực tuyến là không đồng bộ, nghĩa là có độ trễ (có thể nhỏ) giữa các giao dịch đã cam kết trên bản chính và khả năng hiển thị của chúng trên bản sao.
  • (Các) bản sao kết nối với bản chính thông qua kết nối mạng.
  • Chú ý đến xác thực. Xem tài liệu tại đây:"Điều quan trọng là phải thiết lập các đặc quyền truy cập để sao chép để chỉ những người dùng đáng tin cậy mới có thể đọc luồng WAL vì dễ dàng trích xuất thông tin đặc quyền từ đó"

Khi nào sử dụng tính năng sao chép truyền trực tuyến

  • Việc sử dụng phổ biến (đặc biệt là trong phân tích) cung cấp bản sao 'chỉ đọc' để giảm tải cho máy chủ chính.
  • Bạn cần một môi trường có tính khả dụng cao.
  • Thiết lập hữu ích để chuyển đổi dự phòng sang máy chủ dự phòng nóng nếu máy chủ chính gặp sự cố.

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. SQLAlchemy nhiều khóa ngoại trong một lớp được ánh xạ tới cùng một khóa chính

  2. Khắc phục:“không tồn tại toán tử:integer || số nguyên ”trong PostgreSQL

  3. Cách triển khai Teamcity với PostgreSQL để có tính khả dụng cao

  4. Nhận số lượng bản ghi bị ảnh hưởng bởi INSERT hoặc UPDATE trong PostgreSQL

  5. Có thể xác định các biến toàn cục trong postgresql không