Πώς να ρυθμίσετε την αναπαραγωγή του MariaDB (Master-Slave) στο CentOS/RHEL 7 και στο Debian 8/9


Ακόμη και όταν μερικοί άνθρωποι πληροφορικής ακούν τη φράση "Αντιγραφή βάσης δεδομένων", συχνά τη συσχετίζουν με την ανάγκη να έχουν πολλά αντίγραφα των ίδιων πληροφοριών για να αποφευχθεί η απώλεια δεδομένων σε περίπτωση αστοχίας υλικού ή καταστροφής δεδομένων. Αν και αυτό ισχύει σε κάποιο βαθμό, υπάρχουν πολλά περισσότερα στην αναπαραγωγή της βάσης δεδομένων από την κοινή ιδέα της δημιουργίας αντιγράφων ασφαλείας μιας βάσης δεδομένων και της διαθεσιμότητας δεδομένων.

Μεταξύ άλλων πλεονεκτημάτων της αναπαραγωγής της βάσης δεδομένων σε μια εγκατάσταση master-slave μπορούμε να αναφέρουμε:

  1. Τα αντίγραφα ασφαλείας μπορούν να γίνουν στον slave διακομιστή χωρίς να επηρεάζονται (και να επηρεάζονται από) οι λειτουργίες εγγραφής στο master.
  2. Οι λειτουργίες έντασης πόρων (όπως η ανάλυση δεδομένων) μπορούν να εκτελεστούν στο slave χωρίς να επηρεαστεί η απόδοση του master.

Σε αυτό το άρθρο θα εξηγήσουμε πώς να ρυθμίσετε την αναπαραγωγή master-slave στο MariaDB 10.1. Σε αντίθεση με την κλασική αναπαραγωγή, η MariaDB εισήγαγε την έννοια των Global Transaction IDs (GTIDs) στο v10.0, η οποία επιτρέπει την αλλαγή ενός slave σε συνδεθείτε και αναπαραγάγετε εύκολα από διαφορετικό κύριο. Επιπλέον, η κατάσταση του slave καταγράφεται με τρόπο ασφαλή για σφάλματα (οι ενημερώσεις στην κατάσταση γίνονται με την ίδια συναλλαγή με τις ενημερώσεις των δεδομένων).

Αν ψάχνετε για αναπαραγωγή MySQL στο CentOS/RHEL 6, ακολουθήστε αυτόν τον οδηγό Ρύθμιση αναπαραγωγής MySQL (Master-Slave) σε CentOS/RHEL 6

Εγκατάσταση του MariaDB 10.1 σε CentOS/RHEL 7 και Debian 8/9

Το περιβάλλον δοκιμών μας αποτελείται από τα ακόλουθα μηχανήματα (και τα δύο είναι CentOS 7):

Master: 192.168.0.18
Slave: 192.168.0.19

Για να εγκαταστήσουμε την πιο πρόσφατη έκδοση του MariaDB, θα χρειαστεί να προσθέσουμε τα αποθετήρια τους στους διακομιστές μας. Εάν χρησιμοποιείτε παλαιότερη έκδοση του MariaDB, ας πούμε 5.5, σκεφτείτε να κάνετε αναβάθμιση στην πιο πρόσφατη έκδοση 10.1 χρησιμοποιώντας το παρακάτω άρθρο.

  1. Αναβαθμίστε το MariaDB 5.5 σε MariaDB 10.1

Στο CentOS/RHEL

Δημιουργήστε ένα αρχείο με το όνομα MariaDB.repo μέσα στο /etc/yum.repos.d με τα ακόλουθα περιεχόμενα τόσο στο Master και στο Slave< συστήματα:

MariaDB 10.1 CentOS repository list - created 2016-01-23 14:16 UTC
http://mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.1/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

Αποθηκεύστε το αρχείο και εγκαταστήστε το MariaDB και στους δύο διακομιστές χρησιμοποιώντας το yum:

yum update && yum install MariaDB-server MariaDB-client

Στο Debian/Ubuntu

Προσθέστε το κλειδί για τον έλεγχο ταυτότητας πακέτων και του αποθετηρίου MariaDB:

apt-get install software-properties-common
apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 0xcbcb082a1bb943db
add-apt-repository 'deb [arch=amd64,i386] http://mirror.edatel.net.co/mariadb/repo/10.1/debian jessie main'

Σημείωση: Αντικαταστήστε τη διανομή όνομα και κωδικό όνομα στην παραπάνω επισημασμένη γραμμή.

Εγκαταστήστε χρησιμοποιώντας την εντολή apt-get:

apt-get update
apt-get install mariadb-server

