Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

54
MySQL Cluster 7.3 at GUOB 2014, [email protected] By Wagner Bianchi Edição # 2 - 2014

description

This is the presentation used on my session on GUOB 2014, São Paulo, Brazil.

Transcript of Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

Page 1: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

By Wagner BianchiEdição # 2 - 2014

Page 2: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Wagner Bianchi

Formado em Gerenciamento de bancos de dados pela Faculdade Infórium de Tecnologia, como Pós-Graduação em Administração de Empresas em MBA em Oracle Database. Com passagens por empresas como Pythian, Oracle, Percona, IBM e Accenture, Bianchi é especialista em MySQL certificado em:

Certified MySQL Associate 5.0Certified MySQL Developer 5.0Certified MySQL Administrator 5.0Certified MySQL Cluster Database Administrator 5.1

Blog: wagnerbianchi.com

Page 3: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Agenda

Parte I• Arquitetura MySQL Cluster 7.3

– Conceito “Shared Nothing”– Componentes do cluster– Cluster Auto-Sharding– Nodes e Node Groups– Cluster Rolling Restart

• MySQL Cluster 7.3 Configuration– Arquivos de configuração– Parâmetros adicionais– Arquivos de Log– Iniciando o cluster

Parte II• Backup & Restore• NDB Client Programs • Padrões de Projeto

– Tablespaces– Tables– Foreign Keys– Node.JS (JavaScript/NoSQL)– Memcached

• Replicação Geográfica– Ativo/Passivo– Ativo/Ativo

Page 4: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Foram disponibilizadas 7 máquinas virtuais CentOS 6.5

Ambiente de Testes

Component Name IP Server Name

Management Node 192.168.0.101 Mgm01

Data/Storage Node 192.168.0.102 Node02

Data/Storage Node 192.168.0.103 Node03

SQL/API Node 192.168.0.104 Node05

SQL/API Node 192.168.0.105 Node05

Management Node 192.168.0.106 Mgm02

Habilite ou instale o repositório EPEL!!

Page 5: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Com os servidores virtuais prontos e papéis definidos, utilize o usuário root para definição de todos os processos e instalação de todos os pacotes:

– No diretório /root das máquinas, crie um subdiretório mysql_bin;

– Dentro do diretório mysql_bin, crie os diretórios:• mgm• ndb• sql

– Faça o download do pacote Red Hat Enterprise Linux 6 / Oracle Linux 6 (x86, 64-bit), RPM Bundle;

Ambiente de Testes

Page 6: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Siga a tabela abaixo para fazer a separação dos pacotes segundo a estrutura de diretórios proposta e posterior envio do diretório para cada host, seguindo a instalação:

• O padrão de projeto proposto não é obrigatório;• Bom para fazer um scp mysql_bin para todos os nós;

Ambiente de Testes

Cluster Component Pacotes

Management Node MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm

Storage/Data Node MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm

API/SQL Node MySQL-Cluster-client-gpl-7.3.5-1.el6.x86_64.rpmMySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpmMySQL-Cluster-shared-compat-gpl-7.3.5-1.el6.x86_64.rpmMySQL-Cluster-shared-gpl-7.3.5-1.el6.x86_64.rpm

Page 7: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

192.168.0.104API/SQL Node

192.168.0.105API/SQL Node

192.168.0.101Management Node

192.168.0.200HAProxy

192.168.0.103Data/Storage Node

192.168.0.102Data/Storage Node

192.168.0.106Management Node

Ambiente de Testes

Page 8: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

MySQL Cluster 7.3 New Features

Page 9: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Arquitetura MySQL Cluster 7.3

Page 10: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Arquitetura MySQL Cluster 7.3

Page 11: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Componentes básicos que compõem o MySQL Cluster:

– Management Node (ndb_mgmd):• É instalado com o pacote MySQL-Cluster-server-gpl• Permite a administração dos nós cluster;• Execução de backups com um cliente nativo;• start/stop/restart dos nós de dados;• Responsável pelo processo de arbitration;• É iniciado apontando um arquivo de configuração GLOBAL:

Componentes do Cluster

[root@mycluster-node01 mgm]# lsMySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm[root@mycluster-node01 mgm]# ndb_mgmd -f /usr/local/ndb/config01.ndbMySQL Cluster Management Server mysql-5.6.17 ndb-7.3.5

Page 12: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Componentes básicos que compõem o MySQL Cluster:

