Computer >> Máy Tính >  >> Hệ thống >> Linux

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Nhân rộng trong cơ sở dữ liệu SQL là quá trình sao chép dữ liệu từ cơ sở dữ liệu nguồn sang một cơ sở dữ liệu khác (hoặc nhiều cơ sở dữ liệu) và ngược lại. Dữ liệu từ một máy chủ cơ sở dữ liệu được sao chép liên tục sang một hoặc nhiều máy chủ. Bạn có thể sử dụng bản sao để phân phối và cân bằng các yêu cầu trên một nhóm các máy chủ được sao chép, cung cấp khả năng chuyển đổi dự phòng và tính sẵn sàng cao của cơ sở dữ liệu MariaDB. MariaDB (và MySQL) cho phép sử dụng hai loại bản sao cơ sở dữ liệu: Master-Master Master-Slave . Trong bài viết này, chúng tôi sẽ xem xét cách định cấu hình cả hai loại sao chép MariaDB trên Linux CentOS 7.

Cài đặt MariaDB

Trước đó, chúng tôi đã xuất bản một bài báo mô tả quá trình cài đặt MariaDB trên CentOS 7. Bạn có thể đọc nó theo liên kết:https://woshub.com/mariadb-install-configure-tunning-centos. Vì vậy, chúng tôi sẽ không tập trung vào bản thân cài đặt MariaDB mà chuyển sang cách định cấu hình bản sao.

Định cấu hình sao chép Master-Master đơn giản trên MariaDB

Trong sơ đồ sao chép Master-Master, bất kỳ máy chủ cơ sở dữ liệu MariaDB / MySQL nào cũng có thể được sử dụng để ghi hoặc đọc dữ liệu. Sao chép dựa trên một tệp binlog đặc biệt, một máy chủ Master lưu tất cả các hoạt động với cơ sở dữ liệu. Máy chủ Slave kết nối với Máy chủ và áp dụng các lệnh cho cơ sở dữ liệu của nó.

1. MariaDB:Cấu hình của Máy chủ Chính đầu tiên (Master-1)

Thêm các dòng sau vào my.cnf tệp trên máy chủ MariaDB đầu tiên của bạn:

#replication
server_id = 1
report_host = master
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

service mariadb restart

Tạo người dùng để định cấu hình sao chép:

mysql
create user 'test_master'@'%' identified by 'test_master';
grant replication slave on *.* to 'test_master'@'%';

Để thêm một Slave, chúng ta cần lấy dữ liệu bin_log từ máy chủ Master-1:

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000002 | 664 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

2. MariaDB:Cấu hình của Máy chủ Chính thứ Hai (Master-2)

Kết nối với máy chủ MariaDB thứ hai, mở tệp my.cnf và thêm cấu hình sau vào đó:

#replication
server_id = 2
report_host = master2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Tạo người dùng mới trên máy chủ thứ hai:

create user 'test_master2'@'%' identified by 'test_master2';
grant replication slave on *.* to 'test_master2'@'%';

Tải bin_log trên Master-2:

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 667 | | |
+--------------------+----------+--------------+------------------+
1 row in set (0.000 sec)

Hãy định cấu hình kết nối giữa các máy chủ MariaDB trong cụm sao chép phần mềm của chúng tôi:

Dừng nô lệ:

STOP SLAVE;

Thêm Master-1 vào máy chủ thứ hai:

CHANGE MASTER TO MASTER_HOST='IP_master1', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000002', MASTER_LOG_POS=664;

Bắt đầu sao chép:

START SLAVE;

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Kết nối với Master-1 và làm theo các bước tương tự nhưng thay vào đó chỉ định thông tin về máy chủ thứ hai:

STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='10.2.10.36', MASTER_USER='test_master2', MASTER_PASSWORD='test_master2', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=667;
START SLAVE;

Kiểm tra trạng thái máy chủ thứ hai:

show slave status \G

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Như bạn có thể thấy trong ảnh chụp màn hình, có kết nối giữa hai máy chủ và không có lỗi nào xảy ra.

3. Làm thế nào để kiểm tra sự sao chép giữa các máy chủ MariaDB?

Sau đó, để đảm bảo rằng bản sao giữa hai máy chủ MariaDB hoạt động ở chế độ master + master, chúng tôi sẽ tạo một cơ sở dữ liệu mới trên Master-1 và tạo một bảng trong đó.

