MariaDB [LAB 1] Configure cluster with MariaDB on CentOS 8

diephan

Moderator
[LAB 1] Active/Passive MySQL High Availability Pacemaker Cluster with MariaDB on CentOS 8

Mô hình thực hiện


3.jpg


Chúng ta sẽ xây dựng một cụm MariaDB HA Active / Passive hai node bằng cách sử dụng Pacemaker và Corosync.

Pacemaker: chịu trách nhiệm cho tất cả các hoạt động liên quan đến cụm, chẳng hạn như giám sát thành viên nhóm, quản lý các dịch vụ và tài nguyên
Corosync: là khung được Pacemaker sử dụng để xử lý giao tiếp giữa các nút cụm.
Dưới đây là một số yêu cầu và giới hạn đối với Pacemaker

Số lượng node:
  • Tối đa 16 node trên mỗi cụm
  • Tối thiểu 3 node
  • Cluster 2 node có thể cấu hình được nhưng không được khuyến khích

Node 1: 10.123.10.41
Node 2: 10.123.10.42
Virtual IP: 10.123.10.43
Cluster Name: MySQL_Cluster

1. Cấu hình replication MariaDB Master/Master

Cài đặt MariaDB

yum install -y mariadb-server mariadb
Khởi động dịch vụ MariaDB trên mỗi node
systemctl start mariadb
Chạy cài đặt an toàn cho mariadb
mysql_secure_installation
Cấu hình tường lửa mở port 3306
firewall-cmd --add-port=3306/tcp --zone=public --permanent
firewall-cmd --reload
Bật Binary Logging

Chúng ta cần cấu hình điều chỉnh cơ sở dữ liệu /etc/my.cnf cho Node 1 và Node 2 để kích hoạt binary logging (binary logging có thể được coi là log của tất cả các câu lệnh SQL mà nó nhận được)
Trên Node 1:


[mysqld]
server-id=1
log-bin=mysql-bin
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
Trên Node 2:

[mysqld]
server-id=2
log-bin=mysql-bin
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
Các thay đổi đối với my.cnf yêu cầu khởi động lại cơ sở dữ liệu để có hiệu lực
systemctl restart mariadb
Thiết lập quyền replication
Đầu tiên, trên cơ sở dữ liệu Node 1 , hãy cho phép cơ sở dữ liệu Node 2 sẽ có quyền truy cập:
[root@Master ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.3.17-MariaDB-log MariaDB Server

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)]>GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'P@ssword100';
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]>show master status;
Annotation 2020-09-08 145739.jpg

Tương tự trên Node 2
[root@Master ~]# mysql -u root -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 10
Server version: 10.3.17-MariaDB-log MariaDB Server

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)]>GRANT REPLICATION SLAVE ON *.* TO 'root'@'%' IDENTIFIED BY 'P@ssword100';
MariaDB [(none)]>FLUSH PRIVILEGES;
MariaDB [(none)]>FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]>show master status;
Annotation 2020-09-08 145739.jpg


Cấu hình Slave database Node 2 đến Node 1
Bây giờ chúng ta đã sẵn sàng hướng dẫn cơ sở dữ liệu trên Node 2 sao chép cơ sở dữ liệu trên Node 1. Hãy cho cơ sở dữ liệu Node 2 biết ai là master của nó bằng lệnh SQL sau.
Chú ý master_log_file và master_log_pos phải trùng với thông tin đã show trên Node 1 ở bước trên.
MariaDB [(none)]>change master to master_host='10.123.10.41',master_user='root',master_password='P@ssword100',master_log_file='mariadb-bin.000028',master_log_pos=342;
MariaDB [(none)]>start slave;
MariaDB [(none)]>show slave status\G;
Cấu hình Slave database Node 1 đến Node 2
Tương tự như trên master_log_file và master_log_pos phải trùng với thông tin đã show trên Node 2.
MariaDB [(none)]>change master to master_host='10.123.10.41',master_user='root',master_password='P@ssword100',master_log_file='mariadb-bin.000028',master_log_pos=342;
MariaDB [(none)]>start slave;
MariaDB [(none)]>show slave status\G;
Khi show slave status trên cả 2 Node thấy trạng thái
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

và không xuất hiện lỗi gì tức là giữa 2 Node đã có thể đồng bộ database với nhau.
Nếu sau khi reboot mariaDB không khởi động được thêm d /run/mysql 0755 mysql mysql vào mariadb.conf:
nano /usr/lib/tmpfiles.d/mariadb.conf
Annotation 2020-09-08 162329.jpg