– Storage/Data Node (ndbd/ndbmtd):• Responsável para armazenar e processar os dados;• Servem à transações distribuídas (com Two Phase Commit);• Pode ser single-threaded (ndbd);• Pode ser multi-threaded (ndbmtd);• Pode ser utilizado os dois em uma mesmo ambiente;• Utiliza my.cnf (local file) para configurações que sobrescreve o GLOBAL;• Registra os dados de entrada com HASH;• Recupera os registros através do seu HASH registrado na entrada;

– Transaction Coordinator– Local Query Handler

Componentes do Cluster

Page 13: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Componentes básicos MySQL Cluster:

– Storage/Data Node (ndbd/ndbmtd):

Componentes do Cluster

DATAWRITE

192.168.0.103Data/Storage Node

192.168.0.102Data/Storage Node

NDBD/NDMTDTRANSCATION COORDINATOR

PK HASH

DATAREAD

NDBD/NDMTDLOCAL QUERY

HANDLERPK HASH

192.168.0.106API/SQL Node

192.168.0.107API/SQL Node

Page 14: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Iniciando os Data/Storage Nodes com ndbd (single-threaded)

– Storage/Data Node (ndbd/ndbmtd):

– Multi-Threaded Data/Storage Node pode ser utilizado bastando somente trocar o binário ndbd por ndbmtd.

Componentes do Cluster

[root@mycluster-node02 ~]# cat /etc/my.cnf[ndbd]# storage nodes connect stringndb-connectstring=192.168.0.101:1186,192,168.0.106:1186[root@mycluster-node02 ~]# ndbd2014-07-19 17:09:31 [ndbd] INFO -- Angel connected to '192.168.0.101:1186'2014-07-19 17:09:31 [ndbd] INFO -- Angel allocated nodeid: 2#[root@mycluster-node03 ~]# cat /etc/my.cnf[ndbd]# storage nodes connect stringndb-connectstring=192.168.0.101:1186,192,168.0.106:1186[root@mycluster-node03 ~]# ndbd2014-07-19 17:11:34 [ndbd] INFO -- Angel connected to '192.168.0.101:1186'2014-07-19 17:11:34 [ndbd] INFO -- Angel allocated nodeid: 3

Page 15: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Componentes básicos que compõem o MySQL Cluster:

– API/SQL Node (mysqld, ndb clients):• É a ponta aonde o cliente acessa os bancos de dados do Cluster;• Não é nada mais que um MySQL que acessa um storage remoto;• É tido como a camada de aplicação ou apresentação do banco;• Recebe as solicitações de dados e as passa para os Data Nodes;• Recebe de volta dos Data Nodes os dados e os envia para o cliente;

Componentes do Cluster

[root@mycluster-node04 ~]# vim /etc/my.cnf[mysqld]ndbcluster ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186

[root@mycluster-node04 ~]# service mysql startStarting MySQL......... SUCCESS!

Page 16: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Com base na necessidade atual...– escala de escrita, local e geograficamente;– manter os dados sempre acessíveis enquanto surgem novas demandas de

alteração dos containers de dados sem que haja downtime;– suporte à adição de novas funcionalidades, promovendo a escala de acordo

com as necessidades do negócio;– suporte à janelas de manutenção programadas ... sem downtime!!

• Com isso, o MySQL Cluster 7.3 dá suporte...– distribuição dos dados de tabelas pelos nós do Cluster;– dependência direta entre a quantidade de Data Nodes e a variável

NoOfReplicas; 4 Data Nodes e NoOfReplicas=2 significa que o auto-shard será realizado para garantir escalabilidade e continuidade do cluster em caso de falha; NoOfReplicas pode ser configurado com valores entre 1..4;• Caso NoOfReplicas seja igual ao # de Data Nodes, cada um terá um fragmento do outro;• O Auto-Sharding realizado através do particionamento horizontal, [LINEAR] KEY;

Cluster Auto-Sharding

Page 17: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Cluster Auto-Sharding

Page 18: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Cluster Auto-Sharding

Page 19: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

MySQL Cluster 7.3 Configuration

Page 20: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Dois tipos de arquivos de configuração:

– Arquivos de configuração locais (my.cnf):• Os arquivos de configuração locais são aqueles que são criados nos

próprios nós para determinadas certas características e funcionalidades do próprio nó. Existem parâmetros para Data Nodes e para SQL Nodes.

– Arquivos de configuração globais (config.ini):• Os arquivos de configuração globais são arquivos que são criados e

