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

Cách triển khai PostgreSQL để có tính khả dụng cao

Giới thiệu

Ngày nay, tính khả dụng cao là yêu cầu đối với nhiều hệ thống, bất kể bạn đang sử dụng công nghệ nào. Điều này đặc biệt quan trọng đối với cơ sở dữ liệu, vì chúng lưu trữ dữ liệu mà các ứng dụng và hệ thống quan trọng dựa vào. Chiến lược phổ biến nhất để đạt được tính khả dụng cao là nhân rộng. Có nhiều cách khác nhau để sao chép dữ liệu trên nhiều máy chủ và lưu lượng chuyển đổi dự phòng, ví dụ:khi máy chủ chính ngừng phản hồi.

Kiến trúc sẵn có cao cho PostgreSQL

Có một số kiến ​​trúc để triển khai tính khả dụng cao trong PostgreSQL, nhưng những kiến ​​trúc cơ bản là kiến ​​trúc Chính-Dự phòng và Chính-Chính.

Kiến trúc Chính-Dự phòng

Primary-Standby có thể là kiến ​​trúc HA cơ bản nhất mà bạn có thể thiết lập và đôi khi, dễ triển khai và duy trì nhất. Nó dựa trên một cơ sở dữ liệu Chính với một hoặc nhiều máy chủ Dự phòng. Các cơ sở dữ liệu Dự phòng này sẽ vẫn được đồng bộ hóa (hoặc gần như đồng bộ hóa) với nút Chính, tùy thuộc vào việc bản sao là đồng bộ hay không đồng bộ. Nếu máy chủ Chính bị lỗi, máy chủ Dự phòng chứa gần như tất cả dữ liệu của máy chủ Chính và có thể nhanh chóng được chuyển thành máy chủ cơ sở dữ liệu Chính mới.

Bạn có thể triển khai hai loại cơ sở dữ liệu Dự phòng, dựa trên bản chất của bản sao:

  • Logical Standbys - Sao chép giữa chính và chờ được thực hiện thông qua các câu lệnh SQL.
  • Chế độ chờ vật lý - Việc sao chép giữa Chế độ chờ chính và Chế độ chờ được thực hiện thông qua sửa đổi cấu trúc dữ liệu nội bộ.

Trong trường hợp của PostgreSQL, một luồng bản ghi ghi trước nhật ký (WAL) được sử dụng để giữ cho cơ sở dữ liệu Dự phòng được đồng bộ hóa. Điều này có thể đồng bộ hoặc không đồng bộ và toàn bộ máy chủ cơ sở dữ liệu được sao chép.

Từ phiên bản 10 trở đi, PostgreSQL bao gồm một tùy chọn tích hợp để thiết lập bản sao lôgic, tạo ra một luồng sửa đổi dữ liệu lôgic từ thông tin trong nhật ký ghi trước. Phương pháp sao chép này cho phép sao chép các thay đổi dữ liệu từ các bảng riêng lẻ mà không cần chỉ định một máy chủ Chính. Nó cũng cho phép dữ liệu chảy theo nhiều hướng.

Rất tiếc, thiết lập Chính-Chế độ chờ không đủ để đảm bảo tính khả dụng cao một cách hiệu quả, vì bạn cũng cần xử lý các lỗi. Để xử lý các hỏng hóc, bạn cần có khả năng phát hiện ra chúng. Khi bạn biết có lỗi xảy ra, ví dụ như lỗi trên nút Chính hoặc nút không phản hồi, bạn có thể chọn một nút dự phòng để thay thế nút bị lỗi với thời gian trễ ít nhất có thể. Quá trình này phải hiệu quả nhất có thể để khôi phục toàn bộ chức năng cho các ứng dụng. Bản thân PostgreSQL không bao gồm cơ chế chuyển đổi dự phòng tự động, vì vậy, điều này sẽ yêu cầu một số tập lệnh tùy chỉnh hoặc công cụ của bên thứ ba để tự động hóa này.

Sau khi quá trình chuyển đổi dự phòng xảy ra, ứng dụng của bạn cần được thông báo tương ứng để bắt đầu sử dụng Chính mới. Bạn cũng cần đánh giá trạng thái kiến ​​trúc của mình sau khi chuyển đổi dự phòng vì bạn có thể gặp phải tình huống chỉ có nút Chính mới đang chạy (ví dụ:bạn có một nút Chính và chỉ một nút Chờ trước khi sự cố). Trong trường hợp đó, bạn sẽ cần thêm nút Chờ để tạo lại thiết lập Chế độ chờ chính mà bạn đã có ban đầu để có tính khả dụng cao.

