Cluster MySQL: Glossário.

MySQL.svg

O que é um Cluster?

No sentido genérico, um cluster é um conjunto de computadores funcionando em unidade para realizar uma determinada tarefa.

Cluster (Imagem: WikiMedia.)
Cluster (Imagem: WikiMedia.)

Um Cluster NDB é um mecanismo de armazenamento, usado pelo MySQL, para implementar o armazenamento de dados, recuperação e gestão distribuída entre os vários computadores que compõem o sistema.

O que é um Cluster MySQL

O termo MySQL Cluster se refere a um grupo de computadores fazendo uso de um mecanismo NDB para dar suporte ao banco de dados em um arquitetura shared-nothing com um sistema de armazenamento em memória principal (in memory).

O que é arquitetura shared-nothing?

A tradução literal livre é “nada compartilhado” e se refere a um sistema de computação distribuída, com unidades auto suficientes, sem ponto crítico de falha e que não compartilham armazenamento em memória ou disco. (Fonte: Wikipedia.)

O glossário

Para melhor ajudar iniciantes que desejam aprender sobre como construir um cluster MySQL, seguem mais termos, de acordo com os manuais oficiais da Oracle. Note que a maioria dos termos se encontra em inglês – por que desejamos facilitar a vida de quem está buscando este glossário para entender melhor algum outro material em inglês.

Configuration files

São arquivos contendo diretivas de funcionamento e informações concernentes ao nosso cluster, seus hosts (unidades hospedeiras, anfitriãs) e seus nós. São lidos pelo sistema assim que o cluster é iniciado.

Backup

Uma cópia integral dos dados do cluster, suas transações e seus arquivos de log salvos em discos ou em outros dispositivos de armazenamento.

Restauro

Ato de levar o cluster a um estado préviamente salvo no backup.

Checkpoint

Grosso modo, quando os dados são gravados em disco, diz-se que chegamos a um checkpoint. No caso do Cluster, para sermos mais específicos, é um ponto no tempo em que todas as transações autorizadas já foram armazenadas em disco.
No que tange o mecanismo de armazenamento NDB, podemos citar dois tipos de checkpoints que trabalham em conjunto para assegurar que uma visão consistente dos dados do cluster seja mantida:

  • Local Checkpoint (LCP): Este é o checkpoint que se refere especificamente a um nó. Um LCP envolve a gravação de todos os dados de um nó no disco, o que ocorre a cada x minutos — o intervalo x varia em função de fatores tais como a quantidade de dados contida em cada nó, o nível de atividade do cluster, entre outros.
  • Global Checkpoint (GCP): Este ocorre a cada x segundos, quando as transações para todos os nós são sincronizadas e o redo-log é liberado pro disco.
Cluster host

Um computador que seja parte de um Cluster MySQL. Um cluster tem tanto uma estrutura física como lógica. Fisicamente, consiste de um conjunto de computadores (cluster hosts) ou hosts. Consulte os termos (node) ou grupo de nós (group nodes).

Node, cluster node

…ou , refere-se a uma unidade lógica ou funcional de um Cluster MySQL. Dentre do contexto do Cluster MySQL, usamos o termo antes para nos referir a um processo em vez de um componente físico.
Há 3 tipos diferentes de nós requeridos para implementar um Cluster MySQL funcional. São os seguintes:

  1. Management (MGM) nodes ou nós de gestão/gerenciamento:
    • organizam os outros nós dentro do Cluster MySQL;
    • fornecem dados de configuração aos outros nós;
    • iniciam e terminam nós (processos);
    • entre outras funções.
  2. Nós SQL (SQL nodes): instâncias do servidor MySQL que funcionam como front ends pros dados mantidos nos nós de armazenamento do cluster. Clientes que desejem armazenar, recuperar ou alterar dados podem acessar um nó SQL tal como se estivessem acessando qualquer outro Servidor MySQL — fazendo uso das APIs e dos métodos de autenticação costumeiros; a distribuição subjacente de dados entre os node groups é transparente entre os usuários e os aplicativos. Os SQL nodes acessam integralmente os dados no banco do cluster sem se “preocuparem” com a forma como se encontram distribuídos entre os diferentes nós de armazenamento ou cluster hosts.
  3. Data nodes: também conhecidos como storage nodes ou, em bom português (quanta pretensão da minha parte!), nós de dados ou nós de armazenamento. Enfim, a função destes nós é armazenar os dados reais. A tabela de dados fragmentados é guardada em um conjunto de node groups — cada qual guarda um subconjunto diferente da tabela de dados. Cada nó, sendo parte de um grupo de nós, armazena uma réplica do fragmento pelo qual o grupo é responsável. Atualmente, um único cluster pode carregar um total de 48 nós de dados;

Nada impede que mais de um nó coexistam em uma única máquina. Mais do que isto: é possível ter um cluster completo rodando dentro de uma única máquina — embora seja totalmente desaconselhável em um ambiente de produção, pode ser um cenário muito útil e até recomendável em um ambiente de aprendizado.
Lembre-se, no contexto de um Cluster MySQL, quando falamos em hospedeiros, ou hosts, nos referimos a um componente físico do cluster, no qual um nó é um compoente lógico ou funcional (ou seja, um processo).

Node group

Um conjunto de nós de dados (data nodes). Todos os nós de dados em um conjunto, contém os mesmos dados (fragmentos) e cada nó pertencente a um determinado grupo precisa estar hospedado em uma máquina diferente.

Node failure