apontados na inicialização do Management Node, que na maioria das implementações são os árbitros do Cluster. O arquivo é lido na inicialização para que os nós se conheçam, falem uns com os outros, recebam tickets e liberam a adesão dos demais nós (acompenhe o log);

Arquivos de Configuração

Page 21: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Definimos as seções do arquivo GLOBAL com base na configurações dos nós (arquivo config.ini):

Arquivo de Configuração GLOBAL

[ndb_mgmd]# Management node 01NodeId=1Hostname=192.168.0.101DataDir=/var/lib/mysql-cluster

[ndb_mgmd]# Management node 02NodeId=7Hostname=192.168.0.106DataDir=/var/lib/mysql-cluster

Page 22: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Arquivo de Configuração GLOBAL

• Definimos as seções dos Data/Storage Nodes:

[ndbd default]DataDir=/var/lib/mysql-clusterNoOfReplicas=2DiskPageBufferMemory=16MBackupDataDir=/stage # disco/partição/volume dedicada para armazenamento

[ndbd]NodeId=2Hostname=192.168.0.102

[ndbd]NodeId=3Hostname=192.168.0.103

Page 23: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Arquivo de Configuração GLOBAL

• Definimos as seções dos SQL nodes:

[mysqld]NodeId=4Hostname=192.168.0.104

[mysqld]NodeId=5Hostname=192.168.0.15

[mysqld]NodeId=6# para quaisquer outras APIs precisem se conectar# para realizar tarefas no cluster# no caso de backup/restore principalmente

Page 24: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Arquivos de configuração locais são definidos nos Data e SQL Nodes:– Data Nodes: o arquivo my.cnf é criado em /etc com as opções

mais convenientes de acordo com o ambiente – basicamente:

– SQL Nodes: o arquivo de configuração já está pronto, este que é o próprio my.cnf, bastando habilitar o NDB Storage Engine, apontar a string de conexão com o MGM e o server_id:

Arquivos de Configuração LOCAL

[ndbd]ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186stoponerrornostart # se conecta ao management node mas não inicia

[mysqld]server_id=5ndbclusterndb-connectstring=192.168.0.101:1186,192,168.0.106:1186

Page 25: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Existe uma ordem correta para que o nós componentes do cluster sejam iniciados:

– Primeiro inicie os Management Nodes, com isso os arbitrators serão definidos;

– Em segundo lugar, inicie os Data Nodes, onde uma deles será eleito o president ou nó master dos grupos existentes (sinalizado pelo sinal * na saída do comando SHOW);

– Por último, inicie os SQL Nodes, pois, somente após iniciar os Data Nodes, a comunicação dos Ids destinados ao SQL nodes serão liberados para cominucação dentro do Cluster;

Iniciando o Cluster

Page 26: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Iniciando o Cluster

MANAGEMENT NODES

DATA/STORAGE NODES

API/SQL NODES

[root@mycluster-node05 ~]# echo "let's demo it"

Page 27: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Iniciando o Cluster

##: Reading the cluster from Management Node#ndb_mgm> showCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 @192.168.0.102 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0, *)id=3 @192.168.0.103 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0)

[ndb_mgmd(MGM)] 2 node(s)id=1 @192.168.0.101 (mysql-5.6.17 ndb-7.3.5)id=7 @192.168.0.106 (mysql-5.6.17 ndb-7.3.5)

[mysqld(API)] 3 node(s)id=4 @192.168.0.104 (mysql-5.6.17 ndb-7.3.5)id=5 @192.168.0.105 (mysql-5.6.17 ndb-7.3.5)id=6 (not connected, accepting connect from any host)

Page 28: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Caso uma alterações seja necessária no arquivo de configuração GLOBAL, um Rolling Restart do Cluster será requerido:– Reinicie os Management Nodes;– Reinicie os Data/Storage Nodes através do Management Node;– Reinicie os SQL/API Nodes;

• Aqui se vê a necessidade de uma camada superior que controle os acesso aos SQL nodes para que o serviço de bancos de dados não fique fora do ar:– HAProxy;– Heartbeat/Pacemaker.

Rolling Restart

Page 29: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

1º Manage

ment Node

2º Data

Nodes

3º SQL

Nodes

Rolling Restart

Quando se altera o arquivo de configuração GLOBALQuando é necessário adicionar novos nós ao ClusterQuando uma manutenção é necessária

Page 30: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Arquivos de logs– Aquivo de log no DataDir do Management Node:

• Comandos administrativos através do Management Node:– SHOW, exibe a configuração atual do cluster– STATUS, informação de status dos Data nodes– DUMP, informações gerais para os logs– REPORT – MEMORYUSAGE, BACKUPSTATUS, EVENTLOG

Cluster Troubleshooting

[root@mycluster-mgm01 ~]# tail -f /var/lib/mysql-cluster/ndb_1_cluster.log

2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Data usage is 32%(829 32K pages of total 2560)2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Index usage is 9%(221 8K pages of total 2336)2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 0 min: 3124 max: 12231 curr: 50142014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 2 min: 0 max: 0 curr: 22014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 3 min: 3144 max: 3144 curr: 14132014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 4 min: 720 max: 720 curr: 130

Page 31: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

MySQL Cluster 7.3 Backup & Restore

Page 32: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Como existe uma alocação de divisão especial dos dados ou fragmentos entre os nós, o mais interessante é o client de backup nativo:– É realizado através do Management Node;– O arquivo é armazenado em BackupDataDir (BackupDevice);– Permite acompanhamento através do comando REPORT;– A nomenclatura aponta as informações de restore;– O Management Node informa o # do backup;– Algumas opções/flags são aplicáveis;– Necessário colocar o Cluster em SINGLE USER MODE.

Backup Nativo

Page 33: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• O SINGLE USER MODE servirá para garantir que nenhum transação será executada durante a execução do backup;– Interessante para fazer debug de aplicação;– Interessante quando é possível cessar o acesso da aplicação;– Interessante quando há a utilização de Replication Channel;

• Por isso é interessante deixar um slot “vago” no arquivo de configuração GLOBAL para que o backup possa ser realizado;

Single Mode

ndb_mgm> ENTER SINGLE USER MODE 6Single user mode enteredAccess is granted for API node 6 only.

Page 34: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Verificando os logs do cluster no Management Node:

Single Mode – cluster logs

[root@mycluster-mgm01 tail -f /var/lib/mysql-cluster/ndb_1_cluster.log.ndb2014-07-24 19:04:39 [MgmtSrvr] INFO -- MySQL Cluster Management Server

mysql-5.6.17 ndb-7.3.5 started[...]... -- Node 3: Entering single user mode... -- Node 2: Entering single user mode... -- Node 3: Entered single user mode Node 6 has exclusive access... -- Node 2: Entered single user mode Node 6 has exclusive access

Page 35: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

ndb_mgm> SHOWCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 @192.168.0.102 (mysql-5.6.17 ndb-7.3.5, single user mode, Nodegroup: 0, *)id=3 @192.168.0.103 (mysql-5.6.17 ndb-7.3.5, single user mode, Nodegroup: 0)

[ndb_mgmd(MGM)] 2 node(s)id=1 @192.168.0.101 (mysql-5.6.17 ndb-7.3.5)id=7 @192.168.0.106 (mysql-5.6.17 ndb-7.3.5)

[mysqld(API)] 3 node(s)id=4 @192.168.0.104 (mysql-5.6.17 ndb-7.3.5)id=5 @192.168.0.105 (mysql-5.6.17 ndb-7.3.5)id=6 (not connected, accepting connect from any host)

Single Mode – Data nodes

Page 36: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

[root@mycluster-node04 ~]# mysql -pEnter password:Welcome to the MySQL monitor. Commands end with ; or \g.Your MySQL connection id is 2Server version: 5.6.17-ndb-7.3.5-cluster-gpl MySQL Cluster Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> use testDatabase changed

mysql> create table i (i int) engine=ndb;ERROR 1296 (HY000): Got error 299 'Operation not allowed or aborted due to single user mode' from NDBCLUSTER

Single Mode – SQL Nodes

Page 37: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

ndb_mgm> 2 REPORT BACKUPSTATUS # DATA NODE 2Node 2: Backup not started

ndb_mgm> 3 REPORT BACKUPSTATUS # DATA NODE 3Node 3: Backup not started

ndb_mgm> START BACKUPWaiting for completed, this may take several minutesNode 2: Backup 4 started from node 7Node 2: Backup 4 started from node 7 completed StartGCP: 13988 StopGCP: 13991 #Records: 9367 #LogRecords: 0 Data: 577996 bytes Log: 0 bytes

START BACKUP

Page 38: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• O backup será criado em disco de acordo com configurações da variável BackupDataDir:

• A nomenclatura do arquivo segue a seguinte convenção:– BACKUP-backup_id.nodeid.Data – dados do fragmento do node # 2;– BACKUP-backup_id.nodeid.ctl – metadados dos bancos de dados;– BACKUP-backup_id.nodeid.log – redo logs do cluster;

• O arquivo de metadados será utilizado com a opção –m do ndb_restore para criar os bancos de dados em um novo Data Node;

START BACKUP

[root@mycluster-node02 ~]# ls -lh /stage/BACKUP/BACKUP-5/total 9.9M-rw-r--r-- 1 root root 9.9M Jul 26 15:57 BACKUP-5-0.2.Data-rw-r--r-- 1 root root 34K Jul 26 15:57 BACKUP-5.2.ctl-rw-r--r-- 1 root root 52 Jul 26 15:57 BACKUP-5.2.log

Page 39: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

ndb_mgm> EXIT SINGLE USER MODEExiting single user mode in progress.Use ALL STATUS or SHOW to see when single user mode has been exited.ndb_mgm> ALL STATUSNode 2: started (mysql-5.6.17 ndb-7.3.5)Node 3: started (mysql-5.6.17 ndb-7.3.5)

ndb_mgm> SHOWCluster Configuration---------------------[ndbd(NDB)] 2 node(s)id=2 @192.168.0.102 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0, *)id=3 @192.168.0.103 (mysql-5.6.17 ndb-7.3.5, Nodegroup: 0)

[ndb_mgmd(MGM)] 2 node(s)id=1 @192.168.0.101 (mysql-5.6.17 ndb-7.3.5)id=7 @192.168.0.106 (mysql-5.6.17 ndb-7.3.5)

[mysqld(API)] 3 node(s)id=4 @192.168.0.104 (mysql-5.6.17 ndb-7.3.5)id=5 @192.168.0.105 (mysql-5.6.17 ndb-7.3.5)id=6 (not connected, accepting connect from any host)

Single Mode

Page 40: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• O restore de backup no MySQL Cluster é realizado através do aplicativo ndb_restore:– Realizado em cada Data/Storage Node do cluster;– Utiliza slot [api]/[mysqld] adicional para se conectar ao cluster;– Interessante na maioria dos casos utilizar SINGLE MODE;

• O ndb_restore requer algumas opções para que o restore seja realizado:– -c (connection_string), é a connectstring para conexão com

management node;– -n (node_id), qual é o ID do node alvo do restore;– -b (backup_id), indica qual backup será restaurado;– -m, utilizado para criar os metadados (pode ser omitido*);– -r, caminho dos arquivo de backup.

Restore – ndb_restore

Page 41: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

[root@mycluster-node02 ~]# ndb_restore -c 192.168.0.101:1186 -n 2 -b 5 -r /stage/BACKUP/BACKUP-5/

Nodeid = 2Backup Id = 5backup path = /stage/BACKUP/BACKUP-5/Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.2.ctl'File size 34508 bytesBackup version in files: ndb-6.3.11 ndb version: mysql-5.6.17 ndb-7.3.5Stop GCP of Backup: 15853Connected to ndb!!Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5-0.2.Data'File size 10282032 bytes_____________________________________________________Processing data in table: mysql/def/NDB$BLOB_7_3(8) fragment 0_____________________________________________________Processing data in table: mysql/def/ndb_index_stat_sample(5) fragment 0_____________________________________________________Processing data in table: world/def/CountryLanguage(14) fragment 0Processing data in table: world/def/Country(12) fragment 0Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.2.log'File size 52 bytesRestored 52648 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

Restore – ndb_restore (-n 2)

Page 42: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

[root@mycluster-node03 ~]# ndb_restore -c 192.168.0.101:1186 -n 3 -b 5 -r /stage/BACKUP/BACKUP-5/

Nodeid = 3Backup Id = 5backup path = /stage/BACKUP/BACKUP-5/Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.3.ctl'File size 34508 bytesBackup version in files: ndb-6.3.11 ndb version: mysql-5.6.17 ndb-7.3.5Stop GCP of Backup: 15853Connected to ndb!!Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5-0.3.Data'File size 10297224 bytes_____________________________________________________Processing data in table: mysql/def/NDB$BLOB_7_3(8) fragment 1_____________________________________________________Processing data in table: mysql/def/ndb_index_stat_sample(5) fragment 1_____________________________________________________Processing data in table: world/def/CountryLanguage(14) fragment 1Processing data in table: world/def/Country(12) fragment 1Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.3.log'File size 52 bytesRestored 52655 tuples and 0 log entries

NDBT_ProgramExit: 0 - OK

Restore – ndb_restore (-n 3)

Page 43: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