Kiến trúc Chính-Chính

Kiến trúc chính-chính cung cấp một cách giảm thiểu tác động của lỗi đối với một trong các nút, vì (các) nút khác có thể đảm nhận tất cả lưu lượng truy cập, chỉ có khả năng ảnh hưởng nhẹ đến hiệu suất nhưng không bao giờ mất chức năng. Kiến trúc chính-chính thường được sử dụng với mục đích kép là tạo ra môi trường có tính khả dụng cao và mở rộng quy mô theo chiều ngang (so với khái niệm về khả năng mở rộng theo chiều dọc khi bạn thêm nhiều tài nguyên hơn vào máy chủ).

PostgreSQL chưa hỗ trợ kiến ​​trúc này "nguyên bản", vì vậy bạn sẽ phải tham khảo các công cụ và triển khai của bên thứ ba. Khi chọn một giải pháp, bạn phải lưu ý rằng có rất nhiều dự án / công cụ, nhưng một số dự án / công cụ trong số đó không còn được hỗ trợ nữa, trong khi những dự án / công cụ khác là mới và có thể không được thử nghiệm trong quá trình sản xuất.

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.

Những công cụ này không chỉ hữu ích trong việc cân bằng tải cơ sở dữ liệu của bạn mà 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, chúng đượ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.

Keepalived là dịch vụ cho phép bạn định cấu hình địa chỉ IP ảo trong một nhóm máy chủ hoạt động / thụ động. Địa chỉ 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, địa chỉ 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 địa chỉ IP một cách minh bạch cho các hệ thống.

Bây giờ chúng ta hãy xem cách triển khai cụm PostgreSQL Chính-Dự phòng với các máy chủ cân bằng tải và được định cấu hình giữa chúng. Chúng tôi sẽ chứng minh điều này bằng giao diện dễ sử dụng của ClusterControl.

Đối với ví dụ này, chúng tôi sẽ tạo:

  • 3 máy chủ PostgreSQL (một chính và hai dự phòng).
  • 2 Bộ cân bằng tải HAProxy.
  • Được định cấu hình duy trì giữa các máy chủ cân bằng tải.

Triển khai cơ sở dữ liệu

Để triển khai cơ sở dữ liệu bằng ClusterControl, chỉ cần chọn tùy chọn “Triển khai” và làm theo hướng dẫn xuất hiện.

Khi chọn PostgreSQL, bạn phải chỉ định Người dùng, Khóa hoặc Mật khẩu và Cổng kết nối bằng SSH với máy chủ của bạn. Bạn cũng cần tên cho cụm mới của mình và chọn nếu bạn muốn ClusterControl cài đặt phần mềm và cấu hình tương ứng cho bạn.

Sau khi thiết lập thông tin truy cập SSH, bạn phải xác định người dùng cơ sở dữ liệu, phiên bản và datadir (tùy chọn). Bạn cũng có thể chỉ định kho lưu trữ nào sẽ sử dụng; kho lưu trữ của nhà cung cấp chính thức sẽ được sử dụng theo mặc định.

Trong bước tiếp theo, bạn cần thêm máy chủ của mình vào cụm bạn sẽ tạo.

Khi thêm máy chủ, bạn có thể nhập IP hoặc tên máy chủ.

Trong bước cuối cùng, bạn có thể chọn xem bản sao của mình là Đồng bộ hay Không đồng bộ.

Bạn có thể theo dõi trạng thái tạo cụm mới của mình từ ClusterControl giám sát hoạt động.

Khi nhiệm vụ hoàn thành, bạn có thể thấy cụm của mình trong ClusterControl chính màn hình.

Khi cụm của bạn được tạo, bạn có thể thực hiện một số tác vụ, chẳng hạn như thêm bộ cân bằng tải (HAProxy) hoặc một bản sao mới.

Triển khai Load Balancer

Để triển khai bộ cân bằng tải, hãy chọn tùy chọn “Thêm bộ cân bằng tải” trong các tác vụ cụm và điền vào thông tin được yêu cầu.

Bạn chỉ cần thêm địa chỉ IP hoặc Tên máy chủ, Cổng, Chính sách, và các nút bạn sẽ định cấu hình trong bộ cân bằng tải của mình.

