Δημιουργία υψηλής διαθεσιμότητας βάσης δεδομένων Percona XtraDB Cluster (MySQL) σε Ubuntu 16.04

Percona XtraDB Cluster είναι ένα σύγχρονο Master/Master Cluster MySQL υψηλής διαθεσιμότητας. Υπάρχει αντιγραφή δεδομένων με τη χρήση της βιβλιοθήκης Galera. Κάθε αλλαγή που κάνουμε σε ένα κόμβο αντιγράφεται σε όλους και ταυτόχρονα όλοι οι κόμβοι είναι διαθέσιμοι να εξυπηρετήσουν. Αυτό μας εξασφαλίζει συνεχή λειτουργία ακόμα και όταν κάποιος κόμβος βγει εκτός λειτουργίας καθώς οι άλλοι κόμβοι συνεχίζουν να εξυπηρετούν χωρίς πρόβλημα.

Σε αυτό το άρθρο θα δούμε πως μπορούμε να δημιουργήσουμε ένα Percona XtraDB Cluster με 3 κόμβους, ο κάθε κόμβος είναι ένα εικονικό μηχάνημα που περιλαμβάνει μια νέα εγκατάσταση Ubuntu 16.04 . Επίσης θα ελέγξουμε πως όποια αλλαγή κάνουμε σε ένα κόμβο αντιγράφεται αυτόματα και στους άλλους 2.

Για να ολοκληρώσουμε με επιτυχία αυτόν τον οδηγό χρειαζόμαστε ένα λογαριασμό με δικαιώματα χρήσης της εντολής sudo σε κάθε ένα από τους κόμβους. Επίσης θα πρέπει να ξέρουμε την IP για το κάθε Virtual Machine. Σε αυτόν τον οδηγό θα χρησιμοποιήσουμε την 192.168.1.51 για τον πρώτο κόμβο, την 192.168.1.52 για τον δεύτερο και την 192.168.1.53 για τον τρίτο. Μην ξεχάσετε να αντικαταστήσετε με τις δικές σας IP.

Σημαντικό: τα παρακάτω βήματα θα πρέπει να γίνουν σε σε όλους τους κόμβους.

vms
vms

Βήμα 1, Ενημέρωση αποθετηρίων και λογισμικού.

Πριν ξεκινήσουμε είναι καλό να επιβεβαιώσουμε ότι έχουμε τις τελευταίες εκδόσεις αποθετηρίων και λογισμικού. Πληκτρολογούμε:

sudo apt update
sudo apt upgrade -y

vms upgrade
vms upgrade

Βήμα 2, Απεγκατάσταση του Apparmor.

Για να λειτουργεί σωστά το Cluster μας θα πρέπει να απεγκαταστήσουμε το Apparmor μαζί με όλα τα αρχεία ρυθμίσεων του:

sudo apt purge --auto-remove apparmor -y

Βήμα 3, Εγκατάσταση Percona XtraDB Cluster.

Η Percona είναι μια από τις πιο διαδεδομένες βάσεις δεδομένων και είναι πλήρως συμβατή με τη MySQL καθώς πρόκειται για Drop in replacement. Δηλαδή η αλληλεπίδραση μας με το λογισμικό θα περιλαμβάνει εντολές MySQL.

Πριν ξεκινήσουμε θα πρέπει να ανοίξουμε σε όλους τους κόμβους τις θύρες 3306 και 4567:

sudo ufw allow 3306/tcp
sudo ufw allow 4567/tcp

Για να εγκαταστήσουμε την τελευταία έκδοση, 5.7, θα περάσουμε το αποθετήριο της Percona:

wget https://repo.percona.com/apt/percona-release_0.1-4.$(lsb_release -sc)_all.deb
sudo dpkg -i percona-release_0.1-4.$(lsb_release -sc)_all.deb

Και θα ενημερώσουμε τα αποθετήρια:

sudo apt update

Εγκαθιστούμε τη Perxona XtraDB Cluster:

sudo apt install percona-xtradb-cluster-57 -y

Θα μας ζητήσει να δώσουμε κωδικό για το root user της βάσης δεδομένων:

mysql root password
mysql root password

Γράφουμε ένα δυνατό κωδικό και πατάμε Enter, θα μας ζητήσει να επαναλάβουμε τον κωδικό. Γράφουμε τον κωδικό ξανά και πατάμε Enter:

mysql root password reenter
mysql root password reenter

Θα προχωρήσει την εγκατάσταση:

mysql completed installation
mysql completed installation

