Cách thiết lập MariaDB Master-Master Replication trên Debian 11

theanh

Administrator
Nhân viên
Hướng dẫn này sẽ hướng dẫn cách thiết lập MariaDB Master-Master Replication trên Máy chủ Debian 11. Ngoài ra, chúng tôi sẽ hướng dẫn cách đồng bộ hóa thời gian bằng Chrony giữa các máy chủ MariaDB.

Điều kiện tiên quyết​

Để hoàn thành hướng dẫn này, bạn sẽ cần các yêu cầu sau:
  • Hai hoặc nhiều Máy chủ Debian 11. Bản trình diễn này sử dụng hai máy chủ Debian.
  • Người dùng không phải root có quyền root/quản trị viên.

Thiết lập tệp fqdn và /etc/hosts​

Để thiết lập MariaDB Master-Master giữa nhiều máy chủ, bạn sẽ cần đảm bảo mỗi tên máy chủ hệ thống được phân giải thành địa chỉ IP chính xác. Để cấu hình, bạn cần thiết lập fqdn và tệp /etc/hosts trên mỗi máy chủ.

Trong phần trình diễn này, chúng tôi sẽ sử dụng hai máy chủ Debian bên dưới:
Mã:
Địa chỉ IP Tên máy chủ FQDN
---------------------------------------------------
192.168.5.10 master1 master1.localdomain.io
192.168.5.11 master2 master2.localdomain.io
Để thiết lập đúng fqdn (Tên miền đủ điều kiện), hãy chạy lệnh hostnamectl bên dưới.

Thiết lập fqdn cho máy chủ "master1".
Mã:
sudo hostnamectl set-hostname master1.localdomain.io
Thiết lập fqdn cho máy chủ "master2".
Mã:
sudo hostnamectl set-hostname master2.localdomain.io
Tiếp theo, chỉnh sửa tệp /etc/hosts trên mỗi máy chủ bằng lệnh sau.
Mã:
sudo nano /etc/hosts
Thêm cấu hình sau vào tệp.
Mã:
192.168.5.10 master1.localdomain.io master1
192.168.5.11 master2.localdomain.io master2
Lưu và đóng tệp khi bạn hoàn tất.

Cuối cùng, hãy chạy Lệnh "ping" bên dưới để kiểm tra và xác minh tệp fqdn và /etc/hosts.

Bây giờ bạn sẽ thấy tên máy chủ "master1" được trỏ đến fqdn "master1.localdomain.io" có địa chỉ IP là "192.168.5.10". Và tên máy chủ "master2" sẽ được trỏ đến fqdn "master2.localdomain.io" có địa chỉ IP là "192.168.5.11".
Mã:
ping master1
ping master2

Đồng bộ hóa thời gian bằng Chrony​

Đồng bộ hóa thời gian cho triển khai MariaDB Master-Master Replication là rất quan trọng. Và để đồng bộ thời gian giữa các máy chủ, bạn sẽ cần thiết lập Chrony làm máy khách NTP trên mỗi máy chủ MariaDB.

Để cài đặt gói Chrony, hãy chạy lệnh "apt install" sau. Nhập Y để xác nhận cài đặt và nhấn ENTER, quá trình cài đặt sẽ bắt đầu.
Mã:
sudo apt install chrony


Sau khi cài đặt hoàn tất, hãy chạy lệnh "systemctl" bên dưới để bắt đầu và kích hoạt dịch vụ Chrony.
Mã:
sudo systemctl start chrony
sudo systemctl enable chrony
Bây giờ hãy kiểm tra và xác minh dịch vụ Chrony bằng lệnh sau. Và bạn sẽ thấy dịch vụ Chrony đang chạy. Ngoài ra, bạn sẽ thấy dịch vụ Chrony được "bật", nghĩa là dịch vụ này sẽ tự động chạy khi khởi động hệ thống.
Mã:
sudo systemctl status chronyd


Tiếp theo, chạy lệnh "timedatectl" bên dưới để điều chỉnh thời gian hệ thống của bạn theo múi giờ cụ thể và cho phép sử dụng dịch vụ NTP Chrony.
Mã:
sudo timedatectl set-timezone Europe/Stockholm --adjust-system-clock
sudo timedatectl set-ntp yes
Cuối cùng, chạy lệnh "timedatectl" bên dưới để kiểm tra và xác minh cài đặt hiện tại của đồng hồ và thời gian hệ thống của bạn. Đảm bảo thời gian được đồng bộ hóa giữa tất cả các máy chủ MariaDB.
Mã:
timedatectl