2. Cài đặt và cấu hình Pacemaker + Corosync
Vô hiệu hóa MariaDB vì nó sẽ được quản lý bởi pacemaker:
systemctl stop mariadb
systemctl disable mariadb
Đặt hostname cho 2 Node:
Node 1:
hostnamectl set-hostname DB01
Node 2:
hostnamectl set-hostname DB02
Chỉnh sửa file host trên cả 2 node nano /etc/hosts
10.123.10.41 DB01
10.123.10.42 DB02
Cài đặt pacemaker+ corosync trên cả 2 node
dnf config-manager --set-enable HighAvailability
yum install pacemaker pcs -y
Corosync sẽ được cài đặt kèm theo với câu lệnh trên như một phần mềm được phụ thuộc bởi pacemaker. Đồng thời, có một người dùng mới là hacluster sẽ được tạo ra và gán vào group hacluster. User này đã bị vô hiệu hóa chức năng đăng nhập từ xa, nhiệm vụ của user này để đồng bộ cấu hình và khởi động các dịch vụ giữa các node với nhau.

Khởi động pcs deamon và cho chạy cùng hệ thống
systemctl start pcsd.service
systemctl enable pcsd.service
Kiểm tra lại trạng thái của pacemaker bằng lệnh
systemctl status pcsd
Thống nhất password cho hacluster trên cả 2 node
hacluster passwd
Bật tường lửa
firewall-cmd --permanent --add-service=high-availability
firewall-cmd --add-service=high-availability
firewall-cmd --reload
Xác thực giữa 2 node (thực hiện trên 1 trong 2 node)
pcs host auth DB01 DB02
Annotation 2020-09-08 152530.jpg

Đặt tên cho cluster là MySQL_cluster
pcs cluster setup --start MySQL_cluster DB01 DB02
Khởi động cluster (thực hiện trên 1 node)
pcs cluster start --all
pcs cluster enable --all
Đảm bảo Pacemaker và Corosync được khởi động cùng hệ thống (thực hiện trên 2 node)
systemctl enable corosync.service
systemctl enable pacemaker.service
Vô hiệu hóa STONITH & QUORUM
pcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
Thiết lập Virtual IP
pcs resource create Cluster_IP ocf:heartbeat:IPaddr2 ip=10.123.10.43 cidr_netmask=24 op monitor interval=30s
Trong đó:
  • ocf:heartbeat:IPaddr2 là resource của virtal ip
  • op monitor interval=30s : cứ mỗi 30s thì server sẽ kiểm tra dịch vụ 1 lần
  • ip=10.123.10.43: là ip của virtual ip (cùng subnet với node 1 và node 2)
  • Cluster_IP : là tên đặt cho virtual ip

Vào trình duyệt truy cập vào trang quản lí của pacemaker với username là haclusterpassword đã đặt ở bước trên
Ở tab manager cluster chọn Add exiting và điền vào name của node 1 hoặc node 2:

17-2.jpg


Cluster MySQL_cluster đã tạo ở bước trên sẽ hiện ra

18.jpg


Ta có thể thêm resource vào cluster MySQL_cluster bằng cách nhấp vào MySQL_cluster -> Resources ->Add

20.jpg


Tạo resource mysql với tên (resource ID) là mysql như sau

21.jpg


Kết quả:

Annotation 2020-09-08 160154.jpg


Cấu hình để thiết lập các resource hoạt động trên cùng 1 máy trong cụm cluster và chế độ khởi động của resource (khởi động ClusterIP rồi mới khởi động mysql) như sau:

2020-08-30 17_42_11-115.73.211.189_177 - Remote Desktop Connection.jpg


hoặc sử dụng câu lệnh
pcs constraint colocation add mysql with master ClusterIP infinity
pcs contraint order ClusterIP then mysql
Sử dụng phần mềm Navicat (dowload) để kết nối với mariadb
Test các trường hợp

  • Node 1 down
  • Node 2 down
 

Attachments

Last edited by a moderator:

redhat

Member
Hi @diephan

Có thể bổ sung thêm 1 bài lý thuyết nói chi tiết về cơ chế hoạt động HA MariaDB trên Linux không ah?
  • Các mô hình HA MariaDB
  • PacemakerCorosync hoạt động ra sao

Chỗ này hình như bị ngược
  • Tối thiểu 3 node ==> Tối thiểu 2 node nhưng không được recommend
  • Cluster 2 node có thể cấu hình được nhưng không được khuyến khích ==> recommend triển khai 3 node
==> nguyên nhân vì sao recommend là 3 node và triển khai 2 node thì gặp vấn đề gì?
 
Top