>> Apresentação e considerações

Fala galera!

Estamos ai na atividade…hehe…dessa vez trago um post de algo que já utilizei há muito tempo agora estou precisando de novo

Criei um Lab prático a respeito do MariaDB Replication no modelo Master/Slave de forma bem simples e funcional, a idéia desse post inicialmente é fazer um ambiente do zero funcionando com replicação, e vamos falar a verdade quando tudo funciona…É LINDU!!! …hehe…

Confesso que não sou muito fã de gerenciar o banco dessa forma (porém já melhor do que uma single instance dependendo do ambiente), ainda mais com a implementação sensacional do “Cluster Galera” que traz benefícios excelentes
para um ambiente em cluster de MySQL/MariaDB, curioso?

Para mais informações do galera, segue um artigo do meu amigo Evandro Couto como dica:
http://tutoriaisgnulinux.com/2017/04/07/criando-um-cluster-galera-mariadb-na-amazon-aws/

E segue o link da documentação:
https://mariadb.com/kb/en/mariadb/getting-started-with-mariadb-galera-cluster/

Ainda escreverei sobre o Galera!

Bom sem mais resenhas, voltemos ao replication..

Let`s go!!!

>> Ambiente utilizado

O Lab foi em cima de VirtualBox, onde foram criadas duas máquinas virtuais com Sistema Operacional “CentOS Linux release 7.3.1611 (Core)” na instalação mínima

Onde:

MASTER: mariadb-replication-01
IP: 192.168.250.31

SLAVE: mariadb-replication-02
IP: 192.168.250.32

>> Preparação do ambiente

(Procedimento a ser executado nas duas maquinas)

Desabilitando o Firewall e o SELinux

~# systemctl disable firewalld; systemctl stop firewalld
~# setenforce 0
~# sed -ri 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config

Configurando o arquivo /etc/hosts das máquinas

~# echo "192.168.250.31 mariadb-replication-01 mariadb-replication" >> /etc/hosts
~# echo "192.168.250.32 mariadb-replication-02" >> /etc/hosts

Instalando o MariaDB Server e habilitando na inicialização e startando

~# yum install mariadb-server -y
~# systemctl enable mariadb; systemctl start mariadb

Com o my.cnf configurado vamos iniciar o MariaDB e fazer o procedimento básico de instalação segura

~# mysql_secure_installation

Set root password? [Y/n] y
Remove anonymous users? [Y/n] y
Disallow root login remotely? [Y/n] n
Remove test database and access to it? [Y/n] y
Reload privilege tables now? [Y/n] y

>> Configurando o MASTER – mariadb-replication-01

Setando o Hostname

[root@mariadb-replication-01 ~]# hostnamectl set-hostname mariadb-replication-01

Configurando o /etc/my.cnf para permitir a criação do log binário responsável pela replicação dos dados, o “server-id” precisa ser único em cada node da replicação

[root@mariadb-replication-01 ~]# vim /etc/my.cnf

server-id               = 1
bind-address            = 0.0.0.0
log_bin                 = /var/log/mariadb/mariadb-bin.log
binlog-ignore-db        = "mysql"

Restart do MariaDB para aplicacar as configurações

[root@mariadb-replication-01 ~]# systemctl restart mariadb

Agora vamos criar o usuário e dar grant para replicação

[root@mariadb-replication-01 ~]# mysql -uroot -p 

MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'mariadb-replication-02' IDENTIFIED BY 'replication_pass'; 
 
MariaDB [(none)]> FLUSH PRIVILEGES; 

MariaDB [(none)]> FLUSH TABLES WITH READ LOCK; 

MariaDB [(none)]> SHOW MASTER STATUS \G;
*************************** 1. row ***************************
            File: mariadb-bin.000001
        Position: 505
    Binlog_Do_DB: 
Binlog_Ignore_DB: mysql
1 row in set (0.00 sec)

ERROR: No query specified

>> Configurando o SLAVE – mariadb-replication-02

Setando o Hostname

[root@mariadb-replication-02 ~]# hostnamectl set-hostname mariadb-replication-02

No SLAVE vamos setar o “server-id” como 2, lembrando que ele precisa ser único entre os nodes que fazem parte da replicação

[root@mariadb-replication-02 ~]# vim /etc/my.cnf

server-id               = 2
bind-address            = 0.0.0.0
log_bin                 = /var/log/mariadb/mariadb-bin.log
binlog-ignore-db        = "mysql" 
[root@mariadb-replication-02 ~]# systemctl restart mariadb

Agora vamos configurar o nosso SLAVE para se conectar no MASTER, perceba que os dados de conexão são baseados no usuário criado no servidor MASTER, e a saída do comando “SHOW MASTER STATUS” nos traz as informações que precisamos sobre o MASTER_LOG_FILE e o MASTER_LOG_POS

[root@mariadb-replication-02 ~]# mysql -uroot -p

MariaDB [(none)]> STOP SLAVE;

MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST='mariadb-replication-01', MASTER_USER='replication_user', MASTER_PASSWORD='replication_pass', MASTER_LOG_FILE='mariadb-bin.000001', MASTER_LOG_POS=505;

MariaDB [(none)]> START SLAVE;

MariaDB [(none)]> SHOW SLAVE STATUS \G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: mariadb-replication-01
                  Master_User: replication_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mariadb-bin.000001
          Read_Master_Log_Pos: 505
               Relay_Log_File: mariadb-relay-bin.000002
                Relay_Log_Pos: 531
        Relay_Master_Log_File: mariadb-bin.000001
             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: 505
              Relay_Log_Space: 827
              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
1 row in set (0.00 sec)

ERROR: No query specified

>> Testando a replicação

Para testar agora basta usar! …o que for criado no MASTER automaticamente será criado no SLAVE, lembrando que os dados tem que ser “INPUTADOS” no MASTER, todos os dados inseridos no SLAVE não são replicados para o MASTER

Selection_014.png

Ao consultar os status do MASTER e do SLAVE podemos ver que estão sincronizados!

>> Conclusão

Bom, é claro que existem MUITAS opções de configuração, e otimizações que farão com que seu ambiente esteja melhor preparado para receber cargas altas, nesse toturial abordei o funcionamento da replicação.

Criamos a replicação, e está funcional, Show!!! …

mais como nem tudo são Flores a replicação pode quebrar, podemos trocar de máquinas, o banco pode corromper, enfim, a administração desse ambiente ficará para próximos posts, vou tentar explicar aqui como gerenciar um ambiente MASTER/SLAVE de forma que sejamos capazes de lidar com as falhas corriqueiras do dia-a-dia.

Valeu galera!

>> Referências

https://mariadb.com/kb/en/mariadb/setting-up-replication/