Αφού εγκαταστήσετε το MariaDB, εκτελέστε τη διαδικασία mysql_secure_installation τόσο στο master όσο και στο slave, ας ρυθμίσουμε ένα δείγμα βάσης δεδομένων δοκιμής στην κύρια μηχανή.

Ρύθμιση ενός δείγματος βάσης δεδομένων MySQL στο Master

Τώρα θα εγκαταστήσουμε στον κύριο διακομιστή τη βάση δεδομένων Εργαζόμενοι από το https://github.com/datacharmer/test_db (η οποία παρέχει ένα σύνολο δεδομένων 4 ισχυρή> εκατομμύρια εγγραφές κατανεμημένες σε έξι πίνακες) σε δύο απλά βήματα:

Κλωνοποιήστε το αποθετήριο και χρησιμοποιήστε το για να εισαγάγετε το δείγμα βάσης δεδομένων στην εγκατάσταση του MariaDB:

git clone https://github.com/datacharmer/test_db
cd test_db
mysql < employees.sql

Ρύθμιση παραμέτρων του MySQL Server στο Master

Για να διαμορφώσετε το master, ακολουθήστε τα εξής βήματα:

ΒΗΜΑ 1: Επεξεργαστείτε το αρχείο /etc/my.cnf. Στην ενότητα [mysqld], προσθέστε τις ακόλουθες τέσσερις γραμμές:

log-bin
server_id=1
replicate-do-db=employees
bind-address=192.168.0.18

και επανεκκινήστε το MariaDB:

systemctl restart mariadb

ΒΗΜΑ 2: Συνδεθείτε στον διακομιστή MariaDB ως root, δημιουργήστε το slave χρήστη και εκχωρήστε τις απαραίτητες επιχορηγήσεις:

MariaDB [(none)]> CREATE USER 'slave'@'localhost' IDENTIFIED BY 'SlavePassword';
MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO slave IDENTIFIED BY 'SlavePassword' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;
MariaDB [(none)]> FLUSH TABLES WITH READ LOCK;
MariaDB [(none)]> SHOW MASTER STATUS;

