ProxySQL là một trình cân bằng tải nổi tiếng trong thế giới MySQL - nó đi kèm với một bộ tính năng tuyệt vời cho phép bạn kiểm soát lưu lượng truy cập của mình và định hình nó theo cách bạn thấy phù hợp. Nó có thể được triển khai theo nhiều cách khác nhau - các nút chuyên dụng, kết hợp với máy chủ ứng dụng, cách tiếp cận silo - tất cả phụ thuộc vào môi trường chính xác và yêu cầu kinh doanh. Thách thức chung là bạn, hầu hết các trường hợp, muốn các nút ProxySQL của mình chứa cùng một cấu hình. Nếu bạn mở rộng cụm của mình và thêm một máy chủ mới vào ProxySQL, bạn muốn máy chủ đó hiển thị trên tất cả các phiên bản ProxySQL, không chỉ trên phiên bản đang hoạt động. Điều này dẫn đến câu hỏi - làm thế nào để đảm bảo rằng bạn giữ cấu hình được đồng bộ trên tất cả các nút ProxySQL?
Bạn có thể cố gắng cập nhật tất cả các nút bằng tay, điều này chắc chắn không hiệu quả. Bạn cũng có thể sử dụng một số loại công cụ điều phối cơ sở hạ tầng như Ansible hoặc Chef để giữ cấu hình trên các nút ở trạng thái đã biết, thực hiện các sửa đổi không trực tiếp trên ProxySQL mà thông qua công cụ bạn sử dụng để tổ chức môi trường của mình.
Nếu bạn tình cờ sử dụng ClusterControl, nó đi kèm với một tập hợp các tính năng cho phép bạn đồng bộ hóa cấu hình giữa các phiên bản ProxySQL nhưng giải pháp này có nhược điểm - đó là một thao tác thủ công, bạn phải nhớ thực thi nó sau khi thay đổi cấu hình. Nếu bạn quên làm điều đó, bạn có thể sẽ rất ngạc nhiên nếu ví dụ:keepalived sẽ chuyển Virtual IP sang phiên bản ProxySQL không được cập nhật.
Không có phương pháp nào trong số đó là đơn giản hoặc đáng tin cậy 100% và tình huống là khi các nút ProxySQL có cấu hình khác nhau và có thể tiềm ẩn nguy hiểm.
May mắn thay, ProxySQL có giải pháp cho vấn đề này - Cụm ProxySQL. Ý tưởng này khá đơn giản - bạn có thể xác định danh sách các phiên bản ProxySQL sẽ nói chuyện với nhau và thông báo cho những người khác về phiên bản của cấu hình mà mỗi cá thể trong số đó chứa. Cấu hình được tạo phiên bản, do đó bất kỳ sửa đổi nào của bất kỳ cài đặt nào trên bất kỳ nút nào cũng sẽ dẫn đến việc tăng phiên bản cấu hình - điều này kích hoạt đồng bộ hóa cấu hình và phiên bản mới của cấu hình được phân phối và áp dụng trên tất cả các nút tạo thành cụm ProxySQL.
Phiên bản gần đây của ClusterControl cho phép bạn thiết lập các cụm ProxySQL một cách dễ dàng. Khi triển khai ProxySQL, bạn nên đánh dấu vào tùy chọn “Use Native Clustering” cho tất cả các nút mà bạn muốn trở thành một phần của cụm.
Sau khi làm được điều đó, bạn đã hoàn thành khá nhiều việc - phần còn lại sẽ diễn ra theo mui xe.
MySQL [(none)]> select * from proxysql_servers;
+------------+------+--------+----------------+
| hostname | port | weight | comment |
+------------+------+--------+----------------+
| 10.0.0.131 | 6032 | 0 | proxysql_group |
| 10.0.0.132 | 6032 | 0 | proxysql_group |
+------------+------+--------+----------------+
2 rows in set (0.001 sec)
Trên cả hai máy chủ, bảng proxysql_servers được đặt đúng với tên máy chủ của các nút tạo thành cụm. Chúng tôi cũng có thể xác minh rằng các thay đổi cấu hình được phổ biến đúng cách trong cụm:
Chúng tôi đã tăng cài đặt Kết nối tối đa trên một trong các nút ProxySQL (10.0 .0.131) và chúng tôi có thể xác minh rằng nút khác (10.0.0.132) sẽ thấy cùng một cấu hình:
Trong trường hợp cần gỡ lỗi quy trình, chúng tôi luôn có thể tìm nhật ký ProxySQL (thường nằm trong /var/lib/proxysql/proxysql.log), nơi chúng ta sẽ thấy thông tin như sau:
2020-11-26 13:40:47 [INFO] Cluster: detected a new checksum for mysql_servers from peer 10.0.0.131:6032, version 11, epoch 1606398059, checksum 0x441378E48BB01C61 . Not syncing yet ...
2020-11-26 13:40:49 [INFO] Cluster: detected a peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060, diff_check 3. Own version: 9, epoch: 1606398022. Proceeding with remote sync
2020-11-26 13:40:50 [INFO] Cluster: detected a peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060, diff_check 4. Own version: 9, epoch: 1606398022. Proceeding with remote sync
2020-11-26 13:40:50 [INFO] Cluster: detected peer 10.0.0.131:6032 with mysql_servers version 12, epoch 1606398060
2020-11-26 13:40:50 [INFO] Cluster: Fetching MySQL Servers from peer 10.0.0.131:6032 started. Expected checksum 0x441378E48BB01C61
2020-11-26 13:40:50 [INFO] Cluster: Fetching MySQL Servers from peer 10.0.0.131:6032 completed
2020-11-26 13:40:50 [INFO] Cluster: Fetching checksum for MySQL Servers from peer 10.0.0.131:6032 before proceessing
2020-11-26 13:40:50 [INFO] Cluster: Fetching checksum for MySQL Servers from peer 10.0.0.131:6032 successful. Checksum: 0x441378E48BB01C61
2020-11-26 13:40:50 [INFO] Cluster: Writing mysql_servers table
2020-11-26 13:40:50 [INFO] Cluster: Writing mysql_replication_hostgroups table
2020-11-26 13:40:50 [INFO] Cluster: Loading to runtime MySQL Servers from peer 10.0.0.131:6032
Đây là nhật ký từ 10.0.0.132, nơi chúng ta có thể thấy rõ rằng thay đổi cấu hình cho bảng mysql_servers đã được phát hiện trên 10.0.0.131 và sau đó nó được đồng bộ hóa và áp dụng vào 10.0.0.132, làm cho nó đồng bộ với nút khác trong cụm.
Như bạn có thể thấy, phân cụm ProxySQL là một cách dễ dàng nhưng hiệu quả để đảm bảo cấu hình của nó luôn đồng bộ và giúp đáng kể để sử dụng các triển khai ProxySQL lớn hơn. Hãy cho chúng tôi biết trong phần nhận xét về trải nghiệm của bạn với phân nhóm ProxySQL.