Triển khai đủ điều kiện

Để thực hiện triển khai đủ điều kiện, hãy chọn cụm, đi tới trình đơn “Quản lý” và phần “Bộ cân bằng tải”, sau đó chọn tùy chọn “Keepalived”.

Bạn phải chọn máy chủ cân bằng tải và địa chỉ IP ảo cho môi trường khả dụng.

Keepalived sử dụng địa chỉ IP ảo và di chuyển nó từ bộ cân bằng tải này sang bộ cân bằng tải khác trong trường hợp bị lỗi, vì vậy hệ thống của bạn có thể tiếp tục hoạt động bình thường.

Nếu bạn đã làm theo các bước trước đó, bạn sẽ có cấu trúc liên kết sau:

Bạn có thể cải thiện môi trường có tính khả dụng cao này bằng cách thêm trình gộp kết nối như PgBouncer. Nó không phải là bắt buộc nhưng có thể hữu ích để cải thiện hiệu suất và xử lý các kết nối đang hoạt động trong trường hợp bị lỗi và điều tốt nhất là bạn cũng có thể triển khai nó bằng cách sử dụng ClusterControl.

Chuyển đổi dự phòng ClusterControl

Giả sử tùy chọn “Autorecovery” được BẬT trong máy chủ ClusterControl của bạn. Trong trường hợp lỗi Chính, ClusterControl sẽ chuyển Chế độ chờ tiên tiến nhất (nếu không có trong danh sách đen) cho Chính, cũng như thông báo cho bạn về sự cố. Nó cũng sẽ chuyển đổi dự phòng phần còn lại của các nút Dự phòng để sao chép từ Nút chính mới.

HAProxy được định cấu hình theo mặc định với hai cổng khác nhau; cổng đọc-ghi và chỉ đọc.

Trong cổng đọc-ghi của mình, bạn có máy chủ Chính trực tuyến và các nút còn lại của bạn là ngoại tuyến và trong cổng chỉ đọc, bạn có cả Máy chủ chính và Dự phòng trực tuyến.

Khi HAProxy phát hiện thấy một trong các nút của bạn, hoặc Chính hoặc Dự phòng, không thể truy cập được, nó sẽ tự động đánh dấu là ngoại tuyến. Nó không tính đến việc gửi lưu lượng đến nó. Việc phát hiện được thực hiện bởi các tập lệnh kiểm tra tình trạng mà ClusterControl định cấu hình tại thời điểm triển khai. Những điều này sẽ kiểm tra xem các phiên bản đã hoạt động chưa, chúng đang trong quá trình khôi phục hay ở chế độ chỉ đọc.

Khi ClusterControl quảng bá Chế độ chờ thành Chính, HAProxy của bạn sẽ đánh dấu Chính cũ là ngoại tuyến cho cả hai cổng và đặt nút được quảng bá trực tuyến trong cổng đọc-ghi.

Nếu HAProxy đang hoạt động của bạn, đã chỉ định địa chỉ IP Ảo mà hệ thống của bạn kết nối, không thành công, Keepalived sẽ tự động di chuyển địa chỉ IP này sang HAProxy thụ động của bạn. Điều này có nghĩa là hệ thống của bạn sau đó có thể tiếp tục hoạt động bình thường.

Bằng cách này, hệ thống của bạn tiếp tục hoạt động như mong đợi và không có sự can thiệp thủ công của bạn.

Cân nhắc

Nếu bạn quản lý để khôi phục nút Chính bị lỗi cũ, nó sẽ KHÔNG được tự động giới thiệu lại vào cụm theo mặc định. Bạn cần phải làm điều đó theo cách thủ công. Một lý do cho điều này là nếu bản sao của bạn bị trì hoãn tại thời điểm xảy ra lỗi và ClusterControl thêm Chính cũ vào cụm, điều đó có nghĩa là mất thông tin hoặc dữ liệu không nhất quán giữa các nút. Bạn cũng có thể muốn phân tích vấn đề một cách chi tiết. Nếu ClusterControl vừa giới thiệu lại nút bị lỗi vào cụm, bạn có thể mất thông tin chẩn đoán.

Ngoài ra, nếu chuyển đổi dự phòng không thành công, không có nỗ lực nào khác được thực hiện. Cần có sự can thiệp thủ công để phân tích vấn đề và thực hiện các hành động tương ứng. Điều này là để tránh trường hợp ClusterControl, với tư cách là người quản lý tính khả dụng cao, cố gắng thúc đẩy Chế độ chờ tiếp theo và Chế độ chờ tiếp theo. Có thể có sự cố và bạn cần kiểm tra điều này.

