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

Các phương pháp hay nhất về sao chép PostgreSQL - Phần 1

Sử dụng bản sao cho cơ sở dữ liệu PostgreSQL của bạn có thể hữu ích không chỉ để có môi trường khả dụng và khả năng chịu lỗi cao mà còn cải thiện hiệu suất trên hệ thống của bạn bằng cách cân bằng lưu lượng giữa các nút dự phòng. Trong phần đầu tiên của blog gồm hai phần này, chúng ta sẽ xem một số khái niệm liên quan đến bản sao PostgreSQL.

Các phương thức sao chép trong PostgreSQL

Có nhiều phương pháp khác nhau để sao chép dữ liệu trong PostgreSQL, nhưng ở đây chúng ta sẽ tập trung vào hai phương pháp chính:Sao chép theo luồng và Sao chép lôgic.

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

PostgreSQL Streaming Replication, Bản sao PostgreSQL phổ biến nhất, là một bản sao vật lý sao chép các thay đổi ở cấp độ từng byte, tạo ra một bản sao giống hệt của cơ sở dữ liệu trong một máy chủ khác. Nó dựa trên phương thức vận chuyển nhật ký. Các bản ghi WAL được chuyển trực tiếp từ máy chủ cơ sở dữ liệu này sang máy chủ cơ sở dữ liệu khác để được áp dụng. Có thể nói đó là một loại PITR liên tục.

Quá trình chuyển WAL này được thực hiện theo hai cách khác nhau, bằng cách chuyển các bản ghi WAL một tệp (phân đoạn WAL) tại một thời điểm (vận chuyển nhật ký dựa trên tệp) và bằng cách chuyển các bản ghi WAL (một tệp WAL bao gồm Bản ghi WAL) nhanh chóng (vận chuyển dựa trên bản ghi), giữa một máy chủ chính và một hoặc nhiều hơn các máy chủ dự phòng, mà không cần đợi tệp WAL được điền.

Trong thực tế, một quá trình được gọi là bộ thu WAL, chạy trên máy chủ dự phòng, sẽ kết nối với máy chủ chính bằng kết nối TCP / IP. Trong máy chủ chính, tồn tại một quy trình khác, có tên là người gửi WAL và chịu trách nhiệm gửi các đăng ký WAL đến máy chủ dự phòng khi chúng xảy ra.

Một bản sao truyền trực tuyến cơ bản có thể được biểu diễn như sau:

Khi định cấu hình sao chép luồng, bạn có tùy chọn bật lưu trữ WAL. Điều này không bắt buộc, nhưng cực kỳ quan trọng để thiết lập sao chép mạnh mẽ, vì cần tránh máy chủ chính tái chế các tệp WAL cũ chưa được áp dụng cho máy chủ dự phòng. Nếu điều này xảy ra, bạn sẽ cần tạo lại bản sao từ đầu.

Sao chép lôgic

PostgreSQL Logical Replication 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 danh tính sao chép của chúng (thường là khóa chính). Nó dựa trên chế độ xuất bản và đăng ký, trong đó một hoặc nhiều người đăng ký đăng ký một hoặc nhiều ấn phẩm trên một nút nhà xuất bản.

Ấn phẩm là một tập hợp các thay đổi được tạo ra từ một bảng hoặc một nhóm bảng. Nút nơi một ấn phẩm được xác định được gọi là nhà xuất bản. Đăng ký là mặt sau của sao chép hợp lý. Nút nơi đăng ký được xác định được gọi là người đăng ký và nó xác định kết nối với cơ sở dữ liệu khác và tập hợp các ấn phẩm (một hoặc nhiều) mà nó muốn đăng ký. Người đăng ký lấy dữ liệu từ các ấn phẩm mà họ đăng ký.

