Cluster MySQL - MySQL Cluster

Cluster MySQL
Desenvolvedor (s) Oráculo
lançamento inicial Novembro de 2004
Versão estável
8.0 / 11 de maio de 2021 ; há 4 meses ( 2021-05-11 )
Sistema operacional Plataforma cruzada
Disponível em inglês
Modelo RDBMS
Licença GNU General Public License (versão 2, com exceção de link ) ou EULA comercial
Local na rede Internet

MySQL Cluster é uma tecnologia que fornece clustering sem compartilhamento e auto-sharding para o sistema de gerenciamento de banco de dados MySQL . Ele é projetado para fornecer alta disponibilidade e alto rendimento com baixa latência, ao mesmo tempo que permite escalabilidade quase linear. MySQL Cluster é implementado através da NDB mecanismo de armazenamento ou NDBCLUSTER para MySQL ( "NDB" significa N EDE D ATA b ase).

Arquitetura

O cluster MySQL é projetado em torno de uma arquitetura compatível com ACID multi-master distribuída, sem nenhum ponto único de falha . O cluster MySQL usa fragmentação automática (particionamento) para expandir as operações de leitura e gravação em hardware comum e pode ser acessado por meio de APIs SQL e não SQL (NoSQL)

Replicação

Internamente, o cluster MySQL usa replicação síncrona por meio de um mecanismo de confirmação de duas fases para garantir que os dados sejam gravados em vários nós após a confirmação dos dados. (Isso contrasta com o que geralmente é conhecido como "Replicação do MySQL", que é assíncrona .) Duas cópias (conhecidas como réplicas ) dos dados são necessárias para garantir a disponibilidade. O cluster MySQL cria automaticamente “grupos de nós” a partir do número de réplicas e nós de dados especificados pelo usuário. As atualizações são replicadas de forma síncrona entre os membros do grupo de nós para proteção contra perda de dados e suporte para failover rápido entre nós.

Também é possível replicar de forma assíncrona entre clusters; isso às vezes é referido como "MySQL Cluster Replication" ou "replicação geográfica". Isso normalmente é usado para replicar clusters entre data centers para recuperação de desastres ou para reduzir os efeitos da latência da rede, localizando os dados fisicamente mais perto de um conjunto de usuários. Ao contrário da replicação MySQL padrão, a replicação geográfica do MySQL Cluster usa controle de simultaneidade otimista e o conceito de Epochs para fornecer um mecanismo para detecção e resolução de conflitos, permitindo clustering ativo / ativo entre data centers.

A partir do MySQL Cluster 7.2, o suporte para replicação síncrona entre data centers foi suportado com o recurso Multi-Site Clustering.

Particionamento de dados horizontal (fragmentação automática)

O cluster MySQL é implementado como um banco de dados multimestre totalmente distribuído, garantindo que as atualizações feitas por qualquer aplicativo ou nó SQL estejam instantaneamente disponíveis para todos os outros nós que acessam o cluster, e cada nó de dados pode aceitar operações de gravação.

Os dados nas tabelas MySQL Cluster (NDB) são particionados automaticamente em todos os nós de dados no sistema. Isso é feito com base em um algoritmo de hash baseado na chave primária da tabela e é transparente para o aplicativo final . Os clientes podem se conectar a qualquer nó no cluster e fazer com que as consultas acessem automaticamente os shards corretos necessários para satisfazer uma consulta ou confirmar uma transação. O cluster MySQL é capaz de oferecer suporte a consultas e transações entre fragmentos.

Os usuários podem definir seus próprios esquemas de particionamento. Isso permite que os desenvolvedores adicionem “reconhecimento de distribuição” aos aplicativos particionando com base em uma subchave comum a todas as linhas acessadas por transações de alta execução. Isso garante que os dados usados ​​para concluir as transações sejam localizados no mesmo fragmento, reduzindo assim os saltos da rede.

Armazenamento híbrido