Bảo mật

Một điều quan trọng bạn không thể quên trước khi bắt đầu sản xuất với môi trường có tính khả dụng cao là đảm bảo tính bảo mật của nó.

Một số khía cạnh bảo mật cần xem xét bao gồm mã hóa, quản lý vai trò và hạn chế truy cập theo địa chỉ IP, mà chúng tôi đã đề cập sâu trong một blog trước đây.

Trong cơ sở dữ liệu PostgreSQL của bạn, bạn có tệp pg_hba.conf, tệp này xử lý xác thực máy khách. Bạn có thể giới hạn loại kết nối, địa chỉ IP nguồn hoặc mạng, cơ sở dữ liệu nào bạn có thể kết nối và người dùng nào. Do đó, tệp này là một phần quan trọng đối với bảo mật PostgreSQL.

Bạn có thể định cấu hình cơ sở dữ liệu PostgreSQL của mình từ tệp postgresql.conf, vì vậy nó chỉ lắng nghe trên một giao diện mạng cụ thể và một cổng khác với cổng mặc định (5432), do đó tránh được các nỗ lực kết nối cơ bản từ các nguồn không mong muốn .

Quản lý người dùng thích hợp, sử dụng mật khẩu an toàn hoặc hạn chế quyền truy cập và đặc quyền, là một phần quan trọng khác trong cài đặt bảo mật của bạn. Bạn nên chỉ định số lượng đặc quyền ít nhất có thể cho tất cả người dùng và chỉ định nguồn kết nối, nếu có thể.

Bạn cũng có thể bật mã hóa dữ liệu, khi đang chuyển tiếp hoặc ở chế độ nghỉ, tránh truy cập thông tin của những người trái phép.

Nhật ký kiểm tra rất hữu ích để hiểu những gì đang xảy ra hoặc đã xảy ra trong cơ sở dữ liệu của bạn. PostgreSQL cho phép bạn định cấu hình một số tham số để ghi nhật ký hoặc thậm chí sử dụng phần mở rộng pgAudit cho tác vụ này.

Cuối cùng nhưng không kém phần quan trọng, bạn nên cập nhật cơ sở dữ liệu và máy chủ của mình với các bản vá mới nhất để tránh rủi ro bảo mật. Đối với điều này, ClusterControl cho phép bạn tạo các báo cáo hoạt động để xác minh xem bạn có sẵn các bản cập nhật hay không và thậm chí giúp bạn cập nhật máy chủ cơ sở dữ liệu của mình.

Kết luận

Việc triển khai tính sẵn sàng cao có vẻ khó đạt được, đặc biệt là khi hiểu các kiến ​​trúc khác nhau và các thành phần cần thiết để định cấu hình chúng một cách chính xác.

Nếu bạn đang quản lý HA theo cách thủ công, hãy nhớ xem Thực hiện Thay đổi cấu trúc liên kết sao chép cho PostgreSQL. Nhiều người sẽ tìm kiếm các công cụ như ClusterControl để giúp quản lý việc triển khai, cân bằng tải, chuyển đổi dự phòng, bảo mật và hơn thế nữa để tạo ra một môi trường có tính khả dụng cao hoàn chỉnh. Bạn có thể tải xuống ClusterControl miễn phí trong 30 ngày để xem nó có thể giảm bớt gánh nặng quản lý cơ sở dữ liệu có tính khả dụng cao như thế nào.

Tuy nhiên, bạn chọn quản lý cơ sở dữ liệu PostgreSQL có tính khả dụng cao của mình, hãy nhớ theo dõi chúng tôi trên Twitter hoặc LinkedIn, hoặc đăng ký nhận bản tin của chúng tôi để nhận các bản cập nhật mới nhất và các phương pháp hay nhất để quản lý thiết lập cơ sở dữ liệu của bạn.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đón ngày cuối cùng của tháng trong PostgreSQL

  2. Bắt đầu với PostgreSQL 11 trên Ubuntu 18.04

  3. 2 cách để có được kích thước của cơ sở dữ liệu trong PostgreSQL

  4. Cách tách các giao dịch chỉ đọc và đọc ghi với JPA và Hibernate

  5. Spark Dataframes UPSERT to Postgres Table