Γράφοντας ps aux | grep mysql παρατηρούμε ότι η βάση δεδομένων έχει ξεκινήσει, εμείς δεν έχουμε ρυθμίσει τις παραμέτρους του Cluster οπότε οι κόμβοι μας δεν επικοινωνούν. Σταματάμε τη Percona σε όλους τους κόμβους:

sudo service mysql stop

Έχουμε τελειώσει με την εγκατάσταση του λογισμικού και τώρα πρέπει να ρυθμίσουμε το Cluster μας.

Βήμα 4, Ρύθμιση του Cluster στο πρώτο κόμβο.

Τώρα θα δημιουργήσουμε ένα νέο αρχείο cluster.cnf στον πρώτο κόμβο μέσα στο φάκελο /etc/mysql/conf.d/. Τα αρχεία ρυθμίσεων της MySQL μέσα σε αυτό το φάκελο θα διαβάζονται κατά την εκκίνηση της εφαρμογής. Για τον πρώτο κόμβο με την IP 192.168.1.51 γράφουμε:

sudo nano /etc/mysql/conf.d/cluster.cnf

και προσθέτουμε τα παρακάτω:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.1.51,168.1.52,192.168.1.53

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #1 address
wsrep_node_address=192.168.1.51

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_ubuntu_cluster

# Authentication for SST method
wsrep_sst_auth=”sstuser:Difficulpassword”

Σε αυτό το αρχείο περιγράφουμε ποιες θα είναι οι IP διευθύνσεις των κόμβων καθώς και ποια είναι η IP του συγκεκριμένου κόμβου. Επιπλέον έχουμε περάσει τα στοιχεία του user που θα χρησιμοποιήσουμε ώστε να γίνεται η αντιγραφή.

Πατάμε Ctrl+X για έξοδο και Y για επιβεβαίωση. Αμέσως μετά μπορούμε να ξεκινήσουμε τον πρώτο κόμβο γράφοντας:

service mysql bootstrap-pxc

και ο πρώτος κόμβος του MySQL Cluster μας ξεκινάει:

mysql bootstrap pxc
mysql bootstrap pxc

Μπορούμε να συνδεθούμε στη Percona γράφοντας:

mysql –u root –p

Θα μας ζητήσει το password που πληκτρολογήσαμε στην εγκατάσταση, το πληκτρολογούμε και πατάμε Enter. Θα μας εμφανιστεί η οθόνη καλωσορίσματος της Percona.

mysql wellcome
mysql wellcome

Θα δημιουργήσουμε το χρήστη της Percona που περάσαμε στο αρχείο ρυθμίσεων που δημιουργήσαμε προηγουμένως για να μπορεί να γίνει η αντιγραφή ανάμεσα στους κόμβους:

CREATE USER 'sstuser'@'localhost' IDENTIFIED BY 'Difficulpassword';
GRANT PROCESS, RELOAD, LOCK TABLES, REPLICATION CLIENT ON *.* TO 'sstuser'@'localhost';
FLUSH PRIVILEGES;
Exit;

mysql create replication user
mysql create replication user

Βήμα 5, Ρύθμιση του Cluster στο δεύτερο κόμβο.

Τώρα θα δημιουργήσουμε ένα νέο αρχείο cluster.cnf στο δεύτερο κόμβο μέσα στο φάκελο /etc/mysql/conf.d/.

sudo nano /etc/mysql/conf.d/cluster.cnf

και προσθέτουμε τα παρακάτω:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.1.51,168.1.52,192.168.1.53

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #2 address
wsrep_node_address=192.168.1.52

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_ubuntu_cluster

# Authentication for SST method
wsrep_sst_auth=”sstuser:Difficulpassword”

H μόνη διαφορά σε σχέση με το πρώτο κόμβο είναι η δική του IP στην ετικέτα wsrep_node_address=192.168.1.52

Πατάμε Ctrl+X για έξοδο και Y για επιβεβαίωση. Μπορούμε να ξεκινήσουμε την Percona σε αυτό τον κόμβο γράφοντας:

sudo service mysql start

Τώρα θα συνδεθούμε στη Percona του δεύτερου κόμβου για να επιβεβαιώσουμε ότι έχει συνδεθεί με το πρώτο:

mysql –u root –p

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

mysql wellcome
mysql wellcome

Πληκτρολογώντας μέσα στη Percona:

show status like 'wsrep%';

θα μας εμφανίσει όλες τις μεταβλητές που σχετίζονται με την αντιγραφή. Εμάς μας ενδιαφέρει η μεταβλητή με την τιμή wsrep_cluster_size που περιγράφει το μέγεθος του Cluster μας, αφού μόλις συνδέσαμε το δεύτερο κόμβο θα πρέπει να είναι 2.