Cài đặt máy chủ MariaDB​

Kho lưu trữ Debian mặc định cung cấp gói máy chủ MariaDB. Nhưng đối với bản demo này, chúng tôi sẽ cài đặt máy chủ MariaDB từ kho lưu trữ MariaDB chính thức.

Trước khi cài đặt máy chủ MariaDB, hãy chạy lệnh "apt install" bên dưới để cài đặt một số gói phụ thuộc cơ bản. Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục.
Mã:
sudo apt install gnupg2 apt-transport-https software-properties-common


Tiếp theo, hãy chạy lệnh sau để nhập khóa GPG cho kho lưu trữ MariaDB. Dấu vân tay khóa đầy đủ là "1993 69E5 404B D5FC 7D2F E43B CBCB 082A 1BB9 43DB".
Mã:
sudo apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xF1656F24C74CD1D8
Bây giờ hãy chạy lệnh sau để thêm kho lưu trữ MariaDB cho máy chủ Debian 11. Sau đó, hãy cập nhật và làm mới chỉ mục gói trên máy chủ của bạn.
Mã:
sudo add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.8.3/debian bullseye main'
sudo apt update


Để cài đặt gói "mariadb-server", hãy chạy lệnh "apt install" bên dưới. Nhập Y để xác nhận và nhấn ENTER, quá trình cài đặt sẽ bắt đầu.
Mã:
sudo apt install mariadb-server


Trên hệ thống Debian, dịch vụ MariaDB sẽ được khởi động và kích hoạt tự động. Chạy lệnh "systemctl" sau đây để kiểm tra và xác minh dịch vụ MariaDB.

Bạn sẽ thấy dịch vụ MariaDB là "đã bật", nghĩa là dịch vụ này sẽ tự động chạy khi khởi động hệ thống. Và trạng thái hiện tại của dịch vụ MariaDB là "đang chạy".
Mã:
sudo systemctl is-enabled mariadb
sudo systemctl status mariadb

Thiết lập tường lửa UFW​

Bạn nên sử dụng tường lửa giữa tất cả các máy chủ MariaDB của mình. Điều này sẽ đảm bảo rằng chỉ những địa chỉ IP hoặc mạng được phép mới có thể truy cập và tiếp cận các cổng dịch vụ MariaDB. Và trong bản demo này, chúng ta sẽ sử dụng tường lửa UFW.

Chạy lệnh "apt install" bên dưới để cài đặt gói "ufw". Nhập Y để xác nhận cài đặt và nhấn ENTER để tiếp tục.
Mã:
sudo apt install ufw
Sau khi cài đặt hoàn tất, hãy chạy lệnh "ufw" bên dưới để thêm hồ sơ ứng dụng "OpenSSH". Sau đó, hãy chạy và bật dịch vụ tường lửa UFW.

Bạn sẽ được nhắc xác nhận và bật tường lửa UFW, hãy nhập "y" và nhấn ENTER. Và tường lửa UFW đã hoạt động.
Mã:
sudo ufw allow "OpenSSH"
sudo ufw enable
Tiếp theo, hãy mở một số cổng để triển khai MariaDB Master-Master Replication. Một số cổng TCP để triển khai MariaDB Replication là "3306", "4567", "4568" và "4444".

Trong ví dụ này, chỉ các mạng "192.168.5.0/24" mới được phép truy cập vào các cổng TCP của máy chủ MariaDB.

