[mySQL] Setup and clustering mySQL with MariaDB Galera Cluster

1. Cài đặt MariaDB
MariaDB là một nhánh của MySQL, được thiết kế để quá trình chuyển đổi từ MySQL sang MariaDB không gặp bất cứ trở ngại nào. Với lợi thế trên, cộng với sự hỗ trợ mạnh mẽ từ cộng đồng nguồn mở MariaDB ngày càng trở nên phổ biến. Một điều thú vị rằng MariaDB được phát triển bởi cha đẻ của mySQL - hiện đang được phát triển bởi Oracle. Có rất nhiều tiên đoán rằng trong tương lai, MariaDB sẽ thay thế hoàn toàn mySQL và là database được cài đặt mặc định trong các HĐH Unix.
Việc nâng cấp từ mySQL lên MariaDB khá đơn giản, trước kia bạn cài mysql-server thì giờ cài mariadb-server, ngoài ra không phải làm gì cả, tất cả database giữ nguyên , truy vấn giữ nguyên, câu lệnh giữ nguyên, driver giữ nguyên, thư viện hỗ trợ các ngôn ngữ giữ nguyên, phpmyadmin dùng bình thường.
Trong hướng dẫn này, sẽ tiến hành cài đặt MariaDB version 5.5 trên nền Ubuntu server 12.04 LTS, sử dụng MariaDB-Galera để replication cho MariaDB.
Trước khi tiến hành cài đặt, các bạn nên đọc qua các link dưới đây:
Sự tương thích giữa MariaDB và mySQL
Giới hạn của MariaDB

B1. Truy cập vào trang web sau dể lựa chọn repository phù hợp: https://downloads.mariadb.org/mariadb/repositories/#mirror=uestc
B2. Cài đặt repo manager:
sudo apt-get install python-software-properties
B3. Import GnuPG signing key (example)
 sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db
B4. Chỉnh sửa source.list (example)
sudo add-apt-repository 'deb http://mariadb.biz.net.id//repo/5.5/ubuntu precise main'
B5. Update apt-get
sudo apt-get update
B6. Install MariaDB Galera Server and Galera
sudo apt-get install mariadb-galera-server galera
B7. Kiểm tra thiết lập MariaDB
mysql -u root -p
hiển thị cài đặt thành công:
2. Replication MariaDB Master/Master
Bài viết thực hiện trên 3 nodes CKL-DB001 10.96.180.201:3306, CKL-DB002 10.96.180.201:3306 và CKL-DB003 10.96.180.203
Cần phải đảm bảo rằng 2 server đã phân giải được hostname của nhau.
B1. Thay đổi giá trị bind-address để mariaDB cho phép các request từ remote client trong file /etc/mysql/my.cnf
bind-address=0.0.0.0
B2. Trên cả 3 server, comment dòng sau trong file /etc/mysql/my.cnf
#bind-address = 127.0.0.1
và tạo file /etc/mysql/conf.d/cluster.cnf với nội dung sau
[mysqld]
#mysql settings
binlog_format=ROW
default-storage-engine=innodb
innodb_autoinc_lock_mode=2
query_cache_size=0
query_cache_type=0
bind-address = 0.0.0.0
#galera settings
wsrep_provider=/usr/lib/galera/libgalera_smm.so
wsrep_cluster_name="ckl_db_cluster"
wsrep_cluster_address="gcomm://10.96.180.201, 10.96.180.202, 10.96.180.203"
wsrep_sst_method=rsync
B3. Stop mysql service trên cả 3 servers:
sudo /etc/init.d/mysql stop
B4.  Khởi tạo node trên server CKL-DB001:
sudo /etc/init.d/mysql start --wsrep-new-cluster
Kiểm tra:
MariaDB [(none)]> SELECT VARIABLE_VALUE as "cluster size" FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME="wsrep_cluster_size";
Kết quả:
+--------------+
| cluster size |
+--------------+
| 1            |
+--------------+
1 row in set (0.00 sec)
Okay, như vậy là trong cluster của chúng ta đã có 1 node, tiếp tục thực hiện trên các nodes khác,
B5. Trên server CKL-DB002 và CKL-DB003, lần lượt khởi động mysql service.
sudo /etc/init.d/mysql start
 * Starting MariaDB database server mysqld
   ...done.
 * Checking for corrupt, not cleanly closed and upgrade needing tables.
ERROR 1045 (28000): Access denied for user 'debian-sys-maint'@'localhost' (using password: YES)
Kiểm tra lại như bước 4, kết quả như sau là joint node 2 vào cluster thành công:
+--------------+
| cluster size |
+--------------+
| 3            |
+--------------+
1 row in set (0.00 sec)
B6. Kiểm tra
MariaDB [(none)]> SHOW STATUS LIKE 'wsrep_%';
MariaDB [(none)]> SHOW VARIABLES LIKE 'wsrep_cluster_address';
MariaDB [(none)]> SHOW GLOBAL STATUS LIKE 'wsrep_provider_version';
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'version';
Các lưu ý quan trọng:
- Sau khi tất cả các node bị stop mysql service, chúng ta cần phải tạo lại cluster từ mục 2, B4
- Lỗi ERROR 1045 ở mục 5, B2 là do thông tin user và password của file /etc/mysql/debian.cnf không giống nhau trên các node, copy file trên từ CKL-DB001 và replace cho CKL-DB002 và CKL-DB003, việc không đồng bộ file này cũng dẫn đến tình trạng lỗi khi stop mysql service.
- MariaDB-Galera hỗ trợ clustering trong các môi trường LAN, WAN, Cloud, để replication với các server không thuộc vùng LAN, ngoài các trình tự như trên, chúng ta cần:
+ NAT port 3306 (mariaDB và 4567 (Galera) cho từng server tương ứng:
+ Thêm vào file /etc/mysql/conf.d/cluster.cnf các dòng sau:
wsrep_sst_receive_address= public_ip_server
wsrep_node_address = public_ip_server
Với public_ip_server là IP WAN đã được NAT port cho server cấu hình hiện tại.

Tham khảo:
https://downloads.mariadb.org/mariadb/repositories/#mirror=uestc
https://mariadb.com/kb/en/installing-mariadb-deb-files/#installing-mariadb-galera-cluster-with-apt-get
http://planet.mysql.com/entry/?id=616914