MySQL
Cluster
7.3
-‐
Implementação
Wagner
Bianchi
–
Oracle
ACE
Director
GUOB
2014
Edição
#
19
–
Ano
2014
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
ConfiguraNon
– 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
– ANvo/Passivo
– ANvo/ANvo
Ambiente
de
Testes
• Foram
disponibilizadas
7
máquinas
virtuais
CentOS
6.5
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!!
Ambiente
de
Testes
• Com
os
servidores
virtuais
prontos
e
papéis
definidos,
uNlize
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
• 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;
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.rpm
MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
MySQL-Cluster-shared-compat-gpl-7.3.5-1.el6.x86_64.rpm
MySQL-Cluster-shared-gpl-7.3.5-1.el6.x86_64.rpm
Componentes
do
Cluster
• 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
naNvo;
• start/stop/restart
dos
nós
de
dados;
• Responsável
pelo
processo
de
arbitra'on;
• É
iniciado
apontando
um
arquivo
de
configuração
GLOBAL:
[root@mycluster-node01 mgm]# ls
MySQL-Cluster-server-gpl-7.3.5-1.el6.x86_64.rpm
[root@mycluster-node01 mgm]# ndb_mgmd -f /usr/local/ndb/config01.ndb
MySQL Cluster Management Server mysql-5.6.17 ndb-7.3.5
Componentes
do
Cluster
• 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
mulN-‐threaded
(ndbmtd);
• Pode
ser
uNlizado
os
dois
em
uma
mesmo
ambiente;
• UNliza
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;
– TransacNon
Coordinator
– Local
Query
Handler
Componentes
do
Cluster
• Componentes
básicos
MySQL
Cluster:
– Storage/Data
Node
(ndbd/ndbmtd):
DATA
WRITE
192.168.0.103
Data/Storage
Node
192.168.0.102
Data/Storage
Node
NDBD/NDMTD
TRANSCATION
COORDINATOR
PK
HASH
DATA
READ
NDBD/NDMTD
LOCAL
QUERY
HANDLER
PK
HASH
192.168.0.106
API/SQL
Node
192.168.0.107
API/SQL
Node
Componentes
do
Cluster
• Iniciando
os
Data/Storage
Nodes
com
ndbd
(single-‐threaded)
– Storage/Data
Node
(ndbd/ndbmtd):
– MulN-‐Threaded
Data/Storage
Node
pode
ser
uNlizado
bastando
somente
trocar
o
binário
ndbd
por
ndbmtd.
[root@mycluster-node02 ~]# cat /etc/my.cnf
[ndbd]
# storage nodes connect string
ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186
[root@mycluster-node02 ~]# ndbd
2014-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 string
ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186
[root@mycluster-node03 ~]# ndbd
2014-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
Componentes
do
Cluster
• 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;
• É
Ndo
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;
[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 start
Starting MySQL......... SUCCESS!
Cluster
Auto-‐Sharding
• 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
downNme;
– suporte
à
adição
de
novas
funcionalidades,
promovendo
a
escala
de
acordo
com
as
necessidades
do
negócio;
– suporte
à
janelas
de
manutenção
programadas
...
sem
downNme!!
• 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
quanNdade
de
Data
Nodes
e
a
variável
NoOfReplicas;
4
Data
Nodes
e
NoOfReplicas=2
significa
que
o
auto-‐shard
será
realizado
para
garanNr
escalabilidade
e
conNnuidade
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
parNcionamento
horizontal,
[LINEAR]
KEY;
Arquivos
de
Configuração
• Dois
Npos
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ísNcas
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
Nckets
e
liberam
a
adesão
dos
demais
nós
(acompenhe
o
log);
Arquivo
de
Configuração
GLOBAL
• Definimos
as
seções
do
arquivo
GLOBAL
com
base
na
configurações
dos
nós
(arquivo
config.ini):
[ndb_mgmd]
# Management node 01
NodeId=1
Hostname=192.168.0.101
DataDir=/var/lib/mysql-cluster
[ndb_mgmd]
# Management node 02
NodeId=7
Hostname=192.168.0.106
DataDir=/var/lib/mysql-cluster
Arquivo
de
Configuração
GLOBAL
• Definimos
as
seções
dos
Data/Storage
Nodes:
[ndbd default]
DataDir=/var/lib/mysql-cluster
NoOfReplicas=2
DiskPageBufferMemory=16M
BackupDataDir=/stage # disco/partição/volume dedicada para armazenamento
[ndbd]
NodeId=2
Hostname=192.168.0.102
[ndbd]
NodeId=3
Hostname=192.168.0.103
Arquivo
de
Configuração
GLOBAL
• Definimos
as
seções
dos
SQL
nodes:
[mysqld]
NodeId=4
Hostname=192.168.0.104
[mysqld]
NodeId=5
Hostname=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
Arquivos
de
Configuração
LOCAL
• 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:
[ndbd]
ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186
stoponerror
nostart # se conecta ao management node mas não inicia
[mysqld]
server_id=5
ndbcluster
ndb-connectstring=192.168.0.101:1186,192,168.0.106:1186
Iniciando
o
Cluster
• 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
úlNmo,
inicie
os
SQL
Nodes,
pois,
somente
após
iniciar
os
Data
Nodes,
a
comunicação
dos
Ids
desNnados
ao
SQL
nodes
serão
liberados
para
cominucação
dentro
do
Cluster;
Rolling
Restart
• 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
1º
Management
Node
2º
Data
Nodes
3º
SQL
Nodes
Quando
se
altera
o
arquivo
de
configuração
GLOBAL
Quando
é
necessário
adicionar
novos
nós
ao
Cluster
Quando
uma
manutenção
é
necessária
Cluster
Troubleshoocng
• Arquivos
de
logs
– Arquivo
de
log
no
DataDir
do
Management
Node:
• Comandos
administraNvos
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
[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: 5014
2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 2 min: 0 max: 0 curr: 2
2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 3 min: 3144 max: 3144 curr: 1413
2014-07-26 16:33:52 [MgmtSrvr] INFO -- Node 3: Resource 4 min: 720 max: 720 curr: 130
Backup
Nacvo
• Como
existe
uma
alocação
de
divisão
especial
dos
dados
ou
fragmentos
entre
os
nós,
o
mais
interessante
é
o
client
de
backup
naNvo:
– É
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.
Single
Mode
• O
SINGLE
USER
MODE
servirá
para
garanNr
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
uNlização
de
ReplicaNon
Channel;
• Por
isso
é
interessante
deixar
um
slot
“vago”
no
arquivo
de
configuração
GLOBAL
para
que
o
backup
possa
ser
realizado;
ndb_mgm> ENTER SINGLE USER MODE 6
Single user mode entered
Access is granted for API node 6 only.
Single
Mode
–
cluster
logs
• Verificando
os
logs
do
cluster
no
Management
Node:
[root@mycluster-mgm01 tail -f /var/lib/mysql-cluster/ndb_1_cluster.log.ndb
2014-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
Single
Mode
–
Data
nodes
ndb_mgm> SHOW
Cluster 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
–
SQL
Nodes
[root@mycluster-node04 ~]# mysql -p
Enter password:
Welcome to the MySQL monitor. Commands end with ; or g.
Your MySQL connection id is 2
Server 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 test
Database 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
START
BACKUP
ndb_mgm> 2 REPORT BACKUPSTATUS # DATA NODE 2
Node 2: Backup not started
ndb_mgm> 3 REPORT BACKUPSTATUS # DATA NODE 3
Node 3: Backup not started
ndb_mgm> START BACKUP
Waiting for completed, this may take several minutes
Node 2: Backup 4 started from node 7
Node 2: Backup 4 started from node 7 completed
StartGCP: 13988 StopGCP: 13991
#Records: 9367 #LogRecords: 0
Data: 577996 bytes Log: 0 bytes
START
BACKUP
• 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á
uNlizado
com
a
opção
–m
do
ndb_restore
para
criar
os
bancos
de
dados
em
um
novo
Data
Node;
[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
Single
Mode
ndb_mgm> EXIT SINGLE USER MODE
Exiting single user mode in progress.
Use ALL STATUS or SHOW to see when single user mode has been exited.
ndb_mgm> ALL STATUS
Node 2: started (mysql-5.6.17 ndb-7.3.5)
Node 3: started (mysql-5.6.17 ndb-7.3.5)
ndb_mgm> SHOW
Cluster 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)
Restore
–
ndb_restore
• O
restore
de
backup
no
MySQL
Cluster
é
realizado
através
do
aplicaNvo
ndb_restore:
– Realizado
em
cada
Data/Storage
Node
do
cluster;
– UNliza
slot
[api]/[mysqld]
adicional
para
se
conectar
ao
cluster;
– Interessante
na
maioria
dos
casos
uNlizar
SINGLE
MODE;
• O
ndb_restore
requer
algumas
opções
para
que
o
restore
seja
realizado:
– -‐c
(connecNon_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,
uNlizado
para
criar
os
metadados
(pode
ser
omiNdo*);
– -‐r,
caminho
dos
arquivo
de
backup.
Restore
–
ndb_restore
(-‐n
2)
[root@mycluster-node02 ~]# ndb_restore -c 192.168.0.101:1186 -n 2 -b 5 -r /stage/BACKUP/BACKUP-5/
Nodeid = 2
Backup Id = 5
backup path = /stage/BACKUP/BACKUP-5/
Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.2.ctl'
File size 34508 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.6.17 ndb-7.3.5
Stop GCP of Backup: 15853
Connected 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 0
Processing data in table: world/def/Country(12) fragment 0
Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.2.log'
File size 52 bytes
Restored 52648 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
Restore
–
ndb_restore
(-‐n
3)
[root@mycluster-node03 ~]# ndb_restore -c 192.168.0.101:1186 -n 3 -b 5 -r /stage/BACKUP/BACKUP-5/
Nodeid = 3
Backup Id = 5
backup path = /stage/BACKUP/BACKUP-5/
Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.3.ctl'
File size 34508 bytes
Backup version in files: ndb-6.3.11 ndb version: mysql-5.6.17 ndb-7.3.5
Stop GCP of Backup: 15853
Connected 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 1
Processing data in table: world/def/Country(12) fragment 1
Opening file '/stage/BACKUP/BACKUP-5/BACKUP-5.3.log'
File size 52 bytes
Restored 52655 tuples and 0 log entries
NDBT_ProgramExit: 0 - OK
Objetos
do
Cluster
• 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íNcos;
– 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.
In-‐Memory
Tables
• Toda
tabela
criada
em
um
cluster
sem
a
direNva
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
quanNdade
de
espaço
alocado
em
memória
para
armazenamento
de
dados
de
tabelas
NDB;
• IndexMemory:
determina
a
quanNdade
de
espaço
alocado
em
memória
para
armazenamento
de
dados
conNdos
em
índices
do
Npo
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
Disk-‐based
Tables
• 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:
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
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
Node.JS/Memcached
Interação
direta
com
os
dados
do
Cluster
Interagindo
client/API
através
de
JavaScript
Disponível
através
de
um
Conector
Desenvolvimento
de
serviços
Real-‐Time
Possibilidade
de
uNlização
de
SQL/NoSQL
Obrigado!
Wagner
Bianchi,
Oracle
ACE
Director
–
me@wagnerbianchi.com
Wagner
Bianchi
é
Oracle
ACE
Director,
com
cerNficações:
• MySQL
CerNfied
Database
Cluster
Administrator
• MySQL
CerNfied
Database
Administrator
• MySQL
CerNfied
Developer
Formando
em
Gerenciamento
de
Bancos
de
Dados,
com
Pós-‐Graduação
em
Administração
de
Empresas
pela
FGV
e
MBA
em
Gerenciamento
de
Bancos
de
Dados
Oracle.
Blog:
wagnerbianchi.com
E-‐mail:
me@wagnerbianchi.com