Η εντολή τελευταία (SHOW MASTER STATUS) επιστρέφει την τρέχουσα θέση στο δυαδικό αρχείο καταγραφής (τις ακριβείς συντεταγμένες που υποδεικνύουν ακριβώς από ποιο σημείο πρέπει να ξεκινήσει η αναπαραγωγή του slave:

ΒΗΜΑ 3: Βγείτε από τη γραμμή εντολών MariaDB (με exit;) και χρησιμοποιήστε την ακόλουθη εντολή για να τραβήξετε ένα στιγμιότυπο της βάσης δεδομένων υπαλλήλων. Όταν πατήσετε Enter, θα σας ζητηθεί να πληκτρολογήσετε τον κωδικό πρόσβασης για το root που ρυθμίσατε νωρίτερα μέσω του mysql_secure_installation:

mysqldump -u root -p employees > employees-dump.sql

Αφού ολοκληρωθεί η ένδειξη dump, συνδεθείτε ξανά στον διακομιστή βάσης δεδομένων για να ξεκλειδώσετε τους πίνακες και, στη συνέχεια, πραγματοποιήστε έξοδο:

MariaDB [(none)]> UNLOCK TABLES;
MariaDB [(none)]> exit;

ΒΗΜΑ 4: Αντιγράψτε το dump στο slave:

scp employees-dump.sql [email :/root/ 

ΒΗΜΑ 5: Εκτελέστε τη διαδικασία mysql_upgrade για να αναβαθμίσετε τους πίνακες συστήματος (θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασης root MariaDB):

mysql_upgrade -u root -p

ΒΗΜΑ 6: Επιτρέψτε την υπηρεσία βάσης δεδομένων μέσω του τείχους προστασίας:

firewall-cmd --add-service=mysql
firewall-cmd --add-service=mysql --permanent
firewall-cmd --reload

Τώρα ας διαμορφώσουμε το slave.

Διαμόρφωση του MySQL Server σε Slave

Για να ρυθμίσετε τις παραμέτρους του slave, ακολουθήστε τα εξής βήματα:

ΒΗΜΑ 1: Δημιουργήστε το λογαριασμό για να εκτελέσετε τις εργασίες αναπαραγωγής. Συνδεθείτε στον τοπικό διακομιστή MariaDB με:

mysql -u root –p

και εισαγάγετε τον κωδικό πρόσβασης που ρυθμίσατε νωρίτερα.

ΒΗΜΑ 2: Αφού συνδεθείτε στον διακομιστή βάσης δεδομένων, δημιουργήστε τον χρήστη και μια κενή βάση δεδομένων και παραχωρήστε δικαιώματα:

MariaDB [(none)]> CREATE DATABASE employees;
MariaDB [(none)]> GRANT ALL PRIVILEGES ON employees.* TO 'slave'@'localhost' WITH GRANT OPTION;
MariaDB [(none)]> FLUSH PRIVILEGES;

ΒΗΜΑ 3: Βγείτε από την προτροπή MariaDB και φορτώστε την ένδειξη ένδειξης που δημιουργήθηκε στον κύριο διακομιστή:

mysql -u root -p employees < employees-dump.sql

ΒΗΜΑ 4: Επεξεργαστείτε το αρχείο /etc/my.cnf για να εκχωρήσετε ένα διακομιστή ID στο slave κάτω από το [mysqld] ενότητα . Λάβετε υπόψη ότι πρέπει να είναι διαφορετικός ακέραιος από τον 1, όπως χρησιμοποιήσαμε το 1 στο κύριο:

server_id=2
replicate-do-db=employees

Κάντε επανεκκίνηση του διακομιστή βάσης δεδομένων:

systemctl restart mariadb

ΒΗΜΑ 5: Εκτελέστε τη διαδικασία mysql_upgrade για να αναβαθμίσετε τους πίνακες συστήματος (θα σας ζητηθεί να εισαγάγετε τον κωδικό πρόσβασης root MariaDB):

mysql_upgrade -u root -p

ΒΗΜΑ 6: Μόλις εισαχθεί το dump στο slave, απομένουμε μόνο λίγα βήματα για να ξεκινήσουμε την αναπαραγωγή. Συνδεθείτε στη βάση δεδομένων και εκτελέστε τις ακόλουθες εντολές στη γραμμή εντολών MariaDB. Δώστε ιδιαίτερη προσοχή στις μεταβλητές MASTER_LOG_FILE και MASTER_LOG_POS, οι οποίες θα πρέπει να ταιριάζουν με τις τιμές που επιστρέφονται από το SHOW MASTER STATUS στο ΒΗΜΑ 2 της "Διαμόρφωση του κύριου" πάνω από.

MariaDB [(none)]> CHANGE MASTER TO
  MASTER_HOST='192.168.0.18',
  MASTER_USER='slave',
  MASTER_PASSWORD='SlavePassword',
  MASTER_PORT=3306,
  MASTER_LOG_FILE='master-bin.000001',
  MASTER_LOG_POS=314,
  MASTER_CONNECT_RETRY=10,
  MASTER_USE_GTID=current_pos;

ΒΗΜΑ 7: Εκκινήστε το slave και ελέγξτε την κατάστασή του χωρίς να πραγματοποιήσετε έξοδο από την προτροπή MariaDB:

MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G;

Όχι ότι το χρειάζεστε τώρα, αλλά σημειώστε ότι μπορείτε να σταματήσετε τον δούλο με:

MariaDB [(none)]> STOP SLAVE;

εάν η εντολή SHOW SLAVE STATUS\G; εμφανίσει τυχόν σφάλματα. Χρησιμοποιήστε αυτά τα σφάλματα για την αντιμετώπιση προβλημάτων και, στη συνέχεια, εκτελέστε το START SLAVE; για να δοκιμάσετε ξανά.

Δοκιμάστε την αναπαραγωγή βάσεων δεδομένων MySQL/MariaDB

Ας προσθέσουμε μια εγγραφή στον πίνακα υπαλλήλων στον κύριο διακομιστή:

MariaDB [(none)]> INSERT INTO employees (emp_no, birth_date, first_name, last_name, gender, hire_date) VALUES (500000, '1983-07-12', 'Dave', 'Null', 'M', '2014-12-12');

Στη συνέχεια, επαληθεύστε ότι αυτή η αλλαγή αντιγράφηκε στο slave:

MariaDB [(none)]> USE employees;
MariaDB [(none)]> SELECT * FROM employees WHERE emp_no=500000;

Όπως μπορείτε να δείτε, η αναπαραγωγή λειτουργεί σωστά από master σε slave.

Περίληψη

Σε αυτό το άρθρο εξηγήσαμε πώς να εγκαταστήσετε την πιο πρόσφατη έκδοση του MariaDB στο CentOS/RHEL 7 και στο Debian 8/9 και συζητήσαμε πώς να ρυθμίσετε την αναπαραγωγή master-slave με τα GTID. Για περισσότερες πληροφορίες, μπορεί να θέλετε να ανατρέξετε στον Οδηγό αναπαραγωγής MariaDB και μη διστάσετε να επικοινωνήσετε μαζί μας χρησιμοποιώντας την παρακάτω φόρμα εάν έχετε ερωτήσεις ή σχόλια.