Đối với máy chủ "master1" có địa chỉ IP "192.168.5.10", hãy chạy các lệnh "ufw" sau.
Mã:
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 port 3306 proto tcp
sudo ufw allow from 192.168.5.0/24 to 192.168.5.10 cổng 4567 giao thức tcp
sudo ufw cho phép từ 192.168.5.0/24 đến 192.168.5.10 cổng 4568 giao thức tcp
sudo ufw cho phép từ 192.168.5.0/24 đến 192.168.5.10 cổng 4444 giao thức tcp
Đối với máy chủ "master2" có địa chỉ IP "192.168.5.11", hãy chạy các lệnh "ufw" sau.
Mã:
sudo ufw cho phép từ 192.168.5.0/24 đến 192.168.5.11 cổng 3306 giao thức tcp
sudo ufw cho phép từ 192.168.5.0/24 đến 192.168.5.11 cổng 4567 proto tcp
sudo ufw allow từ 192.168.5.0/24 đến 192.168.5.11 cổng 4568 proto tcp
sudo ufw allow từ 192.168.5.0/24 đến 192.168.5.11 cổng 4444 proto tcp
Cuối cùng, hãy kiểm tra và xác minh trạng thái của tường lửa UFW với tất cả các quy tắc đã bật bằng lệnh bên dưới. Bạn sẽ thấy hồ sơ ứng dụng "OpenSSH" với tất cả các cổng Sao chép MariaDB "3306", "4567", "4568" và "4444" có sẵn trên tường lửa UFW.
Mã:
sudo ufw status

Thiết lập Máy chủ MariaDB master1​

Bạn đã hoàn tất cấu hình cơ bản của máy chủ Debian để triển khai Sao chép MariaDB Master-Master. Bây giờ, chúng ta hãy bắt đầu cấu hình máy chủ MariaDB.

Đầu tiên, bạn sẽ thiết lập máy chủ MariaDB trên máy chủ "master1". Đăng nhập vào shell máy chủ "master1".

Chạy lệnh "systemctl" bên dưới để dừng dịch vụ MariaDB. Điều này là cần thiết trước khi bạn thiết lập máy chủ MariaDB.
Mã:
sudo systemctl stop mariadb
Bây giờ hãy chỉnh sửa tệp cấu hình máy chủ MariaDB "/etc/mysql/mariadb.conf.d/50-server.cnf" bằng lệnh sau.
Mã:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Thay đổi "listen-address" mặc định thành địa chỉ IP nội bộ. Trong ví dụ này, máy chủ "master1" có địa chỉ IP là "192.168.5.10". Tiếp theo, hãy bật "binary_log" cho máy chủ MariaDB, điều này cho phép bạn thiết lập sao chép trên máy chủ MariaDB. Hãy đảm bảo đặt cấu hình sau vào tùy chọn "[mysqld]".
Mã:
[mysqld]
bind-address = 192.168.5.10

server-id = 1
report_host = master1

log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index

relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, chạy lệnh "systemctl" bên dưới để khởi động dịch vụ MariaDB và áp dụng các thay đổi mới. Sau đó, kiểm tra và xác minh địa chỉ IP nào mà MariaDB đang chạy. Bạn sẽ thấy dịch vụ MariaDB hiện đang chạy trên địa chỉ IP nội bộ "192.168.5.10".
Mã:
sudo systemctl start mariadb
ss -plnt


Bây giờ bạn sẽ cần tạo một người dùng MariaDB mới sẽ được sử dụng để sao chép dữ liệu giữa các máy chủ MariaDB. Đăng nhập vào shell MariaDB với tư cách là "root" bằng lệnh "mysql" bên dưới.
Mã:
sudo mysql -u root -p
Chạy các truy vấn sau để tạo người dùng MariaDB mới và mật khẩu "replusr". Sau đó, cấp quyền đúng cho người dùng.
Mã:
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;


Tiếp theo, chạy truy vấn sau để kiểm tra nhật ký nhị phân hiện tại và vị trí chính xác của nó. Trong ví dụ này, tệp nhật ký nhị phân cho máy chủ MariaDB là "mariadb-bin.000001" với vị trí "773". Các đầu ra này sẽ được sử dụng ở giai đoạn tiếp theo để thiết lập máy chủ "master2".
Mã:
HIỂN THỊ TRẠNG THÁI MASTER;


Nhập "quit" để thoát khỏi shell MariaDB.

Thiết lập máy chủ MariaDB master2​

Bây giờ hãy chuyển đến máy chủ "master2" và bắt đầu cấu hình máy chủ MariaDB. Cấu hình cho MariaDB Master-Master Replication không khác biệt nhiều đối với tất cả các máy chủ MariaDB.

