Sử dụng môi trường đa đám mây hoặc nhiều trung tâm dữ liệu rất hữu ích cho các cấu trúc liên kết phân tán theo địa lý hoặc thậm chí cho kế hoạch khôi phục thảm họa và thực tế, nó đang trở nên phổ biến hơn ngày nay, do đó khái niệm phân chia não cũng đang trở nên quan trọng hơn khi rủi ro có nó tăng lên trong loại kịch bản này. Bạn phải ngăn chặn tình trạng phân chia dữ liệu để tránh mất dữ liệu tiềm ẩn hoặc dữ liệu không nhất quán, đây có thể là một vấn đề lớn đối với doanh nghiệp.
Trong blog này, chúng ta sẽ xem phân chia não bộ là gì và cách ClusterControl có thể giúp bạn tránh được vấn đề quan trọng này.
Split-Brain là gì?
Trong thế giới PostgreSQL, phân tách não xảy ra khi có nhiều hơn một nút chính có sẵn cùng một lúc (không có bất kỳ công cụ bên thứ ba nào có môi trường đa chủ) cho phép ứng dụng ghi ở cả hai nút. Trong trường hợp này, bạn sẽ có thông tin khác nhau trên mỗi nút, điều này tạo ra sự không nhất quán về dữ liệu trong cụm. Việc khắc phục sự cố này có thể khó khăn vì bạn phải hợp nhất dữ liệu, điều mà đôi khi không thể thực hiện được.
Bộ não phân tách PostgreSQL trong cấu trúc liên kết đa đám mây
Giả sử bạn có cấu trúc liên kết đa đám mây sau cho PostgreSQL (là cấu trúc liên kết khá phổ biến hiện nay):
Tất nhiên, bạn có thể cải thiện môi trường này bằng cách thêm một Máy chủ ứng dụng trong Nhà cung cấp đám mây 2, nhưng trong trường hợp này, hãy sử dụng cấu hình cơ bản này.
Nếu nút chính của bạn không hoạt động, một trong các nút chờ sẽ được thăng cấp làm nút chính mới và bạn nên thay đổi địa chỉ IP trong ứng dụng của mình để sử dụng nút chính mới này.
Có nhiều cách khác nhau để thực hiện việc này theo cách tự động. Ví dụ:bạn có thể sử dụng địa chỉ IP ảo được gán cho nút chính của mình và giám sát nó. Nếu không thành công, hãy quảng bá một trong các nút dự phòng và di chuyển địa chỉ IP ảo sang nút chính mới này, vì vậy bạn không cần thay đổi bất kỳ điều gì trong ứng dụng của mình và điều này có thể được thực hiện bằng cách sử dụng tập lệnh hoặc công cụ của riêng bạn.
Hiện tại, bạn không gặp vấn đề gì, nhưng… nếu nút chính cũ của bạn quay trở lại, bạn phải đảm bảo rằng bạn sẽ không có hai nút chính trong cùng một cụm cùng một lúc .
Các phương pháp phổ biến nhất để tránh tình trạng này là:
- STONITH:Bắn vào đầu người khác.
- SMITH:Bắn vào đầu chính mình.
PostgreSQL không cung cấp bất kỳ cách nào để tự động hóa quy trình này. Bạn phải tự làm.
Cách Tránh Phân tách não trong PostgreSQL với ClusterControl
Bây giờ, hãy xem cách ClusterControl có thể giúp bạn thực hiện nhiệm vụ này.
Trước tiên, bạn có thể sử dụng nó để triển khai hoặc nhập môi trường Đa đám mây PostgreSQL của mình theo cách dễ dàng như bạn có thể thấy trong bài đăng blog này.
Sau đó, bạn có thể cải thiện cấu trúc liên kết của mình bằng cách thêm Bộ cân bằng tải (HAProxy), bạn cũng có thể thực hiện điều này bằng cách sử dụng ClusterControl sau blog này. Vì vậy, bạn sẽ có một cái gì đó như thế này:
ClusterControl có tính năng tự động chuyển đổi dự phòng giúp phát hiện lỗi chính và thúc đẩy chế độ chờ nút có dữ liệu mới nhất dưới dạng một nút chính mới. Nó cũng không thành công trên các nút dự phòng còn lại để sao chép từ nút chính mới.
HAProxy được cấu hình bởi ClusterControl với hai cổng khác nhau theo mặc định, một cổng đọc-ghi và một cổng chỉ đọc. Trong cổng đọc-ghi, bạn có nút 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ả nút chính và nút chờ trực tuyến. Bằng cách này, bạn có thể cân bằng lưu lượng đọc giữa các nút của mình nhưng bạn đảm bảo rằng tại thời điểm viết, cổng đọc-ghi sẽ được sử dụng, ghi vào nút chính là máy chủ trực tuyến.
Khi HAProxy phát hiện ra rằng một trong các nút của bạn, dù là chính hoặc ở chế độ chờ, không thể truy cập, nó tự động đánh dấu nó là ngoại tuyến và không tính đến việc gửi lưu lượng truy cập đến nó. Việc kiểm tra này được thực hiện bằng các tập lệnh kiểm tra tình trạng được cấu hình bởi ClusterControl tại thời điểm triển khai. Những điều này kiểm tra xem các phiên bản đã hoạt động chưa, chúng đang được khôi phục hay ở chế độ chỉ đọc.
Nếu nút chính cũ của bạn quay trở lại, ClusterControl cũng sẽ tránh khởi động nó, để ngăn chặn khả năng xảy ra phân tách não trong trường hợp bạn có kết nối trực tiếp không sử dụng Load Balancer, nhưng bạn có thể thêm nó vào cụm dưới dạng nút dự phòng theo cách tự động hoặc thủ công bằng cách sử dụng ClusterControl UI hoặc CLI, sau đó bạn có thể quảng bá nó để có cùng cấu trúc liên kết mà bạn đã chạy trước sự cố.
Kết luận
BẬT tùy chọn “Autorecovery”, ClusterControl sẽ thực hiện chuyển đổi dự phòng tự động này cũng như thông báo cho bạn về sự cố. Bằng cách này, hệ thống của bạn có thể phục hồi trong vài giây mà không cần sự can thiệp của bạn và bạn sẽ tránh được tình trạng chia rẽ trong môi trường PostgreSQL Multi-Cloud.
Bạn cũng có thể cải thiện môi trường Tính sẵn sàng cao của mình bằng cách thêm nhiều nút ClusterControl hơn bằng cách sử dụng tính năng CMON HA được mô tả trong blog này.