MariaDB [(none)]> create database master1;
MariaDB [(none)]> use master1;
MariaDB [master1]> CREATE TABLE hello (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Đảm bảo rằng cơ sở dữ liệu này đã tự động sao chép trên trang cái thứ hai và chứa cùng một bảng:

MariaDB [(none)]> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| master1 |
| mysql |
| performance_schema |
+--------------------+

MariaDB [(none)]> use master1;
MariaDB [master1]> show tables;

+-------------------+
| Tables_in_master1 |
+-------------------+
| hello |
+-------------------+

Cơ sở dữ liệu cũng đã được tạo trên bản chính thứ hai. Để kiểm tra toàn bộ chu kỳ, hãy tạo một bảng trong cơ sở dữ liệu Master1 trên máy chủ Master thứ hai và kiểm tra xem nó có xuất hiện trên máy chủ đầu tiên hay không.

MariaDB [master1]> CREATE TABLE hello_master1 (
-> AuthorID INT NOT NULL AUTO_INCREMENT,
-> AuthorName VARCHAR(100),
-> PRIMARY KEY(AuthorID)
-> );

Bảng hello_master1 đã được sao chép sang máy chủ đầu tiên:

MariaDB [master1]> show tables;

+-------------------+
| Tables_in_master1 |
+-------------------+
| hello |
| hello_master1 |
+-------------------+

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Như bạn có thể thấy, bảng mới đã xuất hiện trên Master-1. Việc nhân rộng hoạt động.

Cách thiết lập bản sao Master-Slave trong MariaDB?

Trong chế độ sao chép MariaDB master-slave, một máy chủ hoạt động như một máy chủ và dữ liệu từ máy chủ Master liên tục được ghi vào nó. Tất cả các thay đổi bạn thực hiện trên máy chủ Slave sẽ không được chuyển sang máy chủ Chính. Loại sao chép cơ sở dữ liệu này có khả năng phục hồi cao hơn và được sử dụng thường xuyên hơn. Trong cấu hình này, bạn luôn có một máy chủ dự phòng với cơ sở dữ liệu cập nhật và nếu một máy chủ phụ bị lỗi, Máy chủ sẽ không bị mất bất kỳ dữ liệu nào. Bạn cũng có thể phân phối tải cơ sở dữ liệu cho dự án của mình để các ứng dụng sẽ đọc dữ liệu từ các máy chủ Slave của bạn và chỉ ghi dữ liệu vào máy chủ Chính. Do đó, bạn thực hiện phản hồi cơ sở dữ liệu nhanh nhất có thể.

Khi định cấu hình bản sao chính + nô lệ của cơ sở dữ liệu MariaDB, máy chủ chính (master1) được định cấu hình như mô tả ở trên.

Chuyển sang máy chủ nô lệ. Thêm cấu hình sau vào tệp my.cnf nô lệ:

#replication
server_id = 2
report_host = slave2
log_bin = /var/lib/mysql/mariadb-bin
log_bin_index = /var/lib/mysql/mariadb-bin.index
relay_log = /var/lib/mysql/relay-bin
relay_log_index = /var/lib/mysql/relay-bin.index

Khởi động lại dịch vụ MariaDB. Nhận thông tin bin_log từ máy chủ đầu tiên:

MariaDB [(none)]> show master status;

+--------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+------------------+
| mariadb-bin.000001 | 664 | | |
+--------------------+----------+--------------+------------------+

Chạy các lệnh này trong bảng điều khiển mariadb trên máy chủ nô lệ:

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='IP_master', MASTER_USER='test_master', MASTER_PASSWORD='test_master', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=664;
MariaDB [(none)]> START SLAVE;

Khi bạn định cấu hình sao chép cho cơ sở dữ liệu MariaDB hiện có, bạn phải đặt cơ sở dữ liệu ở chế độ chỉ đọc trước khi bắt đầu sao chép để số bin_log không được cập nhật.

SET GLOBAL read_only = ON;

Bạn cũng phải tạo kết xuất bộ nhớ cơ sở dữ liệu và sử dụng nó để tải dữ liệu ban đầu lên MariaDB trên máy chủ nô lệ của bạn.

Để kiểm tra trạng thái Nô lệ:SHOW SLAVE STATUS\G;

Để tạo cơ sở dữ liệu trên Master:

MariaDB [(none)]> create database master_hello;

Đảm bảo rằng cơ sở dữ liệu cũng đã được tạo trên máy chủ Slave:

MariaDB [(none)]> show databases;

+--------------------+
| Database |
+--------------------+
| information_schema |
| master_hello |
| master_test |
| mysql |
| performance_schema |
| test |
+--------------------+

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Tạo cơ sở dữ liệu trên máy chủ Slave và kiểm tra xem cơ sở dữ liệu đã được sao chép lên Master chưa.

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Như bạn có thể thấy, chúng tôi đã tạo cơ sở dữ liệu và nó tồn tại trên Slave. Hãy kiểm tra xem nó đã xuất hiện trên Master chưa. Nó không có. Dữ liệu không được sao chép từ máy chủ sang máy chủ.

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Nó có nghĩa là bản sao MariaDB chỉ hoạt động theo một hướng. Hãy kiểm tra lại và xóa master_hello cơ sở dữ liệu từ máy chủ Slave:

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Kiểm tra xem nó đã bị xóa khỏi máy chủ Chính chưa:

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Như bạn thấy, nó ổn và cơ sở dữ liệu tồn tại.

P. S.:Khi bạn định cấu hình sao chép mariadb, bạn có thể gặp một số cạm bẫy, với tường lửa là lỗi thường gặp nhất. Theo mặc định, firewalld được cài đặt trong CentOS, nó chặn cổng sao chép MariaDB (TCP 3396). Bạn có thể mở cổng bằng iptables hoặc tắt tường lửa của mình (không phải là tùy chọn tốt nhất).

Địa chỉ IP mà tại đó cơ sở dữ liệu đang chờ kết nối được chỉ định trong tham số địa chỉ ràng buộc trong my.cnf .. Để cho phép kết nối cục bộ và bên ngoài, bạn phải nhận xét dòng này và thêm quy tắc iptables cho phép kết nối từ chính / địa chỉ IP nô lệ đến cổng 3306.

iptables -I INPUT -p tcp -s ip_address_slave_server --dport 3306 -j ACCEPT
iptables -I INPUT -p tcp --dport 3306 -j DROP

Trong quá trình thiết lập ban đầu, tôi đã gặp sự cố này, nhưng nó được phát hiện dễ dàng. Nếu bạn chạy kiểm tra trạng thái Nô lệ SHOW SLAVE STATUS\G , bạn sẽ thấy lỗi này:

Làm thế nào để cấu hình MariaDB Master-Master / Slave Replication?

Bạn có thể thêm một số tham số vào #replication trong tệp my.cnf. Dưới đây tôi sẽ đưa ra một số ví dụ và mô tả ngắn gọn về các tham số hữu ích. Tôi sẽ đưa ra một số ví dụ về các chức năng khác có thể hữu ích khi bạn định cấu hình sao chép cơ sở dữ liệu mariadb.

server_id = 1 - chỉ định ID máy chủ, thường chúng tôi bắt đầu bằng 1, nhưng bạn có thể sử dụng bất kỳ số nào không khớp với số của các máy chủ khác được sử dụng để sao chép.

report_host = master - thường thì bạn chỉ định tên máy chủ của máy chủ, nhưng thay vào đó bạn có thể nhập địa chỉ IP của nó.

log_bin = /var/lib/mysql/mariadb-bin - là đường dẫn đến nhật ký cập nhật (log_bin).

log_bin_index = /var/lib/mysql/mariadb-bin.index - cho phép bạn tìm ra nhật ký nào hiện đang hoạt động và nhật ký nào đã được sử dụng trước đó.

relay_log = /var/lib/mysql/relay-bin

relay_log_index = /var/lib/mysql/relay-bin.index - là các bản ghi sao chép.

Nếu bạn muốn định cấu hình bản sao của một cơ sở dữ liệu cụ thể hoặc các cơ sở dữ liệu đã chọn, hãy sử dụng các tham số sau:

replicate-do-db = dbname - nếu bạn cần nhiều cơ sở dữ liệu, hãy chỉ định tên của chúng được phân tách bằng dấu phẩy.

Để loại trừ một số cơ sở dữ liệu khỏi sao chép (như thường lệ, cơ sở dữ liệu dịch vụ bị loại trừ khỏi việc nhân rộng:information_schema, mysql và performance_schema):

binlog-ignore-db = dbname

Để đặt thời gian lịch sử nhật ký cho bin_log của bạn:

expire_logs_days = 10 - trong đó 10 là số ngày các bản ghi sẽ được lưu trữ.

Ngoài ra, nếu dữ liệu từ máy chủ Chính của bạn được ghi vào cơ sở dữ liệu có tên khác, bạn có thể đặt nó trong tệp cấu hình:

replicate-rewrite-db=dbmastername->dbslavename

Cấu hình nhân rộng đã hoàn thành. Tôi nghĩ rằng bằng cách sử dụng bài viết này, bạn sẽ có thể định cấu hình sao chép MariaDB cả ở chế độ Master + Master và Master + Slave mà không gặp bất kỳ sự cố nào.