ClusterControl là một công cụ tuyệt vời để triển khai và quản lý các cụm cơ sở dữ liệu - nếu bạn đang sử dụng MySQL, bạn có thể dễ dàng triển khai các cụm dựa trên cả bản sao MySQL master-slave truyền thống, Galera Cluster hoặc MySQL NDB Cluster. Tuy nhiên, để đạt được tính khả dụng cao, việc triển khai một cụm là không đủ. Các nút có thể (và rất có thể sẽ) đi xuống và hệ thống của bạn phải có khả năng thích ứng với những thay đổi đó.
Sự thích ứng này có thể xảy ra ở các mức độ khác nhau. Bạn có thể triển khai một số loại logic trong ứng dụng - nó sẽ kiểm tra trạng thái của các nút cụm và hướng lưu lượng truy cập đến các nút có thể truy cập vào thời điểm nhất định. Bạn cũng có thể xây dựng một lớp proxy để triển khai tính khả dụng cao trong hệ thống của bạn. Trong bài đăng blog này, chúng tôi muốn chia sẻ một số mẹo về cách bạn có thể đạt được điều đó bằng cách sử dụng ClusterControl.
Triển khai HAProxy bằng ClusterControl
HAProxy là tiêu chuẩn - một trong những proxy phổ biến nhất được sử dụng liên quan đến MySQL (tất nhiên là không chỉ). ClusterControl hỗ trợ triển khai và giám sát các nút HAProxy. Nó cũng giúp triển khai tính khả dụng cao của chính proxy bằng keepalived.
Việc triển khai khá đơn giản - bạn cần chọn hoặc điền địa chỉ IP của máy chủ lưu trữ nơi HAProxy sẽ được cài đặt, chọn cổng, chính sách cân bằng tải, quyết định xem ClusterControl có nên sử dụng kho lưu trữ hiện có hay mã nguồn mới nhất để triển khai HAProxy hay không. Bạn cũng có thể chọn các nút phụ trợ mà bạn muốn đưa vào cấu hình proxy và xem chúng nên hoạt động hay dự phòng.
Theo mặc định, phiên bản HAProxy được triển khai bởi ClusterControl sẽ hoạt động trên MySQL Cluster (NDB), Galera Cluster, sao chép luồng PostgreSQL và MySQL Replication. Để sao chép master-slave, ClusterControl có thể định cấu hình hai bộ lắng nghe, một bộ để chỉ đọc và một bộ nghe khác để đọc-ghi. Các ứng dụng sau đó sẽ phải gửi các lần đọc và ghi tới các cổng tương ứng. Đối với sao chép đa tổng thể, ClusterControl sẽ thiết lập cân bằng tải TCP tiêu chuẩn dựa trên thuật toán cân bằng kết nối ít nhất (ví dụ:đối với Galera Cluster nơi tất cả các nút đều có thể ghi được).
Keepalived được sử dụng để thêm tính khả dụng cao cho lớp proxy. Khi bạn có ít nhất hai nút HAProxy trong hệ thống của mình, bạn có thể cài đặt Keepalived từ giao diện người dùng ClusterControl.
Bạn sẽ phải chọn hai nút HAProxy và chúng sẽ được định cấu hình thành một cặp hoạt động - dự phòng. Một IP ảo sẽ được gán cho máy chủ đang hoạt động và nếu nó bị lỗi, nó sẽ được gán lại cho proxy dự phòng. Bằng cách này, bạn chỉ có thể kết nối với VIP và tất cả các truy vấn của bạn sẽ được chuyển đến nút HAProxy hiện đang hoạt động và đang hoạt động.
Bạn có thể tìm thêm chi tiết về cách cấu hình bên trong bằng cách đọc qua hướng dẫn HAProxy của chúng tôi.
Triển khai ProxySQL bằng ClusterControl
Trong khi HAProxy là một proxy vững chắc và là lựa chọn rất phổ biến, nó thiếu nhận thức về cơ sở dữ liệu, ví dụ:phân tách đọc-ghi. Cách duy nhất để làm điều đó trong HAProxy là tạo hai phụ trợ và lắng nghe trên hai cổng - một để đọc và một để ghi. Điều này, thông thường, tốt nhưng nó yêu cầu bạn thực hiện các thay đổi trong ứng dụng của mình - ứng dụng phải hiểu thế nào là đọc và đâu là ghi, sau đó hướng các truy vấn đó đến đúng cổng. Sẽ dễ dàng hơn nhiều nếu chỉ kết nối với một cổng duy nhất và để proxy quyết định phải làm gì tiếp theo - đây là điều mà HAProxy không thể làm vì những gì nó làm chỉ là định tuyến các gói - không có kiểm tra gói nào được thực hiện và đặc biệt là nó không có hiểu biết về giao thức MySQL.
ProxySQL giải quyết vấn đề này - nó nói giao thức MySQL và nó có thể (trong số những thứ khác) thực hiện phân tách đọc-ghi thông qua các quy tắc truy vấn mạnh mẽ của nó và định tuyến lưu lượng MySQL đến theo nhiều tiêu chí khác nhau. Cài đặt ProxySQL từ ClusterControl rất đơn giản - bạn muốn đi tới phần Quản lý -> Bộ cân bằng tải và điền vào tab “Triển khai ProxySQL” với dữ liệu cần thiết.
Tóm lại, chúng ta cần chọn nơi ProxySQL sẽ được cài đặt, người dùng quản trị và mật khẩu mà nó nên có, người dùng giám sát nào mà nó nên sử dụng để kết nối với các phụ trợ MySQL và xác minh trạng thái cũng như trạng thái giám sát của họ. Từ ClusterControl, bạn có thể tạo một người dùng mới để ứng dụng sử dụng - bạn có thể quyết định tên, mật khẩu, quyền truy cập vào cơ sở dữ liệu nào được cấp và người dùng đó sẽ có những đặc quyền MySQL nào. Người dùng như vậy sẽ được tạo trên cả phía MySQL và ProxySQL. Tùy chọn thứ hai, phù hợp hơn với các cơ sở hạ tầng hiện có, là sử dụng những người dùng cơ sở dữ liệu hiện có. Bạn cần chuyển tên người dùng và mật khẩu và người dùng đó sẽ chỉ được tạo trên ProxySQL.
Cuối cùng, bạn cần trả lời một câu hỏi:bạn có đang sử dụng các giao dịch ngầm không? Do đó, chúng tôi hiểu các giao dịch bắt đầu bằng cách chạy SET autocommit =0; Nếu bạn sử dụng nó, ClusterControl sẽ định cấu hình ProxySQL để gửi tất cả lưu lượng đến máy chủ. Điều này là bắt buộc để đảm bảo ProxySQL sẽ xử lý các giao dịch một cách chính xác trong ProxySQL 1.3.x trở về trước. Nếu bạn không sử dụng SET autocommit =0 để tạo giao dịch mới, ClusterControl sẽ định cấu hình phân tách đọc / ghi.
ProxySQL, cũng như mọi proxy, đều có thể trở thành một điểm lỗi duy nhất và nó phải được thực hiện dự phòng để đạt được tính khả dụng cao. Có một số phương pháp để làm điều đó. Một trong số đó là sắp xếp ProxySQL trên các nút web. Ý tưởng ở đây là, hầu hết thời gian, quy trình ProxySQL sẽ hoạt động tốt và lý do cho sự không khả dụng của nó là toàn bộ nút đã bị hỏng. Trong trường hợp như vậy, nếu ProxySQL được kết hợp với nút web, thì không có tác hại gì nhiều vì nút web cụ thể đó cũng sẽ không khả dụng.
Một phương pháp khác là sử dụng Keepalived theo cách tương tự như chúng tôi đã làm trong trường hợp HAProxy.
Bạn có thể tìm thêm chi tiết về cách cấu hình bên trong bằng cách đọc qua hướng dẫn ProxySQL của chúng tôi.