Trong blog trước của loạt bài này, chúng ta đã thảo luận về ưu và nhược điểm của việc sử dụng Galera Cluster để tạo cụm phân tán theo địa lý. Trong bài đăng này, chúng tôi sẽ thiết kế một cụm phân tán địa lý dựa trên Galera và chúng tôi sẽ chỉ ra cách bạn có thể triển khai tất cả các phần được yêu cầu bằng cách sử dụng ClusterControl.
Thiết kế Cụm Galera được Phân phối theo Địa lý
Chúng ta sẽ bắt đầu với việc giải thích môi trường mà chúng ta muốn xây dựng. Chúng tôi sẽ sử dụng ba trung tâm dữ liệu từ xa, được kết nối qua Mạng diện rộng (WAN). Mỗi trung tâm dữ liệu sẽ nhận được ghi từ các máy chủ ứng dụng cục bộ. Đọc cũng sẽ chỉ ở địa phương. Điều này nhằm tránh lưu lượng không cần thiết băng qua mạng WAN.
Đối với thiết lập này, kết nối đã sẵn sàng và được bảo mật, nhưng chúng tôi sẽ không mô tả chính xác cách có thể đạt được điều này. Có nhiều phương pháp để đảm bảo kết nối bắt đầu từ các giải pháp phần cứng và phần mềm độc quyền thông qua OpenVPN và kết thúc trên đường hầm SSH.
Chúng tôi sẽ sử dụng ProxySQL làm bộ cân bằng tải. ProxySQL sẽ được triển khai cục bộ trong mỗi trung tâm dữ liệu. Nó cũng sẽ chỉ định tuyến lưu lượng đến các nút cục bộ. Các nút từ xa luôn có thể được thêm theo cách thủ công và chúng tôi sẽ giải thích các trường hợp mà đây có thể là một giải pháp tốt. Ứng dụng có thể được cấu hình để kết nối với một trong các nút ProxySQL cục bộ bằng cách sử dụng thuật toán round-robin. Chúng tôi cũng có thể sử dụng Keepalived và Virtual IP để định tuyến lưu lượng truy cập đến một nút ProxySQL, miễn là một nút ProxySQL duy nhất có thể xử lý tất cả lưu lượng.
Một giải pháp khả thi khác là kết hợp ProxySQL với các nút ứng dụng và định cấu hình ứng dụng để kết nối với proxy trên máy chủ cục bộ. Cách tiếp cận này hoạt động khá tốt với giả định rằng không có khả năng ProxySQL sẽ không khả dụng nhưng ứng dụng sẽ hoạt động bình thường trên cùng một nút. Thông thường những gì chúng ta thấy là lỗi nút hoặc lỗi mạng, điều này sẽ ảnh hưởng đến cả ProxySQL và ứng dụng cùng một lúc.
Biểu đồ trên hiển thị phiên bản của môi trường, nơi ProxySQL được sắp xếp vào cùng một nút với ứng dụng. ProxySQL được định cấu hình để phân phối khối lượng công việc trên tất cả các nút Galera trong trung tâm dữ liệu cục bộ. Một trong những nút đó sẽ được chọn làm nút để gửi ghi trong khi SELECT sẽ được phân phối trên tất cả các nút. Có một nút ghi chuyên dụng trong trung tâm dữ liệu giúp giảm thiểu số lượng xung đột chứng chỉ có thể xảy ra, dẫn đến hiệu suất tốt hơn, điển hình là. Để giảm điều này hơn nữa, chúng tôi sẽ phải bắt đầu gửi lưu lượng qua kết nối WAN, điều này không lý tưởng vì việc sử dụng băng thông sẽ tăng lên đáng kể. Ngay bây giờ, với các phân đoạn đã sẵn sàng, chỉ có hai bản sao của tập ghi đang được gửi qua các trung tâm dữ liệu - mỗi bản sao cho mỗi DC.
Mối quan tâm chính với triển khai phân tán theo địa lý của Galera Cluster là độ trễ. Đây là điều bạn luôn phải kiểm tra trước khi khởi chạy môi trường. Tôi có đồng ý với thời gian cam kết không? Tại mọi chứng nhận cam kết phải xảy ra vì vậy các bản ghi phải được gửi và chứng nhận trên tất cả các nút trong cụm, bao gồm cả các nút ở xa. Có thể độ trễ cao sẽ khiến thiết lập không phù hợp với ứng dụng của bạn. Trong trường hợp đó, bạn có thể thấy nhiều cụm Galera được kết nối thông qua bản sao không đồng bộ sẽ phù hợp hơn. Tuy nhiên, đây sẽ là một chủ đề cho một bài đăng blog khác.
Triển khai Cụm Galera được phân phối theo địa lý bằng ClusterControl
Để làm rõ mọi thứ, chúng tôi sẽ chỉ ra ở đây cách triển khai có thể trông như thế nào. Chúng tôi sẽ không sử dụng thiết lập đa DC thực tế, mọi thứ sẽ được triển khai trong phòng thí nghiệm cục bộ. Chúng tôi giả định rằng độ trễ có thể chấp nhận được và toàn bộ thiết lập là khả thi. Điều tuyệt vời về ClusterControl là nó có tính bất khả tri về cơ sở hạ tầng. Nó không quan tâm nếu các nút gần nhau, nằm trong cùng một trung tâm dữ liệu hoặc nếu các nút được phân phối trên nhiều nhà cung cấp đám mây. Miễn là có kết nối SSH từ cá thể ClusterControl đến tất cả các nút, quá trình triển khai trông giống hệt nhau. Đó là lý do tại sao chúng tôi có thể hiển thị nó cho bạn từng bước chỉ bằng cách sử dụng phòng thí nghiệm địa phương.
Cài đặt ClusterControl
Đầu tiên, bạn phải cài đặt ClusterControl. Bạn có thể tải về miễn phí. Sau khi đăng ký, bạn nên truy cập trang có hướng dẫn tải xuống và cài đặt ClusterControl. Nó đơn giản như chạy một tập lệnh shell. Khi bạn đã cài đặt ClusterControl, bạn sẽ thấy một biểu mẫu để tạo người dùng quản trị:
Sau khi điền xong, bạn sẽ thấy màn hình Chào mừng và quyền truy cập đến các trình hướng dẫn triển khai:
Chúng ta sẽ bắt đầu triển khai. Thao tác này sẽ mở trình hướng dẫn triển khai:
Chúng tôi sẽ chọn MySQL Galera. Chúng tôi phải chuyển thông tin chi tiết kết nối SSH - người dùng root hoặc người dùng sudo đều được hỗ trợ. Ở bước tiếp theo, chúng tôi sẽ xác định các máy chủ trong cụm.
Chúng tôi sẽ triển khai ba nút tại một trong các trung tâm dữ liệu. Sau đó, chúng tôi sẽ có thể mở rộng cụm, định cấu hình các nút mới trong các phân đoạn khác nhau. Bây giờ tất cả những gì chúng ta phải làm là nhấp vào “Triển khai” và xem ClusterControl triển khai cụm Galera.
Ba nút đầu tiên của chúng tôi đang hoạt động, bây giờ chúng tôi có thể tiếp tục thêm các nút bổ sung trong các trung tâm dữ liệu khác.
Bạn có thể làm điều đó từ trình đơn hành động, như được hiển thị trên ảnh chụp màn hình ở trên .
Tại đây chúng ta có thể thêm các nút bổ sung, mỗi lần một nút. Điều quan trọng, bạn nên thay đổi phân đoạn Galera thành khác 0 (0 được sử dụng cho ba nút ban đầu).
Sau một thời gian, chúng tôi kết thúc với tất cả chín nút, được phân bổ trên ba phân đoạn.
Bây giờ, chúng ta phải triển khai lớp proxy. Chúng tôi sẽ sử dụng ProxySQL cho điều đó. Bạn có thể triển khai nó trong ClusterControl thông qua Manage -> Load Balancer:
Thao tác này sẽ mở ra trường triển khai:
Đầu tiên, chúng ta phải quyết định nơi triển khai ProxySQL. Chúng tôi sẽ sử dụng các nút Galera hiện có nhưng bạn có thể nhập bất kỳ thứ gì vào trường nên hoàn toàn có thể triển khai ProxySQL trên đầu các nút ứng dụng. Ngoài ra, bạn phải chuyển thông tin xác thực truy cập cho người dùng quản trị và giám sát.
Sau đó, chúng tôi phải chọn một trong những người dùng hiện có trong MySQL hoặc tạo một ngay bây giờ. Chúng tôi cũng muốn đảm bảo rằng ProxySQL được định cấu hình để sử dụng các nút Galera chỉ nằm trong cùng một trung tâm dữ liệu.
Khi bạn có một ProxySQL sẵn sàng trong trung tâm dữ liệu, bạn có thể sử dụng nó làm nguồn cấu hình:
Điều này phải được lặp lại cho mọi máy chủ ứng dụng mà bạn có trong tất cả các trung tâm dữ liệu . Sau đó, ứng dụng phải được cấu hình để kết nối với phiên bản ProxySQL cục bộ, lý tưởng là qua ổ cắm Unix. Điều này đi kèm với hiệu suất tốt nhất và độ trễ thấp nhất.
Sau khi triển khai ProxySQL cuối cùng, môi trường của chúng ta đã sẵn sàng. Các nút ứng dụng kết nối với ProxySQL cục bộ. Mỗi ProxySQL được định cấu hình để hoạt động với các nút Galera trong cùng một trung tâm dữ liệu:
Kết luận
Chúng tôi hy vọng loạt bài gồm hai phần này đã giúp bạn hiểu được điểm mạnh và điểm yếu của các Cụm Galera được phân phối theo địa lý và cách ClusterControl làm cho việc triển khai và quản lý cụm đó rất dễ dàng.