Chạy lệnh sau để dừng dịch vụ MariaDB.
Mã:
sudo systemctl stop mariadb
Chỉnh sửa tệp cấu hình MariaDB "/etc/mysql/mariadb.conf.d/50-server.cnf" bằng lệnh sau.
Mã:
sudo nano /etc/mysql/mariadb.conf.d/50-server.cnf
Thay đổi "bind-address" thành địa chỉ IP cục bộ của máy chủ "master2". Sau đó, bật nhật ký nhị phân trên máy chủ MariaDB "master2" để bật tính năng sao chép. Hãy chắc chắn thêm cấu hình sau vào tùy chọn "[mysqld]".
Mã:
[mysqld]
bind-address = 192.168.5.11

server-id = 2
report_host = master2

log_bin = /var/log/mysql/mariadb-bin
log_bin_index = /var/log/mysql/mariadb-bin.index

relay_log = /var/log/mysql/relay-bin
relay_log_index = /var/log/mysql/relay-bin.index
Lưu và đóng tệp khi bạn hoàn tất.

Tiếp theo, khởi động dịch vụ MariaDB để áp dụng các thay đổi mới. Sau đó, kiểm tra và xác minh địa chỉ IP hiện tại mà máy chủ MariaDB đang chạy. Nếu cấu hình của bạn đúng, bạn sẽ thấy máy chủ MariaDB không chạy trên địa chỉ IP nội bộ của máy chủ "master2", là "192.168.5.11".
Mã:
sudo systemctl start mariadb
ss -plnt


Sau khi dịch vụ MariaDB chạy, hãy chạy lệnh sau để đăng nhập vào shell MariaDB với tư cách là người dùng "root".
Mã:
sudo mysql -u root -p
Chạy các truy vấn sau để tạo người dùng MariaDB mới sẽ được sử dụng để sao chép dữ liệu giữa tất cả các máy chủ MariaDB. Người dùng này phải khớp với người dùng mà bạn vừa tạo trên máy chủ "master1".
Mã:
CREATE USER 'replusr'@'%' IDENTIFIED BY 'replusr';
GRANT REPLICATION SLAVE ON *.* TO 'replusr'@'%';
FLUSH PRIVILEGES;


Sau đó, bạn sẽ cần thực hiện các thay đổi trên máy chủ MariaDB "master2" và xác định nút "Master" bằng cách sử dụng cấu hình chi tiết của máy chủ MariaDB "master1".

Chạy các truy vấn sau để dừng slave. Sau đó, thêm thông tin chi tiết về máy chủ MariaDB "master1". Trong ví dụ này, máy chủ MariaDB "master1" sử dụng tên máy chủ "master1", tên người dùng và mật khẩu để sao chép dữ liệu là "replusr" và cuối cùng là tệp binlog là "mariadb-bin.000001" với vị trí "773".
Mã:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master1', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;


Bây giờ hãy khởi động lại slave bằng truy vấn sau. Sau đó, hãy kiểm tra và xác minh trạng thái slave trên máy chủ "master2". Nếu bạn nhận được kết quả như "Slave_IO_Running: Yes" và "Slave_SQL_Running: Yes", điều đó có nghĩa là bản sao MariaDB đang hoạt động và chạy. Ngoài ra, bạn có thể thấy tệp nhật ký nhị phân trên máy chủ "master2" là "mariadb-bin.000001" với vị trí "773". phải giống như trên máy chủ "master1". Ngoài ra, bạn có thể thấy giá trị "Master_Host" của MariaDB là "master1".
Mã:
START SLAVE;
SHOW SLAVE STATUS\G


Bạn cũng có thể xác minh tệp nhật ký nhị phân chính và vị trí trên máy chủ "master2" bằng truy vấn sau. Và bạn sẽ nhận được cùng một đầu ra như tệp nhật ký nhị phân "mariadb-bin.000001" với vị trí "773" như trên máy chủ "master1".
Mã:
HIỂN THỊ TRẠNG THÁI MASTER;

Bắt đầu sao chép Master-Master trên máy chủ MariaDB master1​

Vì hướng dẫn này là để thiết lập sao chép MariaDB master-master, nên bạn cũng cần thêm và xác định cấu hình chi tiết "master2" cho máy chủ "master1".

Quay lại máy chủ "master1" và đăng nhập vào shell MariaDB bằng lệnh "mysql" bên dưới.
Mã:
sudo mysql -u root -p
Dừng slave bằng lệnh sau. Sau đó, thêm thông tin chi tiết về máy chủ "master2", bao gồm tên máy chủ "master2", người dùng và mật khẩu MariaDB để sao chép, tệp nhật ký nhị phân và vị trí.
Mã:
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='master2', MASTER_USER='replusr', MASTER_PASSWORD='replusr', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=773;


