divendres, 13 de novembre de 2015

MariaDB 10 Master-Slave Replication on Debian 8.2

Introducció:

En aquest tutorial configurarem dues màquines amb MariaDB amb una configuració master-slave i comprobarem que funcionen correctament.

Configuracio Bàsica de les màquines:

Les màquines que utilitzarem per a realitzar la proba tindran els segûents hostnames:
  • king (master)
  • plebeian (slave)
Les màquines tenen instal·lada una distribució Debian 8.2 amb tots els paquets actualitzats.
cat /etc/debian_version
8.2
Les dues màquines estan a la mateixa subxarxa i són capaces de realitzar-se ping entre elles. La configuració de la xarxa es la següent:
#KING
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.122.2
 netmask 255.255.255.0
 gateway 192.168.122.1
#PLEBEIAN
# The primary network interface
allow-hotplug eth0
iface eth0 inet static
 address 192.168.122.3
 netmask 255.255.255.0
 gateway 192.168.122.1 
No hi ha cap firewall activitat.

MariaDB

En ambdues màquines instal·lem la base de dades mariadb.
apt-get install mariadb-server
I executem la següent comanda per securitzar la instal·lació tb a les dues màquines:
# /usr/bin/mysql_secure_installation
Enter current password for root (enter for none):
...
Set root password? [Y/n] Y
...
Remove anonymous users? [Y/n] Y
...
Disallow root login remotely? [Y/n] Y
...
Remove test database and access to it? [Y/n] Y
...
Reload privilege tables now? [Y/n] Y
A partir d'ací tota la configuració i passos del tutorial es realitzaran sobre la maquina king. El primer que farem sera connectar-nos a la base de dades i crear una base de dades i afegir dades.
mysql -u root -p 

MariaDB [(none)]> create database test;
MariaDB [(none)]> use test;
MariaDB [(none)]> create table  \
                  t1 (id INT not null, name CHAR(15), age INT);
MariaDB [(none)]> insert into t1 values (1, "Joan", 25);
MariaDB [(none)]> insert into t1 values (2, "Laia", 28);
Creem un usuari anomenat "slave_user" li proporcionem un password i li concedim per permis de replicació per a que puga replicar la base de dades al host plebeian.
mysql -u root -p 
MariaDB [(none)]> grant replication slave \
                  on *.* to slave_user@´%´ identified by 'qwerty'; 
Editem el fitxer de configuració de MariaDB, /etc/mysql/my.cnf amb els següents valors:
bind-address            = 192.168.122.2
server-id               = 1
log_bin                 = /var/log/mysql/mysql-bin.log
binlog-ignore-db        = “mysql”
Una volta editar el fitxer reiniciem el daemon.
systemctl restart mysql
Preparem la base de dades per a realitzar un backup. La següent comanda estableix un read lock global, per tant ja no es poden llançar insert/update/delete/replace/alter, també tanca totes les taules obertes, aquestes no es tancara fins que els processos en acció no finalitzen la seua execució. Per últim bloqueja els commits.
MariaDB [(none)]> flush tables with read lock;
Query OK, 0 rows affected (0.00 sec)
Una volta tenim la base de dades preparada per realitzar el backup, prenem noda de la posició dels binary logs i del fitxer que s'esta modificiant actualment.
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000004 |     1212 |              | mysql            |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
Realitzem el backup.
mysqldump -u root -p --databases test > kingdump.sql
Eliminem el lock que hem realitzat abans a la base de dades per a que tot puga seguir funcionant normalment.
MariaDB [(none)]> unlock tables;
Query OK, 0 rows affected (0.00 sec)
Transferim el backup de la base de dades a l'altra màquina.
scp kingdump.sql user@192.168.122.3:~/ 
Apartir d'ací tots els passos de configuració es realitzaran sobre la màquina plebeian, el servidor que actua com a slave.

Editem el fitxer de configuració de MariaDB, /etc/mysql/my.cnf amb els següents valors:
bind-address            = 192.168.122.3
server-id               = 2
log_bin                 = /var/log/mysql/mysql-bin.log
Reinicim MariaDB.
systemctl restart mysql
Restaurem el backup que hem fet de king en plebeian.
mysql -u root -p < kingdump.sql 
Parem el slave, si esta funcionant.
MariaDB [(none)]> stop slave;
Configurem la replicació del slave amb la IP i port de la base de dades del master, l'usuari i el password que hem configurat anteriorment i el fitxer dels binary logs i la posició apartir de la qual s'ha de recuperar la informació. Per últim configurem el temps passat el qual ha de tractar de tornar a connectar.
MariaDB [(none)]> change master to master_host='192.168.122.2', \
                  master_user='slave_user', master_password='qwerty', \
                  master_port=3306, master_log_file='mysql-bin.000004', \
                  master_log_pos=1212, master_connect_retry=60;
Una volta configurats els parametres ja podem arrancar el slave per a que comence la replicació.
MariaDB [(none)]> start slave;
Com podem veure l'slave ja està funcionant.
MariaDB [(none)]> show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.122.2
                  Master_User: slave_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000009
          Read_Master_Log_Pos: 326
               Relay_Log_File: mysqld-relay-bin.000011
                Relay_Log_Pos: 613
        Relay_Master_Log_File: mysql-bin.000009
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 326
              Relay_Log_Space: 1198
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1
               Master_SSL_Crl: 
           Master_SSL_Crlpath: 
                   Using_Gtid: No
                  Gtid_IO_Pos: 
1 row in set (0.00 sec)

Probes finals

Per últim per comprobar que la replicació realment funciona ja només ens queda fer unes últimes probes. Ens connectarem a la maquina king (master) i afegim dues files mes a la base de dades que hem creat.
MariaDB [(none)]> use test
MariaDB [(none)]> insert into t1 values (1, "Pere", 36);
MariaDB [(none)]> insert into t1 values (2, "Julia", 21);
Quan ens connectem a la màquina plebeian (slave) i realitzem una consulta podem veure que la informació s'ha replicat i que ja esta disponible també al slave.
MariaDB [(none)]> use test
MariaDB [test]> select * from t1;
+----+-------+------+
| id | name  | age  |
+----+-------+------+
|  1 | Joan  |   25 |
|  2 | Laia  |   28 |
|  1 | Pere  |   36 |
|  2 | Julia |   21 |
+----+-------+------+
4 rows in set (0.00 sec)

Enllaços:

: http://www.rackspace.com/knowledge_center/article/mysql-replication-masterslave
https://mariadb.com/kb/en/mariadb/setting-up-replication/
http://fromdual.com/how_to_setup_mysql_master-slave_replication
http://www.tecmint.com/how-to-setup-mysql-master-slave-replication-in-rhel-centos-fedora/
http://www.unixmen.com/setup-mariadb-master-slave-replication-in-centos-7/
http://mysqlha.blogspot.co.uk/2008/07/what-exactly-does-flush-tables-with.html

Cap comentari:

Publica un comentari a l'entrada