Bản sao lôgic được xây dựng với kiến ​​trúc tương tự như bản sao luồng vật lý. Nó được thực hiện bởi các quy trình "walsender" và "apply". Quá trình walsender bắt đầu giải mã logic của WAL và tải plugin giải mã logic tiêu chuẩn. Plugin chuyển các thay đổi được đọc từ WAL sang giao thức sao chép hợp lý và lọc dữ liệu theo đặc điểm kỹ thuật xuất bản. Sau đó, dữ liệu được chuyển liên tục bằng cách sử dụng giao thức sao chép trực tuyến tới trình xử lý ứng dụng, ánh xạ dữ liệu tới các bảng cục bộ và áp dụng các thay đổi riêng lẻ khi chúng được nhận, theo thứ tự giao dịch chính xác.

Sao chép lôgic bắt đầu bằng cách chụp nhanh dữ liệu trên cơ sở dữ liệu của nhà xuất bản và sao chép đó cho người đăng ký. Dữ liệu ban đầu trong các bảng đã đăng ký hiện có được chụp nhanh và sao chép trong một phiên bản song song của một loại quy trình áp dụng đặc biệt. Quá trình này sẽ tạo khe sao chép tạm thời của riêng nó và sao chép dữ liệu hiện có. Sau khi dữ liệu hiện có được sao chép, worker sẽ vào chế độ đồng bộ hóa, điều này đảm bảo rằng bảng được đưa đến trạng thái đồng bộ với quy trình áp dụng chính bằng cách phát trực tuyến bất kỳ thay đổi nào đã xảy ra trong quá trình sao chép dữ liệu ban đầu bằng cách sử dụng sao chép logic tiêu chuẩn. Khi quá trình đồng bộ hóa được thực hiện xong, việc kiểm soát quá trình sao chép bảng được đưa trở lại quy trình áp dụng chính, nơi quá trình sao chép vẫn tiếp tục như bình thường. Các thay đổi về nhà xuất bản được gửi đến người đăng ký khi chúng xảy ra trong thời gian thực.

Chế độ sao chép trong PostgreSQL

Bản sao trong PostgreSQL có thể là đồng bộ hoặc không đồng bộ.

Sao chép Không đồng bộ

Đây là chế độ mặc định. Ở đây, có thể có một số giao dịch được cam kết trong nút chính chưa được sao chép sang máy chủ dự phòng. Điều này có nghĩa là có khả năng xảy ra một số mất mát dữ liệu tiềm ẩn. Sự chậm trễ này trong quá trình cam kết được cho là rất nhỏ nếu máy chủ dự phòng đủ mạnh để theo kịp tải. Nếu rủi ro mất dữ liệu nhỏ này không được chấp nhận trong công ty, bạn có thể sử dụng tính năng sao chép đồng bộ để thay thế.

Sao chép Đồng bộ

Mỗi cam kết của một giao dịch ghi sẽ đợi cho đến khi 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. Phương pháp này giảm thiểu khả năng mất dữ liệu. Để xảy ra mất dữ liệu, bạn sẽ cần cả thiết bị chính và dự phòng bị lỗi cùng một lúc.

Nhược điểm của phương pháp này là giống nhau đối với tất cả các phương thức đồng bộ vì với phương pháp này, thời gian phản hồi cho mỗi giao dịch ghi tăng lên. Điều này là do sự cần thiết phải đợi cho đến khi tất cả các xác nhận rằng giao dịch đã được cam kết. May mắn thay, các giao dịch chỉ đọc sẽ không bị ảnh hưởng bởi điều này nhưng; chỉ các giao dịch ghi.

Tính sẵn sàng cao để sao chép PostgreSQL

Tính sẵn sàng cao là yêu cầu đối với nhiều hệ thống, bất kể chúng tôi sử dụng công nghệ nào và có những cách tiếp cận khác nhau để đạt được điều này bằng cách sử dụng các công cụ khác nhau.

Cân bằng tải

Bộ cân bằng tải là công cụ có thể được sử dụng để quản lý lưu lượng truy cập từ ứng dụng của bạn nhằm tận dụng tối đa kiến ​​trúc cơ sở dữ liệu của bạn. Nó không chỉ hữu ích để cân bằng tải cơ sở dữ liệu của chúng tôi, nó còn giúp các ứng dụng được chuyển hướng đến các nút có sẵn / khỏe mạnh và thậm chí chỉ định các cổng với các vai trò khác nhau.

HAProxy là bộ cân bằng tải phân phối lưu lượng truy cập từ một điểm gốc đến một hoặc nhiều điểm đến và có thể xác định các quy tắc và / hoặc giao thức cụ thể cho tác vụ này. Nếu bất kỳ điểm đến nào ngừng phản hồi, nó được đánh dấu là ngoại tuyến và lưu lượng truy cập được gửi đến phần còn lại của các điểm đến khả dụng. Chỉ có một nút Load Balancer sẽ tạo ra Điểm lỗi duy nhất, vì vậy để tránh điều này, bạn nên triển khai ít nhất hai nút HAProxy và định cấu hình Keepalived giữa chúng.

Keepalived là một dịch vụ cho phép chúng tôi định cấu hình IP ảo trong một nhóm máy chủ hoạt động / thụ động. IP ảo này được gán cho một máy chủ đang hoạt động. Nếu máy chủ này bị lỗi, IP sẽ tự động được di chuyển sang máy chủ thụ động "Phụ", cho phép nó tiếp tục hoạt động với cùng một IP một cách minh bạch cho các hệ thống.

Cải thiện Hiệu suất trên Bản sao PostgreSQL

Hiệu suất luôn quan trọng trong bất kỳ hệ thống nào. Bạn sẽ cần tận dụng tốt các nguồn lực sẵn có để đảm bảo thời gian phản hồi tốt nhất có thể và có nhiều cách khác nhau để thực hiện việc này. Mọi kết nối đến cơ sở dữ liệu đều tiêu tốn tài nguyên, vì vậy một trong những cách để cải thiện hiệu suất trên cơ sở dữ liệu PostgreSQL của bạn là có một bộ kết nối tốt giữa ứng dụng của bạn và các máy chủ cơ sở dữ liệu.

Kết nối Poolers

Kết nối tổng hợp là một phương pháp tạo một nhóm các kết nối và sử dụng lại chúng, tránh mở các kết nối mới đến cơ sở dữ liệu mọi lúc, điều này sẽ làm tăng đáng kể hiệu suất của các ứng dụng của bạn. PgBouncer là một trình gộp kết nối phổ biến được thiết kế cho PostgreSQL.

PgBouncer hoạt động như một máy chủ PostgreSQL, vì vậy bạn chỉ cần truy cập cơ sở dữ liệu của mình bằng cách sử dụng thông tin PgBouncer (Địa chỉ IP / Tên máy chủ và Cổng) và PgBouncer sẽ tạo một kết nối đến máy chủ PostgreSQL hoặc nó sẽ sử dụng lại một kết nối nếu nó tồn tại.

Khi PgBouncer nhận được kết nối, nó sẽ thực hiện xác thực, điều này phụ thuộc vào phương pháp được chỉ định trong tệp cấu hình. PgBouncer hỗ trợ tất cả các cơ chế xác thực mà máy chủ PostgreSQL hỗ trợ. Sau đó, PgBouncer sẽ kiểm tra kết nối đã lưu trong bộ nhớ cache, có cùng tên người dùng + cơ sở dữ liệu kết hợp. Nếu một kết nối được lưu trong bộ nhớ cache được tìm thấy, nó sẽ trả kết nối đó cho máy khách, nếu không, nó sẽ tạo một kết nối mới. Tùy thuộc vào cấu hình PgBouncer và số lượng kết nối đang hoạt động, có thể kết nối mới được xếp hàng đợi cho đến khi nó có thể được tạo hoặc thậm chí bị hủy bỏ.

Với tất cả các khái niệm đã đề cập này, trong phần thứ hai của blog này, chúng ta sẽ xem cách bạn có thể kết hợp chúng để có một môi trường nhân bản tốt trong PostgreSQL.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Di chuyển PostgreSQL sang Đám mây - So sánh các giải pháp từ Amazon, Google và Microsoft

  2. Tạo ràng buộc duy nhất với cột rỗng

  3. Làm thế nào để cung cấp một ứng dụng khách API với 1.000.000 kết quả cơ sở dữ liệu?

  4. Kết nối Postgres đã bị đóng trong Spring Boot

  5. PostgreSQL cách xem truy vấn nào đã chạy