wsrep cluster size 2
wsrep cluster size 2

Μπορούμε να βγούμε από την Percona γράφοντας exit;

Βήμα 6, Ρύθμιση του Cluster στον τρίτο κόμβο.

Τώρα θα δημιουργήσουμε ένα νέο αρχείο cluster.cnf στον τρίτο κόμβο μέσα στο φάκελο /etc/mysql/conf.d/.

sudo nano /etc/mysql/conf.d/cluster.cnf

και προσθέτουμε τα παρακάτω:

[mysqld]

datadir=/var/lib/mysql
user=mysql

# Path to Galera library
wsrep_provider=/usr/lib/libgalera_smm.so

# Cluster connection URL contains the IPs of node#1, node#2 and node#3
wsrep_cluster_address=gcomm://192.168.1.51,168.1.52,192.168.1.53

# In order for Galera to work correctly binlog format should be ROW
binlog_format=ROW

# MyISAM storage engine has only experimental support
default_storage_engine=InnoDB

# This InnoDB autoincrement locking mode is a requirement for Galera
innodb_autoinc_lock_mode=2

# Node #3 address
wsrep_node_address=192.168.1.53

# SST method
wsrep_sst_method=xtrabackup-v2

# Cluster name
wsrep_cluster_name=my_ubuntu_cluster

# Authentication for SST method
wsrep_sst_auth=”sstuser:Difficulpassword”

H μόνη διαφορά σε σχέση με τους προηγούμενους κόμβους είναι η δική του IP στην ετικέτα wsrep_node_address=192.168.1.53

Πατάμε Ctrl+X για έξοδο και Y για επιβεβαίωση. Μπορούμε να ξεκινήσουμε την Percona σε αυτόν τον κόμβο γράφοντας:

sudo service mysql start

Τώρα θα συνδεθούμε στη Percona του τρίτου κόμβου για να επιβεβαιώσουμε ότι έχει συνδεθεί με τους άλλους δύο:

mysql -u root –p

Θα μας ζητήσει το password που δώσαμε κατά την εγκατάσταση. Το πληκτρολογούμε και πατάμε Enter. Θα μας εμφανιστεί η οθόνη καλωσορίσματος της Percona όπως και στους άλλους κόμβους.

mysql wellcome
mysql wellcome

Πληκτρολογώντας μέσα στη Percona:

show status like 'wsrep%';

Θα μας εμφανίσει όλες τις μεταβλητές που σχετίζονται με την αντιγραφή, εμάς μας ενδιαφέρει η μεταβλητή με την τιμή wsrep_cluster_size που περιγράφει το μέγεθος του Cluster μας, αφού μόλις συνδέσαμε το τρίτο κόμβο θα πρέπει να είναι 3.

wsrep cluster size 3
wsrep cluster size 3

Έχουμε τελειώσει με όλες τις ρυθμίσεις της Percona σε όλους τους κόμβους.

Βήμα 7, Έλεγχος της αντιγραφής ανάμεσα στους κόμβους.

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

Συνδεόμαστε και στις τρεις βάσεις δεδομένων:

mysql -u root –p

Γράφουμε σε όλους τους κόμβους:

show databases;

θα πρέπει να δούμε τις απαραίτητες βάσεις για να λειτουργεί η Percona

3 mysql show databases
3 mysql show databases

Γράφουμε στην πρώτη:

create database test;

Αν κάνουμε τώρα show databases και στους 3 κόμβους θα πρέπει να δούμε σε όλους τη νέα βάση test που δημιουργήσαμε στον πρώτο κόμβο:

mysql create database test
mysql create database test

Τώρα στο δεύτερο κόμβο για να φτιάξουμε τον πίνακα γράφουμε:

Use test;
CREATE TABLE Persons
(
ID int NOT NULL AUTO_INCREMENT,
LastName varchar(255) NOT NULL,
FirstName varchar(255),
Address varchar(255),
City varchar(255),
PRIMARY KEY (ID)
);

Στη συνέχεια, γράφοντας στους υπόλοιπους κόμβους:

Use test;
Show tables;

Θα εμφανιστεί σε όλους ο πίνακας που μόλις φτιάξαμε.

mysql show tables
mysql show tables

Έχουμε εγκαταστήσει και ρυθμίσει ένα υψηλής διαθεσιμότητας cluster με Perconta XtraDB. Ο χρόνος ολοκλήρωσης του οδηγού υπολογίζεται σε 2 ώρες.
Μην διστάσετε να αφήσετε σχόλιο για οποιαδήποτε απορία ή παρατήρηση που μπορεί να έχετε.

Site Footer