Um Cluster MySQL não precisa de cada um de seus nós para funcionar. O cluster pode continuar rodando, mesmo com a falha de um ou mais nós. O número preciso de falhas em nós que um cluster pode tolerar depende do número total destes e das configurações do sistema.

Node restart

É o processo de reiniciar um dos nós do cluster que tenha falhado.

Initial node restart

É o processo de iniciar um nó cluster sem o seu sistema de arquivos. É útil em alguns casos de upgrade de software e em outras circunstâncias específicas.

System crash ou system failure

Falhas no sistema, como um todo, podem ocorrer em casos de haver tantos nós do cluster com erros que a estabilidade geral do sistema fica comprometida ou não pode ser mais garantida.

System restart

É o processo de reiniciar o cluster e seu estado a partir de logs de disco e checkpoints.

Fragmento

Uma porção de uma tabela. Em um mecanismo de armazenamento NDB, uma tabela é fracionada e armazenada em fragmentos. No Cluster MySQL as tabelas são fragmentadas para facilitar o balanceamento da carga entre máquinas e nós.
Nota: É possível encontrar o termo “partição” (partition) na documentação formal do MySQL, com o mesmo significado. No entanto, o termo recomendado é “fragmento” (fragment).

Replica

No mecanismo NDB de armazenamento, cada fragmento de tabela armazena os números de replicas contidos em outros nós de armazenamento — para manter a redundância. Atualmente, pode haver até quatro réplicas por fragmento.

Transporter

Protocolo que proporciona transferência de dados entre nós. O Cluster MySQL atualmente suporta até 4 tipos diferentes de transporter connections: TCP/IP (local), TCP/IP (remoto), SCI, e SHM.

  • O TCP/IP é, naturalmente, aquele mesmo protocolo que dá sustentação ao HTTP, FTP etc na Internet, que você já conhece;
  • O SCI (Scalable Coherent Interface) é um protocolo veloz usado na montagem de sistemas multiprocessador e aplicações de processamento paralelo. O uso deste protocolo com o Cluster MySQL requer hardware especializado;
  • SHM é sigla para Unix-style shared memory segments ou segmentos de memória compartilhada “no estilo do Unix”, em uma tradução literal.

Nota: O transporter do cluster é um protocolo interno. Aplicações usando o MySQL se comunicam com os nós SQL tal como o fazem com outras versões do MySQL Server (via TCP/IP ou Windows named pipes/Unix Sockets). Através de suas APIs padrão, podemos enviar queries e receber resultados.

NDB

Sigla para Network Database. Refere-se ao mecanismo de armazenamento usado para fazer funcionar o MySQL Cluster. O NDB suporta os tipos mais comuns de colunas e comandos MySQL, além de ser ACID-compliant. Este mecanismo também oferece suporte pleno a transações (commits e rollbacks).

share-nothing architecture

Conceito de arquitetura ideal para um Cluster MySQL. Em um ambiente genuinamente share-nothing, cada nó roda em um host separado. A vantagem desta concepção é que, nela, nenhum host ou nó pode sozinho derrubar ou se tornar um gargalo pras atividades do sistema como um todo.

In-memory storage

Toda informação armazenada em cada nó de dado é guardado na memória do computador em que este se encontra hospedado. Para cada nó de dados (data node) no conjunto, é necessário ter disponível uma quantidade de RAM igual ao tamanho dos dados multiplicado pelo número de replicas, dividido pelo número de nós de dados.
Para exemplificar, se o banco de dados ocupa um gigabyte de memória, e você deseja configurar o cluster com quatro replicas e 8 nós de dados, uma reserva de, no mínimo, 500 MB de memória será necessária por nó. Some a este valor os requisitos necessários para rodar o sistema operacional e os demais aplicativos da máquina.

Tabela

Como de hábito, no contexto de um banco de dados relacional, o termo “tabela” denota um conjunto ordenado de registros estruturados e idênticos. Em um Cluster MySQL, um banco de dados é armazenado em um nó de dados na forma de um conjunto de fragmentos — cada um dos quais é replicado em outros nós de dados. Este conjunto de dados, que reproduz o mesmo fragmento ou conjunto de fragmentos, é chamado de grupo de nós (node group).

programas do Cluster

São programas em linha de comando usados para rodar, configurar e administrar o Cluster MySQL. O que inclui ambos daemons de servidor:

  • ndbd – daemon que executa o processo de dados do nó;
  • ndb_mgmd – executa o servidor de gestão.
Programas clientes
  • ndb_mgm – O cliente de gestão (oferece uma interface para executar os programas de gestão)
  • ndb_waiter – Usado para verificar o status de todos os nós em um cluster
  • ndb_restore – Recupera dados do cluster do backup
Event log

O Cluster MySQL registra (log) os eventos por categoria (início, desligamento, erros, checkpoints etc.), prioridade e pela sua gravidade.
Os registros são divididos em 2 tipos:

  • Cluster log – mantém um registro de todos os eventos relacionados ao cluster, como um todo;
  • Node log – um registro (log) separado é criado e mantido para cada nó individualmente.

Sob circunstâncias normais, é necessário e suficiente manter e examinar apenas o log do cluster (cluster log). Os node logs, normalmente só são necessários para desenvolvedores de aplicativos e para fins de depuração.

Publicado por

Elias Praciano

Autor de tecnologia (livre, de preferência), apaixonado por programação e astronomia. Fã de séries, como "Rick and Morty" e "BoJack Horseman". Me siga no Twitter e vamos trocar ideias!

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *