Wagner Bianchi, GUOB 2014 MySQL Cluster 7.3

  • 256 views
Uploaded on

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

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

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
No Downloads

Views

Total Views
256
On Slideshare
0
From Embeds
0
Number of Embeds
2

Actions

Shares
Downloads
7
Comments
0
Likes
1

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • SHOW ENGINE NDB STATUS;

Transcript

  • 1. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com By Wagner Bianchi Edição # 2 - 2014
  • 2. 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.0 Certified MySQL Developer 5.0 Certified MySQL Administrator 5.0 Certified MySQL Cluster Database Administrator 5.1 Blog: wagnerbianchi.com
  • 3. 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
  • 4. 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!!
  • 5. 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
  • 6. 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.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
  • 7. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 192.168.0.104 API/SQL Node 192.168.0.105 API/SQL Node 192.168.0.101 Management Node 192.168.0.200 HAProxy 192.168.0.103 Data/Storage Node 192.168.0.102 Data/Storage Node 192.168.0.106 Management Node Ambiente de Testes
  • 8. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com MySQL Cluster 7.3 New Features
  • 9. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Arquitetura MySQL Cluster 7.3
  • 10. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Arquitetura MySQL Cluster 7.3
  • 11. 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]# 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
  • 12. 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
  • 13. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com • Componentes básicos MySQL Cluster: – Storage/Data Node (ndbd/ndbmtd): Componentes do Cluster 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
  • 14. 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 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
  • 15. 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 start Starting MySQL......... SUCCESS!
  • 16. 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
  • 17. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Cluster Auto-Sharding
  • 18. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Cluster Auto-Sharding
  • 19. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com MySQL Cluster 7.3 Configuration
  • 20. 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
  • 21. 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 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
  • 22. 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-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
  • 23. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 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
  • 24. 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: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
  • 25. 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
  • 26. 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"
  • 27. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Iniciando o Cluster # #: Reading the cluster from Management Node # 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)
  • 28. 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
  • 29. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 1º Management Node 2º Data Nodes 3º SQL Nodes Rolling Restart Quando se altera o arquivo de configuração GLOBAL Quando é necessário adicionar novos nós ao Cluster Quando uma manutenção é necessária
  • 30. 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: 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
  • 31. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com MySQL Cluster 7.3 Backup & Restore
  • 32. 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
  • 33. 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 6 Single user mode entered Access is granted for API node 6 only.
  • 34. 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.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
  • 35. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 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 – Data nodes
  • 36. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com [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 Single Mode – SQL Nodes
  • 37. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 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
  • 38. 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
  • 39. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 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) Single Mode
  • 40. 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
  • 41. 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 = 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 2)
  • 42. 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 = 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 Restore – ndb_restore (-n 3)
  • 43. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com MySQL Cluster 7.3 Padrões de Projeto
  • 44. 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
  • 45. 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
  • 46. 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
  • 47. 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=8388608 4 rows in set (0.06 sec) Disk-based Tables
  • 48. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Foreign Keys (MySQL Cluster 7.3++)
  • 49. 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
  • 50. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com 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 utilização de SQL/NoSQL
  • 51. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com MySQL Cluster 7.3 Replicação Geográfica
  • 52. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Distribuição Geográfica
  • 53. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Distribuição Geográfica
  • 54. MySQL Cluster 7.3 at GUOB 2014, me@wagnerbianchi.com Thanks... Wagner Bianchi’s Twitter: @wagnerbianchijr Skype: wbianchijr E-mail: me@wagnerbianchi.com