Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

Post on 19-Jun-2015

410 views 7 download

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

By Wagner BianchiEdição # 2 - 2014

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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!!

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

MySQL Cluster 7.3 New Features

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Arquitetura MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Arquitetura MySQL Cluster 7.3

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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!

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Cluster Auto-Sharding

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Cluster Auto-Sharding

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

MySQL Cluster 7.3 Configuration

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Iniciando o Cluster

MANAGEMENT NODES

DATA/STORAGE NODES

API/SQL NODES

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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)

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

MySQL Cluster 7.3 Backup & Restore

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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.

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

[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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

[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)

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

[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)

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

MySQL Cluster 7.3 Padrões de Projeto

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

• 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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Foreign Keys (MySQL Cluster 7.3++)

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

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

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

MySQL Cluster 7.3 Replicação Geográfica

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Distribuição Geográfica

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Distribuição Geográfica

MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com

Thanks...

Wagner Bianchi’s

Twitter: @wagnerbianchijrSkype: wbianchijrE-mail: me@wagnerbianchi.com