Bây giờ hãy khởi động lại slave bằng lệnh bên dưới. Sau đó, kiểm tra và xác minh slave trên máy chủ "master1". Và bạn sẽ thấy đầu ra như "Slave_IO_Running: Yes" và "Slave_SQL_Running: Yes", điều này có nghĩa là bản sao MariaDB đang hoạt động và chạy trên máy chủ MariaDB "master1". Ngoài ra, bạn có thể thấy giá trị "Master_Host" là máy chủ "master2".
Mã:
START SLAVE;
SHOW SLAVE STATUS\G

Kiểm tra bản sao cơ sở dữ liệu​

Để xác minh bản sao MariaDB Master-Master, hãy tạo một cơ sở dữ liệu mới trên máy chủ "master1" và nhập một số dữ liệu vào đó. Sau đó, đăng nhập vào "master2" và xác minh cơ sở dữ liệu, rồi nhập dữ liệu khác vào đó.

Di chuyển đến máy chủ "master1" và đăng nhập vào shell MariaDB với tư cách là người dùng root bằng lệnh sau.
Mã:
sudo mysql -u root -p
Tạo cơ sở dữ liệu mới "testdb" bằng truy vấn sau.
Mã:
CREATE DATABASE testdb;
USE testdb;
Bây giờ, hãy tạo một số bảng cho cơ sở dữ liệu "testdb" bằng truy vấn sau.
Mã:
CREATE TABLE users (id INT AUTO_INCREMENT,
firstname VARCHAR(30),
lastname VARCHAR(30),
date TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY(id));


Sau đó, chèn một số dữ liệu vào "testdb" bằng truy vấn MariaDB bên dưới.
Mã:
INSERT INTO users(firstname,lastname) VALUES ('Alice','Wonders');
Để kiểm tra dữ liệu của bạn trên máy chủ MariaDB, hãy sử dụng truy vấn "SELECT" như bên dưới. Và bạn sẽ thấy dữ liệu mà bạn vừa chèn.
Mã:
SELECT * FROM users;


Tiếp theo, di chuyển đến máy chủ "master2" và đăng nhập vào shell MariaDB bằng lệnh "mysql" bên dưới.
Mã:
sudo mysql -u root -p
Kiểm tra và xác minh danh sách cơ sở dữ liệu trên máy chủ "master2" bằng truy vấn sau. Và bạn sẽ nhận được cơ sở dữ liệu "testdb" mà bạn vừa tạo.
Mã:
SHOW DATABASES;
USE testdb;


Tiếp theo, chèn một số dữ liệu khác vào cơ sở dữ liệu "testdb" từ máy chủ "master2". Sau đó, kiểm tra và xác minh dữ liệu bằng truy vấn "SELECT". Và bạn sẽ nhận được dữ liệu mới được chèn từ máy chủ "master2".
Mã:
INSERT INTO users(firstname,lastname) VALUES ('Bob','Burgers');
SELECT * FROM users;


Bây giờ hãy quay lại "master1" để kiểm tra và xác minh dữ liệu mới mà bạn vừa chèn từ máy chủ "master2". Chạy truy vấn sau để kiểm tra dữ liệu mới từ máy chủ "master1". Và bạn sẽ thấy dữ liệu mới mà bạn vừa chèn từ máy chủ "master2" được sao chép vào máy chủ "master1".
Mã:
select @@hostname;
SELECT * FROM users;

Kết luận​

Xin chúc mừng! Bây giờ bạn đã triển khai thành công MariaDB Master-Master Replication trên máy chủ Debian 11. Bạn cũng đã cấu hình đồng bộ hóa thời gian trên máy chủ MariaDB bằng dịch vụ Chrony. Ngoài ra, bạn cũng đã bảo mật việc triển khai máy chủ MariaDB bằng tường lửa UFW. Cuối cùng, bạn có một máy chủ MariaDB với tính năng sao chép tự động giữa hai máy chủ MariaDB, bạn có thể ghi trên tất cả các máy chủ MariaDB đó và mọi dữ liệu sẽ được tự động sao chép.
 
Back
Bên trên