MySQL Cluster 7.3 Padrões de Projeto

Page 44: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Quando se inicia um projeto ou mesmo se pensa em migrar para bancos de dados em Cluster com o MySQL:– Quais são os dados mais críticos;– Quais são os dados HOT?– Quais são os dados COLD?– Qual o tamanho de cada subconjuntos de dados?

• Hierarquia de objetos:– In-Memory Tables

• Armazenam dados na memória.

– Disk-based Tables• Armazena seu dados em TABLESPACES, enquanto os dados NDB são

armazenados em LOGFILE GROUPS, compostos de pelo menos um arquivo de UNDO.

Objetos do Cluster

Page 45: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Toda tabela criada em um cluster sem a diretiva TABLESPACE terá seus dados colocados em memória;– Interessante fazer o dimensionamento com ndb_size.pl;– Efetuar tuning adequado dos parâmetros:

• DataMemory: determina a quantidade de espaço alocado em memória para armazenamento de dados de tabelas NDB;

• IndexMemory: determina a quantidade de espaço alocado em memória para armazenamento de dados contidos em índices do tipo HASH em tabelas NDB;

– Mais indicado para dados que precisam ser acessados com mais rapidez, área privilegiada;

– Servidor com mais memória principal que secundária:• SDD (SLC/MLC) X RAM

In-Memory Tables

Page 46: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

• Criamos um LOGFILE GROUP com um UNDOFILE (informações para rollback de transações NDB):

• Criamos um TABLESPACE com um DATAFILE:

• Alteramos a tabela para as estruturas criadas:

Disk-based Tables

mysql> CREATE LOGFILE GROUP wbcluster ADD UNDOFILE 'wbcluster.dat' -> INITIAL_SIZE=200M ENGINE=NDBCLUSTER;Query OK, 0 rows affected (0.95 sec)

mysql> CREATE TABLESPACE wbtbs01 ADD DATAFILE 'wbtbs01.dat' -> USE LOGFILE GROUP wbcluster INITIAL_SIZE=100M ENGINE=NDB;Query OK, 0 rows affected (0.69 sec)

mysql> ALTER TABLE sbtest TABLESPACE wbtbs01 STORAGE DISK;Query OK, 0 rows affected (0.81 sec)Records: 0 Duplicates: 0 Warnings: 0

Page 47: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

mysql> select ... information_schema.files ... ;*************************** 1. row ***************************file_name: wbtbs01.dat total MB: 100.00000000 free MB: 100.00000000 extra: CLUSTER_NODE=2*************************** 2. row ***************************file_name: wbtbs01.dat total MB: 100.00000000 free MB: 100.00000000 extra: CLUSTER_NODE=3*************************** 3. row ***************************file_name: wbcluster.dat total MB: 200.00000000 free MB: NULL extra: CLUSTER_NODE=2;UNDO_BUFFER_SIZE=8388608*************************** 4. row ***************************file_name: wbcluster.dat total MB: 200.00000000 free MB: NULL extra: CLUSTER_NODE=3;UNDO_BUFFER_SIZE=83886084 rows in set (0.06 sec)

Disk-based Tables

Page 48: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Foreign Keys (MySQL Cluster 7.3++)

Page 49: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Foreign Keys (MySQL Cluster 7.3++)

• Umas das novas features do MySQL Cluster 7.3...

mysql> create table t1(id int not null primary key, name varchar(100)) -> engine=ndb tablespace wbtbs01 storage disk;Query OK, 0 rows affected (1.31 sec)

mysql> create table t2(id int not null auto_increment primary key, -> id_t1 int not null, date timestamp) -> engine=ndb tablespace wbtbs01 storage disk;Query OK, 0 rows affected (0.96 sec)

mysql> alter table t2 add constraint fk_t1_t2 foreign key (id_t1) -> references t1(id) on delete restrict on update restrict;Query OK, 0 rows affected (0.57 sec)Records: 0 Duplicates: 0 Warnings: 0

Page 50: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Node.JS/Memcached

Interação direta com os dados do ClusterInteragindo client/API através de JavaScript Disponível através de um ConectorDesenvolvimento de serviços Real-TimePossibilidade de utilização de SQL/NoSQL

Page 51: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

MySQL Cluster 7.3 Replicação Geográfica

Page 52: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Distribuição Geográfica

Page 53: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Distribuição Geográfica

Page 54: Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, [email protected]

Thanks...

Wagner Bianchi’s

Twitter: @wagnerbianchijrSkype: wbianchijrE-mail: [email protected]