Toda esta configuração será realizada no
CentOS 5.8 i386.
Lembrando que para este artigo, será necessário ter no mínimo 6 Servidores.
O que é MySQL Cluster?
O
MySQL Cluster é uma tecnologia de bancos de dados que mantém os dados em memória, e que tem como base, não compartilhar
recursos entre processos (shared nothing).
Quando se diz que os componentes do Cluster não compartilham nada, significa dizer que cada processo possui seus próprios discos, memória,
processador, e não utilizam nenhuma estratégia de armazenamento compartilhado de dados: SAN, NFS, servidores de arquivos e etc
Em sua arquitetura, o MySQL Cluster apresenta basicamente 3 tipos de componentes:
- Management Nodes: estes são os nós, ou nodos, que são utilizados pelos administradores de bancos de dados para desempenhar tarefas de
gerenciamento do MySQL Cluster;
- Data ou Storage Node: este tipo de nó é responsável por armazenar e processar dados, com uma série de outros componentes que veremos mais à
frente;
- SQL ou API Node: nós responsáveis por fazer interface com o meio externo, recebendo todas as consultas SQL e enviando requisições para os Data
Nodes.
Passo inicial
O passo inicial é a criação do arquivo de configuração global, para que os componentes o leia e inicie o Cluster.
Tais arquivos podem ser globais ou locais, de maneira que configurações gerais são colocadas nas seções do arquivo globais e especificas, nos arquivos
locais.
O primeiro passo, é a criação do arquivo global (chamado por convenção de "config.ini"), o qual será lido por todas os componentes do Cluster via
rede, para que estes se unam em um mesmo processamento distribuído.
Perceba que, ao tratarmos dos Data Nodes, Management Nodes e SQL Nodes, utilizamos os nomes de seus binários: 'ndbd' ou 'ndbmtd', 'ndb_mgmd'
e 'sql', que é o 'mysqld', respectivamente.
Um arquivo de configuração global, para controle da configuração do MySQL Cluster, conta com a seguinte estrutura de seções (mais comuns):
- [ndb_mgmd] - mgm nodes
- [ndbd default] - global p/ data nodes
- [ndbd] - específico p/ data nodes
- [mysqld] - espacífico p/ sql nodes
- [api] - sql nodes ou cluster APIs
Durante o funcionamento do MySQL Cluster, cada nó atuará como um 'árbitro', enviando pequenos 'pings' para verificar se todos os nós estão
respondendo - Heartbeat.
Um nó será considerado como morto após a perda de três 'pings', também conhecidos como Heartbeats. Tais 'pings' são configurados através das
seguintes variáveis:
- HeartbeatIntervalDbDb: o tempo entre o envio de pings entre os Data Nodes;
- HeartbeatIntervalDbApi: o tempo entre o envio de pings entre Data Nodes e SQL Nodes.
A configuração dos Data Nodes, se dá dentro de grupos e a variável NoOfReplicas define a quantidade de grupos que existirá dentro do Cluster e
também a quantidade de partições de dados.
Se NoOfReplicas for configurado com o número 2, e teremos 2 Data Nodes no Cluster, teremos 2 grupos de Data Nodes.
Em caso de falha, pelo menos 50% dos nós em cada grupo deverá estar 'vivo' para que o Cluster não desista da operação.
- Recursos de Tecnologia que será utilizado neste How-To
- 6 máquinas virtuais rodando Sistema Operacional Centos na versão 5.8;
- Heartbeat 2.1;
- Haproxy 1.4.19;
- Servidores:
- 1. mgm-1 eth0 -> 192.168.50.1 (MGM) - mgm-1 eth1 -> 10.20.0.1(MGM)
- 2. mgm-2 eth0 -> 192.168.50.11(MGM) - mgm-2 eth1 -> 10.20.0.2(MGM)
- 3. ndb-1 -> 192.168.50.12(NDB)
- 4. ndb-2 -> 192.168.50.13(NDB)
- 5. sql-1 -> 192.168.50.14(SQL)
- 6. sql-2 -> 192.16850.15(SQL)
Download, Instalação e Configuração dos Pacotes
- Passo 1:
No servidor 'mgm-1' crie o "/opt/pacotes", e em seguida, faça o download dos pacotes necessários para o Cluster:
# mkdir -p /opt/pacotes
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-shared-compat-7.1.15-1.rhel5.i386.rpm
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-server-7.1.15-1.rhel5.i386.rpm
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-client-7.1.15-1.rhel5.i386.rpm
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-tools-7.1.15-1.rhel5.i386.rpm
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-storage-7.1.15-1.rhel5.i386.rpm
# wget ftp://mirror.switch.ch/pool/1/mirror/mysql/Downloads/MySQL-Cluster-7.1/MySQL-Cluster-gpl-management-7.1.15-1.rhel5.i386.rpm
# wget http://dl.fedoraproject.org/pub/epel/5/i386/haproxy-1.3.26-1.el5.i386.rpm
Ainda no servidor 'mgm-1', edite o arquivo "/etc/hosts" conforme o exemplo abaixo: