diephan
Moderator
[LAB 1] Active/Passive MySQL High Availability Pacemaker Cluster with MariaDB on CentOS 8
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
Mô hình thực hiện

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.
1. Cấu hình replication MariaDB Master/Master
Cài đặt MariaDB
Khởi động dịch vụ MariaDB trên mỗi nodeyum install -y mariadb-server mariadb
Chạy cài đặt an toàn cho mariadbsystemctl start mariadb
Cấu hình tường lửa mở port 3306mysql_secure_installation
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ựcThiết lập quyền replicationsystemctl restart mariadb
Đầ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;

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;

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

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:
Đặt hostname cho 2 Node:systemctl stop mariadb
systemctl disable mariadb
Node 1:
Node 2:hostnamectl set-hostname DB01
hostnamectl set-hostname DB02
Chỉnh sửa file host trên cả 2 node
nano /etc/hosts
Cài đặt pacemaker+ corosync trên cả 2 node10.123.10.41 DB01
10.123.10.42 DB02
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.dnf config-manager --set-enable HighAvailability
yum install pacemaker pcs -y
Khởi động pcs deamon và cho chạy cùng hệ thống
Kiểm tra lại trạng thái của pacemaker bằng lệnhsystemctl start pcsd.service
systemctl enable pcsd.service
Thống nhất password cho hacluster trên cả 2 nodesystemctl status pcsd
Bật tường lửahacluster passwd
Xác thực giữa 2 node (thực hiện trên 1 trong 2 node)firewall-cmd --permanent --add-service=high-availability
firewall-cmd --add-service=high-availability
firewall-cmd --reload
pcs host auth DB01 DB02

Đặt tên cho cluster là MySQL_cluster
Khởi động cluster (thực hiện trên 1 node)pcs cluster setup --start MySQL_cluster DB01 DB02
Đảm bảo Pacemaker và Corosync được khởi động cùng hệ thống (thực hiện trên 2 node)pcs cluster start --all
pcs cluster enable --all
Vô hiệu hóa STONITH & QUORUMsystemctl enable corosync.service
systemctl enable pacemaker.service
Thiết lập Virtual IPpcs property set stonith-enabled=false
pcs property set no-quorum-policy=ignore
Trong đó:pcs resource create Cluster_IP ocf:heartbeat:IPaddr2 ip=10.123.10.43 cidr_netmask=24 op monitor interval=30s
- 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à hacluster và password đã đặ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:

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

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

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

Kết quả:

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:

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
Đính kèm
Sửa lần cuối bởi điều hành viên:
Bài viết liên quan