Việc sử dụng cluster sẽ tăng tính sẵn sàng cho hệ thống. Dữ liệu sẽ được đồng bộ giữa tất cả các node trong cluster. Như vậy khi một node có vấn đề thì các node khác vẫn hoạt động.
Có 2 kiểu cấu hình cluster là active-passive và active-active. Với kiểu active-passive thì trên các node passive ta chỉ có thể SELECT dữ liệu mà không thể INSERT. Việc INSERT chỉ thực hiện được ở trên node active. Còn đối với mô hình active-active thì ta có thể thực hiện INSERT và SELECT trên tất cả các node.
Trong bài viết này tôi sẽ cấu hình theo kiểu active-active và cluster gồm có 3 node, đây là mô hình tối thiểu của cluster.
Mô hình
Cài đặt MariaDB trên tất cả các node
Thực hiện add repo
apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8 add-apt-repository 'deb [arch=amd64,i386,ppc64el] http://nyc2.mirrors.digitalocean.com/mariadb/repo/10.1/ubuntu xenial main' apt-get update
Cài đặt Mariadb-server
apt-get install mariadb-server
Cài đặt gói rsync
apt-get install rsync
Gói này có thể đã được cài đặt nhưng sử dụng lệnh trên để chắc chắn gói rsync đã được cài đặt và ở phiên bản mới nhất.
Cấu hình trên node_1
Tạo file /etc/mysql/conf.d/galera.cnf
vi /etc/mysql/conf.d/galera.cnf
Thêm vào file nội dung như sau
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://first_ip,second_ip,third_ip" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name"
Cần sửa những thông tin sau cho phù hợp với mô hình của bạn
- Ở phần
Galera Cluster Configuration
được sử dụng để định nghĩa ra cluster. Ta chỉ ra địa chỉ IP hoặc domain name của tất cả các node trong mụcwsrep_cluster_address
. Bạn cũng có thể thay đối tên của cluster trong mụcwsrep_cluster_name
hoặc không nhưng buộc phải sửa thông tin trong mụcwsrep_cluster_address
. Nếu máy bạn có IP private để giao tiếp giữa các node thì bạn khai báo nó ở đây. - Ở phần
Galera Node Configuration
chỉ ra thông tin của server bạn đang cấu hình. Mụcwsrep_node_address
điền địa chỉ IP của server bạn đang đứng. Mụcwsrep_node_name
bạn khai báo hostname của node bạn đang đứng để phân biệt với các node khác trong file log.
Với mô hình của tôi thì trên node này nội dung của file sẽ như sau:
[mysqld] binlog_format=ROW default-storage-engine=innodb innodb_autoinc_lock_mode=2 bind-address=0.0.0.0 # Galera Provider Configuration wsrep_on=ON wsrep_provider=/usr/lib/galera/libgalera_smm.so # Galera Cluster Configuration wsrep_cluster_name="test_cluster" wsrep_cluster_address="gcomm://10.10.10.164,10.10.10.165,10.10.10.166" # Galera Synchronization Configuration wsrep_sst_method=rsync # Galera Node Configuration wsrep_node_address="10.10.10.164" wsrep_node_name="galera-node1"
Sau khi sửa xong thì copy lại nội dung của file và lưu file.
Cấu hình trên 2 node còn lại
Trên từng node bạn cũng tạo ra file /etc/mysql/conf.d/galera.cnf
vi /etc/mysql/conf.d/galera.cnf
Paste thông tin bạn copy trên file galera.cnf
ở node 1 vào đây và sửa lại các thông tin sau:
# Galera Node Configuration wsrep_node_address="this_node_ip" wsrep_node_name="this_node_name"
Trên node_2
tôi sửa lại như sau:
# Galera Node Configuration wsrep_node_address="10.10.10.165" wsrep_node_name="galera-node2"
Tương tự trên node_3
tôi sửa lại 2 dòng này như sau:
# Galera Node Configuration wsrep_node_address="10.10.10.166" wsrep_node_name="galera-node3"
Mở port trên tất cả các node
Kiểm tra trạng thái của firewall
ufw status
Nếu firewall đang tắt thì bỏ qua bước này. Còn nếu firewall đang được bật bạn có thể tắt nó đi hoặc mở các port cần thiết
Nếu chọn tắt firewall thì dùng lệnh
systemctl stop ufw systemctl disable ufw
Nếu chọn mở port
Galera sử dụng 4 port: 3306
, 4567
, 4568
, 4444
. Để mở ta sử dụng lệnh sau:
ufw allow 3306,4567,4568,4444/tcp ufw allow 4567/udp
Bật cluster
Stop MariaDB trên cả 3 node
Systemctl
không hiển thi kết quả trả về nên bạn không biết đã tắt thành công hay chưa. Để chắc chắn đã stop thành công service MariaDB
ta dùng lệnh sau để kiểm tra:
systemctl status mysql
Nếu bạn thấy kết quả như sau thì service đã được tắt
. . . Active: inactive (dead) since Thu 2019-06-27 08:39:51 +07; 13s ago . . .
Bật node đầu tiên
Để bật node đầu tiên ta chạy lệnh sau. Lưu ý rằng nếu các service MariaDB
vẫn đang chạy trên bất kỳ node nào thì câu lệnh bên dưới đây sẽ bị fail và sẽ không khởi tạo được cluster.
galera_new_cluster
Khi command trên chạy xong ta thực hiện câu lệnh sau để có thể thấy số node này đã được join vào cluster.
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Câu lệnh trả về như sau:
Output +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 1 | +--------------------+-------+
Bật service MariaDB trên 2 node còn lại
Để các node còn lại join vào được cluster ta chỉ cần start MariaDB trên các node đó
systemctl start mysql
Sau khi start service trên 2 node còn lại ta kiểm tra lại trên một node bất kỳ sẽ thấy đã có 3 node join vào cluster
mysql -u root -p -e "SHOW STATUS LIKE 'wsrep_cluster_size'"
Output +--------------------+-------+ | Variable_name | Value | +--------------------+-------+ | wsrep_cluster_size | 3 | +--------------------+-------+
Kiểm tra
Bây giờ dữ liệu trên cả 2 node là như nhau.
Thực hiện tạo user và DB trên node_1
root@galera-node1:~# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 11 Server version: 10.1.40-MariaDB-1~xenial mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]> create database DB_test; Query OK, 1 row affected (0.03 sec) MariaDB [(none)]> grant all privileges on DB_test.* to "NiemDT"@"localhost" identified by "123123"; Query OK, 0 rows affected (0.03 sec) MariaDB [(none)]> use DB_test; Database changed MariaDB [DB_test]> create table bang1 (id int, value varchar(20)); Query OK, 0 rows affected (0.02 sec) MariaDB [DB_test]> insert into bang1 (id, value) values (1, "gia tri 1"); Query OK, 1 row affected (0.01 sec) MariaDB [DB_test]> select * from bang1; +------+-----------+ | id | value | +------+-----------+ | 1 | gia tri 1 | +------+-----------+ 1 row in set (0.00 sec)
Sử dụng user vừa tạo để login trên các node còn lại
root@galera-node3:~# mysql -u NiemDT -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or g. Your MariaDB connection id is 9 Server version: 10.1.40-MariaDB-1~xenial mariadb.org binary distribution Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. MariaDB [(none)]> use DB_test; Reading table information for completion of table and column names You can turn off this feature to get a quicker startup with -A Database changed MariaDB [DB_test]> insert into bang1 (id, value) values (2, "gia trị 2"); Query OK, 1 row affected, 1 warning (0.01 sec) MariaDB [DB_test]> select * from bang1; +------+-----------+ | id | value | +------+-----------+ | 1 | gia tri 1 | | 2 | gia trị 2 | +------+-----------+ 2 rows in set (0.00 sec)
Tổng kết
Đến đây việc cài đặt Galera MariaDB Cluster đã thành công. Trong bài viết nếu có sai sót rất mong sự góp ý của bạn bằng cách để lại comment bên dưới.
Chúc bạn thành công!