O cluster MySQL permite que conjuntos de dados maiores do que a capacidade de uma única máquina sejam armazenados e acessados ​​em várias máquinas.

O cluster MySQL mantém todas as colunas indexadas na memória distribuída. As colunas não indexadas também podem ser mantidas na memória distribuída ou podem ser mantidas no disco com um cache de página na memória . O armazenamento de colunas não indexadas no disco permite que o MySQL Cluster armazene conjuntos de dados maiores do que a memória agregada das máquinas em cluster.

O cluster MySQL grava logs de redo no disco para todas as alterações de dados, bem como verifica os dados que apontam para o disco regularmente. Isso permite que o cluster se recupere de forma consistente do disco após uma interrupção total do cluster. Como os logs de Refazer são gravados de forma assíncrona em relação à confirmação da transação, um pequeno número de transações pode ser perdido se o cluster completo falhar, no entanto, isso pode ser atenuado usando a replicação geográfica ou cluster multi-site discutido acima. O atraso de gravação assíncrona padrão atual é de 2 segundos e é configurável. Os cenários normais de ponto único de falha não resultam em nenhuma perda de dados devido à replicação síncrona de dados dentro do cluster.

Quando uma tabela MySQL Cluster é mantida na memória, o cluster acessa apenas o armazenamento em disco para gravar registros Redo e pontos de verificação. Como essas gravações são sequenciais e os padrões de acesso aleatório limitados estão envolvidos, o MySQL Cluster pode atingir taxas de transferência de gravação mais altas com hardware de disco limitado em comparação com um RDBMS de cache tradicional baseado em disco. Este ponto de verificação para o disco de dados da tabela na memória pode ser desativado (em uma base por tabela) se a persistência baseada em disco não for necessária.

Não compartilhou nada

O cluster MySQL foi projetado para não ter um único ponto de falha . Desde que o cluster esteja configurado corretamente, qualquer nó, sistema ou peça de hardware pode falhar sem que todo o cluster falhe. O disco compartilhado ( SAN ) não é necessário. As interconexões entre os nós podem ser Ethernet padrão , Gigabit Ethernet , InfiniBand ou interconexões SCI .

APIs SQL e NoSQL

Como o cluster MySQL armazena tabelas em nós de dados, em vez de no servidor MySQL, existem várias interfaces disponíveis para acessar o banco de dados:

Gerenciador de cluster MySQL

Parte do MySQL Cluster CGE comercial, o MySQL Cluster Manager é uma ferramenta projetada para simplificar a criação e administração do banco de dados MySQL Cluster CGE, automatizando tarefas comuns de gerenciamento, incluindo escalonamento on-line, atualizações, backup / restauração e reconfiguração. O MySQL Cluster Manager também monitora e recupera automaticamente os nós de aplicativos e nós de gerenciamento do MySQL Server, bem como os nós de dados do MySQL Cluster.

Implementação

O cluster MySQL usa três tipos diferentes de nós (processos):

  • Nó de dados (processo ndbd / ndbmtd) : Esses nós armazenam os dados. As tabelas são fragmentadas automaticamente nos nós de dados, que também lidam de forma transparente com balanceamento de carga, replicação, failover e autocorreção.
  • Nó de gerenciamento (processo ndb_mgmd) : usado para configuração e monitoramento do cluster. Eles são necessários apenas para iniciar ou reiniciar um nó de cluster. Eles também podem ser configurados como arbitradores, mas isso não é obrigatório (em vez disso, os servidores MySQL podem ser configurados como arbitradores).
  • Nó de aplicação ou nó SQL (processo mysqld) : Um servidor MySQL (mysqld) que se conecta a todos os nós de dados para realizar o armazenamento e recuperação de dados. Este tipo de nó é opcional; é possível consultar nós de dados diretamente por meio da API NDB, seja nativamente usando a API C ++ ou uma das APIs NoSQL adicionais descritas acima.

Geralmente, espera-se que cada nó seja executado em um host físico separado, VM ou instância de nuvem (embora seja muito comum colocar nós de gerenciamento com servidores MySQL). Para a melhor prática, é recomendado não colocar os nós no mesmo grupo de nós em um único host físico (pois isso representaria um único ponto de falha).

Versões

A partir da versão 8.0 em diante, o MySQL Cluster é baseado diretamente nas versões 8.0 correspondentes do MySQL Server. Anteriormente, os números de versão do MySQL Cluster eram separados daqueles do MySQL Server - por exemplo, o MySQL Cluster 7.6 era baseado / continha o componente de servidor do MySQL 5.7.

As versões superiores do MySQL Cluster incluem todos os recursos das versões anteriores, além de alguns novos recursos.

Versões mais antigas (não estão mais em desenvolvimento):

  • Ndb incluído na árvore de origem do MySQL 5.1.X
  • MySQL Cluster 6.2 baseado em MySQL 5.1.A
Primeiro lançamento 'telco' ou 'edição de operadora'. Suporta 255 nós, alteração de tabela online, latência de replicação e melhorias de rendimento, etc.
  • MySQL Cluster 6.3 baseado em MySQL 5.1.B
Inclui backup compactado + LCP, suporte de replicação circular, detecção / resolução de conflitos, otimização de tabela etc.
  • MySQL Cluster 7.0 baseado em MySQL 5.1.C
Inclui nós de dados multi-threaded (ndbmtd), DDL transacional, suporte para Windows.
  • MySQL Cluster 7.1 baseado em MySQL 5.1.D
Inclui conectores ClusterJ e ClusterJPA

Versões atualmente disponíveis:

  • MySQL Cluster 7.2 baseado em MySQL 5.5
Inclui Adaptive Query Localization (empurra as operações JOIN para os nós de dados), Memcached API, replicação geográfica ativa / ativa simplificada, clustering de vários sites, aprimoramentos de escalabilidade do nó de dados, privilégios de usuário consolidados.
  • MySQL Cluster 7.3 baseado em MySQL 5.6
Inclui suporte para restrições de chave estrangeira , API Node.js / JavaScript e um instalador automático.
  • MySQL Cluster 7.4 baseado em MySQL 5.6
Inclui detecção e resolução de conflito aprimoradas, tempos de reinicialização de nó aprimorados, nova API de eventos.
  • MySQL Cluster 7.5 baseado em MySQL 5.7
Inclui suporte para conjuntos de dados maiores (mais de 128 TB por nó), escalabilidade de leitura aprimorada por meio de tabelas otimizadas de leitura, suporte SQL aprimorado.
  • MySQL Cluster 7.6 baseado em MySQL 5.7
Tempos de reinicialização e recuperação aprimorados, uso de espaço em disco reduzido, desempenho de junção aprimorado, nova ferramenta de importação, comunicação de memória compartilhada, reconhecimento de topologia aprimorado para nuvem.
  • MySQL Cluster 8.0 baseado em MySQL 8.0
Aumento no tamanho máximo da linha para 30kB, suporte para até 144 nós de dados, filtragem e junção distribuídas aprimoradas, suporte para junções externas paralelas e semi-junções, esquema e manipulação de ACL aprimorados, renomeação de coluna online, configuração simplificada, backup e restauração paralelos multithread, Melhorias de desempenho de dados de disco, suporte aprimorado para configurações de réplicas de 3 e 4, suporte para rede mesh de múltiplos soquetes, suporte para transformações de restauração, desempenho de gravação de Blob aprimorado, criptografia de backup, suporte para IPv6, configuração automática de threading, desempenho de recuperação aprimorado, multithreading de consulta aprimorado.

Requisitos

Para fins de avaliação, é possível executar o MySQL Cluster em um único servidor físico. Para implantações de produção, os requisitos mínimos do sistema são para 3 x instâncias / hosts:

  • 2 × nós de dados
  • 1 × Nó de Aplicativo / Gerenciamento

