Vừa rồi tham dự Infinity Tech lần thứ 4, mình có giới thiệu về Galera Cluster. Đây là một trong những hệ thống Multimaster Cluster dựa trên cơ chế đồng bộ hóa, cách cài đặt và sử dụng đơn giản, mang tính trong suốt và có độ sẵn sàng cao.

Multi-master

Galera Cluster tạo ra ưu thế khi có thể đọc ghi ở mọi node, vì lợi thế lớn đó sẽ mở ra thêm nhiều phương pháp hay để tối ưu hệ thống của chúng ta, đồng thời tiết kiệm chi phí hơn. Bài viết này sẽ đề cập đến những phương pháp đó.

1. Load Balancing

Sử dụng Load Balancing (LB) là một trong những cách hữu hiệu để giảm tải cho các server và tận dụng được tối đa nguồn tài nguyên của hệ thống. Nhờ cơ chế đọc ghi thoải mái (mọi thứ đã được tự động đồng bộ hóa do Galera xử lý), chúng ta đơn giản là thêm LB nào đó ở giữa, có 2 cách:

Cài đặt riêng một LB server

Chúng ta sẽ cài LB ở một server riêng, cài đặt các DB Proxy để monitor và phân tải đều cho từng DB node, việc này giúp giao tiếp giữa application vốn với nhiều DB thì chỉ cần nhìn như một DB, rất dễ sử dụng.

LB on DB node

Các DB Proxy nổi tiếng đó là: ProxySQL, Maria MaxScale,... đều có những tính năng thêm như Query Caching, Supports failover,... để làm tăng hiệu năng của hệ thống. Tuy nhiên khi sử dụng một LB ở giữa cũng có thể gặp vấn đề về bottle neck (nghẽn cổ chai) khi lượng request đổ về LB quá lớn mà không xử lý kịp.

LB trên từng Application server

Mỗi Application server sẽ cài LB lên đó luôn, điều này sẽ tránh hiện tượng nghẽn cổ chai, tuy nhiên cũng cần chú về việc conflict giữa các LB, giao tiếp giữa các LB (nếu có) cần phải hiệu quả thì mới đạt được sự tối ưu cho hệ thống.

LB on App server

2. Sử dụng với WAN

Để đảm bảo hệ thống ít bị downtime, một số ứng dụng lớn sẽ trải đều DB ở các Datacenter khác nhau, có thể các Datacenter ấy còn ở các quốc gia khác nhau. Vì khoảng cách địa lý khác nhau nên sẽ gặp các vấn đề như là high latency.

Để khắc phục vấn đề này chúng ta có thể mix giữa Galera Replication và MySQL Replication!

Galera mix MySQL Replication

Do MySQL Replication sử dụng cơ chế async, nên với những dữ liệu không nhất thiết nhất quán tại mọi thời điểm thì ta có thể tận dụng được tốc độ, ngoài ra việc ở cùng một quốc gia thì tốc độ sync sang node còn lại cũng khá tốt.

Về phía Galera sẽ đảm bảo toàn vẹn dữ liệu ở các Master node với latency thấp, tuy nhiên việc thiết lập mix giữa 2 cái này sẽ hơi bị đau đầu ^^.

3. Tự động commit lại khi gặp lỗi

Đối với các dữ liệu được thay đổi thường xuyên bởi nhiều người sử dụng khác nhau sẽ dễ dẫn đến việc conflict, deadlock,... và bản thân Galera đã giải quyết điều đó bằng cách loại bỏ những xử lý gây ra hiện tượng đó. Mặc dù vậy việc này cũng đồng nghĩa với việc xảy ra hiện tượng dữ liệu bị loại bỏ sẽ không được ghi đầy đủ.

Chúng ta có thể thiết lập Galera kích hoạt MySQL tự động commit lại transaction cũ đó với cấu hình wsrep_retry_autocommit = n, trong đó n là số lần thử commit lại. Điều này sẽ mang lại trải nghiệm tốt hơn cho người dùng sản phẩm.

Retry Autocommit

Slide

Tham khảo