Bản thân các database như mariadb, percona xtradb không có tính năng multi master được tích hợp sẵn bên trong. Các database này sẽ sử dụng một galera replication plugin để sử dụng tính năng multi master do galera cluster cung cấp. Về bản chất, galera replication plugin sử dụng một phiên bản mở rộng của mysql replication api, bản mở rộng này có tên là wsrep api.
Dùng wsrep api, galera cluster sẽ thực hiện được certification based replication, một kỹ thuật cho phép thực hiện multi master trên nhiều node. Một writeset, chính là một transaction cần được replication trên các node. Transaction này sẽ được certificate trên từng node nhận được (qua replication) xem có conflict với bất cứ transaction nào đang có trong queue của node đó không. Nếu có thì replicated writeset này sẽ bị node discard. Nếu không thì replicated writeset này sẽ được applied. Một transaction chỉ xem là commit sau khi đã pass qua bước certificate trên tất cả các node. Điều này đảm bảo transaction đó đã được phân phối trên tất cả các node.
Hướng tiếp cận này gọi là virtual synchronous replication. Thực tế, một transaction sẽ được replicate đến tất cả các node để thực hiện certificate, nhưng sau đó, trong trường hợp pass qua tất cả các certification, quá trình apply writeset trên các node lại bất đồng bộ vì rất nhiều nguyên nhân khác nhau như năng lực xử lý các node khác nhau, do switch context của CPU… Apply writeset (quá trình data thực sự được ghi xuống table) giữa các node bất đồng bộ do đó là hiện tượng tự nhiên.
Lợi ích có được khi sử dụng galera
- Một giải pháp multi master hoàn chỉnh nên cho phép read/write trên node bất kỳ
- Synchronous replication.
- Multi thread slave cho phép apply writeset nhanh hơn
- Không cần failover vì node nào cũng là master rồi.
- Automatic node provisioning: Bản thân hệ database đã tự backup cho nhau. Tuy nhiên, khả năng backup tự nhiên của galera cluster không loại trừ được các sự cố do con người gây ra như xóa nhầm data.
- Hỗ trợ innodb.
- Hoàn toàn trong suốt với application nên application không cần sửa đổi gì
- Không có Single point of failure vì bất cứ node nào trong hệ cluster cũng là master.
Hạn chế
- Không scale up về dung lượng. Một galera cluster có ba node thì cả ba node đó cùng có một data giống hệt nhau. Dung lượng lưu trữ của cả cluster sẽ phụ thuộc vào khả năng lưu trữ trên từng node.
- Không hỗ trợ MyISAM, chuyển đổi một database sử dụng các myisam table sang innodb để sử dụng galera cluster sẽ khó khăn.
- Vẫn có hiện tượng stale data do bất đồng bộ khi apply writeset trên các node.
Yêu cầu bắt buộc
- Chỉ hỗ trợ innodb. Đây là yêu cầu thiết kế cơ sở dữ liệu.
- Yêu cầu các node có cấu hình tương đương nhau và tổng số node phải là lẻ
- binlog_format phải là row. Cũng giống mysql replication, bạn không được thay đổi binlog_format khi hệ thống galera cluster đang chạy vì có thể làm crash toàn bộ cluster. Yêu cầu bắt buộc này thực ra cũng đem lại một hạn chế. Không phải tự dưng, mysql replication khuyến khích người dùng sử dụng mix binlog_format. Một số transaction ví dụ như delete 10000 rows thì replicate 10000 rows xem ra không tốt bằng replicate đúng một statement delete 10000 rows.
- flush privileges command không được replicate
- chỉ hỗ trợ flush tables with read lock
- Với engine MyISAM thì chỉ các DDL command CREATE USER mới được replicate
- Transaction size từ 128K đến tối đa 1G theo mặc định, admin có thể mở rộng giới hạn này.
- Mọi bản ghi phải có primary key (multi column primary key cũng được support), không hỗ trợ delete bản ghi không có primary key, các dòng do không có primary key sẽ có thứ tự khác nhau giữa các node. Đây là yêu cầu cho thiết kế cơ sở dữ liệu.
- Query log phải đổ vào file, không thể đổ vào table được.
Một số đề nghị
- Đồng bộ các node dùng xtrabackup-v2
- Để tránh conflict, sử dụng wsrep_auto_increment_control để galera cluster kiểm soát giá trị auto_increment_increment và auto_increment_offset của mysql.
- Tránh dùng replication filter với galera cluster.
Các chú ý khác
- "WSREP has not yet prepared node for application use", đây là thông báo cho biết cluster đang bị split brain và truy vấn đang được thực hiện trong nhóm thiểu số (‘bad' part, smaller part). Thông báo này để ngăn chặn các thay đổi xảy ra trên smaller part.
- Nếu sau khi bị split brain, trên nhóm đa số (‘good’ part, larger part) có sự thay đổi thì một yêu cầu resync từ nhóm đa số sang nhóm thiểu số sẽ được thực hiện, các node trong nhóm thiểu số sẽ drop client connection khi thực hiện đồng bộ này.
https://mariadb.com/kb/en/mariadb/mariadb-galera-cluster-known-limitations/
https://www.percona.com/doc/percona-xtradb-cluster/5.6/features/multimaster-replication.html
http://galeracluster.com/documentation-webpages/
http://codership.blogspot.com/2009/02/managing-auto-increments-with-multi.html
Không có nhận xét nào:
Đăng nhận xét