ou

  • 2 × Nó de Dados + Aplicativo
  • 1 × nó de gerenciamento

Configurações da seguinte forma:

  • SO: Linux , Solaris , Windows . macOS (apenas para desenvolvimento)
  • CPU: Intel / AMD x86 / x86-64, UltraSPARC
  • Memória: 1 GB
  • HDD: 3 GB
  • Rede: 1+ nós (Ethernet padrão - TCP / IP)

Dicas e recomendações sobre como implantar clusters de nível de produção de alto desempenho podem ser encontradas no Guia de Avaliação de Cluster MySQL e no Guia para Otimização de Desempenho do Banco de Dados de Cluster MySQL .

História

A MySQL AB adquiriu a tecnologia por trás do MySQL Cluster da Alzato , uma pequena empresa fundada pela Ericsson . O NDB foi originalmente projetado para o mercado de telecomunicações , com seus requisitos de alta disponibilidade e alto desempenho.

O cluster MySQL baseado no mecanismo de armazenamento NDB foi integrado ao produto MySQL , com sua primeira versão sendo no MySQL 4.1.

Apoio, suporte

MySQL Cluster é licenciado sob a licença GPLv 2. O suporte comercial está disponível como parte do MySQL Cluster CGE, que também inclui complementos de código-fonte não aberto, como MySQL Cluster Manager, MySQL Enterprise Monitor, além de MySQL Enterprise Security e MySQL Enterprise Audit.

Veja também

  • Galera Cluster , uma biblioteca genérica de replicação multimestre síncrona para bancos de dados transacionais, para MySQL e MariaDB. [1]
  • O Percona XtraDB Cluster também é uma combinação da biblioteca de replicação Galera e do MySQL com suporte a vários mestres.

Referências

  1. ^ "Notas de versão do MySQL NDB Cluster 8.0" . mysql.com .
  2. ^ Cluster CGE . MySQL. Obtido em 2013-09-18.
  3. ^ Oracle Corporation. "Benchmarks de cluster do MySQL: Oracle e Intel alcançam 1 bilhão de gravações por minuto" . mysql.com . Recuperado em 24 de junho de 2013 .
  4. ^ MySQL :: MySQL 5.6 Reference Manual :: 17.6.11 MySQL Cluster Replication Conflict Resolution . Dev.mysql.com. Obtido em 2013-09-18.
  5. ^ Bases de dados de replicação síncrona em centros de dados - você é insano? (Blog do MySQL da Oracle) . Blogs.oracle.com (03/10/2011). Obtido em 2013-09-18.
  6. ^ Jon Stephens, Mike Kruckenberg, Roland Bouman (2007): "MySQL 5.1 Cluster DBA Certification Study Guide" , pp. 86
  7. ^ Novos recursos do MySQL Cluster 7.2 , MySQL Developer Zone
  8. ^ MySQL Cluster 7.3 está agora com disponibilidade geral - uma visão geral , MySQL Cluster 7.3 Resumo
  9. ^ MySQL Cluster 7.4 GA: 200 milhões de QPS, replicação geográfica ativa-ativa e mais , MySQL Cluster 7.4 Resumo
  10. ^ O cluster 7.5 do MySQL agora é GA! , Blog do MySQL da Oracle, 18 de outubro de 2016
  11. ^ MySQL Cluster 7.6 já está amplamente disponível , Oracle's MySQL Blog, 1 de junho de 2018
  12. ^ "MySQL :: MySQL 8.0 Reference Manual :: 22.1.4 O que há de novo no cluster NDB" . dev.mysql.com .
  13. ^ Todd R. Weiss (14 de outubro de 2003). "MySQL adquirindo fornecedor de sistema de gerenciamento de dados Alzato" . Computerworld.com . Recuperado em 5 de novembro de 2012 .

links externos

MySQL

De outros