Perguntas Frequentes

Como criar uma infraestrutura multi-node no MySQL no Ubuntu 16.04
Última atualização 4 ano(s) atrás

Introdução

MySQL cluster é uma tecnologia de software que fornece alta disponibilidade e rendimento. Se você já está familiarizado com outras tecnologias de cluster, você vai se familiarizar com o cluster MySQL. Em suma, há um ou mais nós de gestão que controlam os nós de dados (onde os dados são armazenados). Após consulta com o nó de gerenciamento, os clientes (clientes MySQL, servidores ou APIs nativas) conectam-se diretamente aos nós de dados.

Você pode se perguntar como a replicação do MySQL está relacionada com clusters MySQL. Com o aglomerado não há replicação típica de dados, mas em vez que existe a sincronização dos nós de dados. Para o efeito, um mecanismo de dados especial deve ser usado - NDBCluster (NDB). Pense no cluster como um único ambiente MySQL lógico com componentes redundantes. Assim, um cluster MySQL pode participar de replicação com outros clusters MySQL.

MySQL cluster funciona melhor em um ambiente compartilhado. Idealmente, há dois componentes que devem compartilhar o mesmo hardware. Para simplificar, a fins de demonstração, vamos limitar-nos a usar apenas três nós. Haverá dois nós que atuam como nós de dados que são a sincronização de dados entre si. A terceiro nó vai ser usado para o gestor de cluster e ao mesmo tempo para o servidor / cliente MySQL. Se você tem mais nós, você pode adicionar mais nós de dados, separar o gerenciador de clusters do servidor / cliente MySQL, e até mesmo adicionar mais nós como gestores de clusters e servidores MySQL / clientes.

image

Pré-requisitos

Você vai precisar de um total de três nós - um nó para o gerenciador de clusters MySQL e o servidor / cliente MySQL e dois nós para os redundantes nós de dados MySQL.

No mesmo centro de dados DigitalOcean, criar os seguintes nós com redes privadas habilitadas:

MySQL cluster armazena uma grande quantidade de informação na RAM. Cada nó deve ter pelo menos 1 GB de RAM.

Como mencionado no tutorial rede privada , certifique-se de registros personalizados de configuração para os 3 nós. Por uma questão de simplicidade e conveniência, usaremos os seguintes registros personalizados para cada nó no /etc/hosts file:

10.XXX.XX.X node1.mysql.cluster
10.YYY.YY.Y node2.mysql.cluster
10.ZZZ.ZZ.Z manager.mysql.cluster

Por favor, substitua os IPs destacadas com os IPs privados de seus nós correspondentemente.

Salvo indicação em contrário, todos os comandos que requerem privilégios de root neste tutorial deve ser executado com um usuário não-root com privilégios sudo.

Passo 1 - Download e instalação MySQL Cluster

No momento da escrita deste tutorial, a última versão GPL do cluster MySQL é 7.4.11. O produto é construído em cima do MySQL 5.6 e inclui:

  • Software gerenciador de clusters
  • Software gerenciador de nó de dados
  • MySQL 5.6 servidor e binários do cliente

Você pode baixar a versão gratuita, geralmente disponíveis (GA) MySQL Cluster da página oficial de download de cluster MySQL . A partir desta página, escolher o pacote de plataforma Debian Linux, que também é adequado para Ubuntu. Também certifique-se de selecionar o de 32 bits ou a versão de 64-bit dependendo da arquitetura de seus nós. Enviar o pacote de instalação para cada uma de seus nós.

A instrução de instalação será a mesma para todos os nós, por isso, concluir essas etapas em todos os 3 nós.

Antes de iniciar a instalação, o libaio1 pacote deve ser instalado uma vez que é uma dependência:

$ sudo apt-get install libaio1

Depois disso, instale o pacote de cluster MySQL:

$ sudo dpkg -i mysql-cluster-gpl-7.4.11-debian7-x86_64.deb

Agora você pode encontrar a instalação do cluster MySQL no diretório /opt/mysql/server-5.6/ .Vamos trabalhar especialmente com o diretório bin ( /opt/mysql/server-5.6/bin/ ), onde todos os binários estão.

Os mesmos passos de instalação deve ser realizada em todos os três nós, independentemente do fato de que cada um terá função diferente - gerente o nó de dados.

Em seguida, vamos configurar o gerenciador de clusters MySQL em cada nó.

Passo 2 - Configurando e Iniciando o Cluster Manager

Nesta etapa, vamos configurar o gerenciador de clusters MySQL ( manager.mysql.cluster ). Sua configuração adequada irá garantir a sincronização correta e distribuição de carga entre os nós de dados.Todos os comandos devem ser executados em nó manager.mysql.cluster .

O gerenciador de cluster é o primeiro componente que tem de ser iniciado em qualquer cluster. Ele precisa de um arquivo de configuração que é passado como um argumento para o seu arquivo binário. Por conveniência, vamos usar o arquivo /var/lib/mysql-cluster/config.ini para a sua configuração.

No manager.mysql.cluster nó, primeiro deve-se criar o diretório onde esse arquivo residirá (/var/lib/mysql-cluster ):

$ sudo mkdir / var / lib / mysql-cluster

Em seguida, crie um arquivo e comece a editá-lo com nano:

$ sudo nano /var/lib/mysql-cluster/config.ini

Este arquivo deve conter o seguinte código:

/var/lib/mysql-cluster/config.ini
[ndb_mgmd]
# Management process options:
hostname=manager.mysql.cluster  # Hostname of the manager
datadir=/var/lib/mysql-cluster  # Directory for the log files

[ndbd]
hostname=node1.mysql.cluster    # Hostname of the first data node
datadir=/usr/local/mysql/data   # Remote directory for the data files

[ndbd]
hostname=node2.mysql.cluster    # Hostname of the second data node
datadir=/usr/local/mysql/data   # Remote directory for the data files

[mysqld]
# SQL node options:
hostname=manager.mysql.cluster  # In our case the MySQL server/client is on the same Droplet as the cluster manager

Para cada um dos componentes acima nós definimos um hostname parâmetro. Esta é uma medida de segurança importante porque somente o nome do host especificado será permitido para se conectar com o gerente e participar do cluster de acordo com seu papel designado.

Além disso, os hostname parâmetros especificam a interface que o serviço será executado. Isso é importante para a segurança, porque no nosso caso, os nomes de host acima apontam para IPs privados que temos especificadas no /etc/hosts arquivos. Assim, você não pode acessar qualquer um dos serviços acima do lado de fora da rede privada.

No arquivo acima, você pode adicionar mais componentes redundantes, como nós de dados (ndbd) ou servidores MySQL (mysqld) por apenas definir instâncias adicionais exatamente da mesma maneira.

Agora você pode iniciar o gerenciador, pela primeira vez, executando o ndb_mgmd binário e especificando o arquivo de configuração com o -f argumento como este:

$ sudo /opt/mysql/server-5.6/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini

Você deverá ver uma mensagem sobre bem-sucedido iniciar semelhante a este:

Output of ndb_mgmd
MySQL Cluster Management Server mysql-5.6.29 ndb-7.4.11

Você provavelmente gostaria de ter o serviço de gestão iniciado automaticamente com o servidor. O lançamento do cluster GA não vem com um script de inicialização adequado, mas há alguns disponíveis online. Para o início você pode simplesmente adicionar o comando de início para o arquivo /etc/rc.local e o serviço será iniciado automaticamente durante a inicialização. Primeiro, porém, você terá que se certificar de que /etc/rc.local é executado durante a inicialização do servidor. No Ubuntu 16.04 este requer a execução de um comando adicional:

$ sudo systemctl enable rc-local.service

Em seguida, abra o arquivo /etc/rc.local para edição:

$ sudo nano /etc/rc.local

Adicionar o comando de partida antes da exit linha como esta:

/etc/rc.local
...
/opt/mysql/server-5.6/bin/ndb_mgmd -f /var/lib/mysql-cluster/config.ini
exit 0

Salve e saia do arquivo.

O gerente de cluster não tem que correr o tempo todo. Ele pode ser iniciado, parado e reiniciado sem tempo de inatividade para o cluster. É necessário apenas durante o arranque inicial dos nós do cluster e o servidor / cliente MySQL.

Passo 3 - Configurando e iniciando os nós de dados

Em seguida, vamos configurar os nós de dados ( node1.mysql.cluster e node2.mysql.cluster ) para armazenar os arquivos de dados e apoiar adequadamente o motor NDB. Todos os comandos devem ser executados em ambos os nós. Você pode começar com node1.mysql.cluster e, em seguida, repetir exatamente os mesmos passos em node2.mysql.cluster .

Os nós de dados ler a configuração a partir do arquivo de configuração do MySQL padrão /etc/my.cnf e mais especificamente a parte depois da linha [mysql_cluster] . Criar este arquivo com nano e começar a editá-lo:

$ sudo nano /etc/my.cnf

Especifique o nome do host do gerente como este:

/etc/my.cnf
[mysql_cluster]
ndb-connectstring=manager.mysql.cluster

Salve e saia do arquivo.

Especificando a localização do gerente é a única configuração necessária para o motor de nó para iniciar.O resto da configuração será retirado o gerente diretamente. Em nosso exemplo, o nó de dados vai descobrir que seu diretório de dados é /usr/local/mysql/ conforme a configuração do gerenciador. Este diretório tem que ser criado no nó. Você pode fazê-lo com o comando:

$ sudo mkdir -p /usr/local/mysql/data

Depois você pode iniciar o nó de dados pela primeira vez com o comando:

$ sudo /opt/mysql/server-5.6/bin/ndbd

Depois de um início bem sucedido você deve ver uma saída semelhante:

Output of ndbd
2016-05-11 16:12:23 [ndbd] INFO     -- Angel connected to 'manager.mysql.cluster:1186'
2016-05-11 16:12:23 [ndbd] INFO     -- Angel allocated nodeid: 2

Você deve ter o serviço ndbd iniciado automaticamente com o servidor. O lançamento do cluster GA não vem com um script de inicialização adequado para isso também. Assim como fizemos para o gerenciador de clusters, vamos adicionar o comando de inicialização para o /etc/rc.local arquivo. Mais uma vez, você terá de se certificar de que /etc/rc.local é executado durante a inicialização do servidor com o comando:

$ sudo systemctl enable rc-local.service

Em seguida, abra o arquivo /etc/rc.local para edição:

$ sudo nano /etc/rc.local

Adicione o comando de partida antes do exit linha como esta:

/etc/rc.local

...

/opt/mysql/server-5.6/bin/ndbd

exit 0

Salve e saia do arquivo.

Depois de terminar com o primeiro nó, repetir exatamente os mesmos passos no outro nó, que é node2.mysql.cluster em nosso exemplo.

Passo 4 - Configurando e iniciando o servidor MySQL e cliente

Um servidor MySQL padrão, tal como o que está disponível em padrão repositório apt do Ubuntu, não suporta o motor de cluster MySQL NDB. É por isso que você precisa da instalação do servidor MySQL personalizado. O pacote de cluster que já instalado nos três nós vem com um servidor MySQL e um cliente também. Como já mencionado, vamos usar o servidor MySQL e o cliente no nó de gerenciamento ( manager.mysql.cluster ).

A configuração é armazenada novamente no arquivo padrão /etc/my.cnf . Em manager.mysql.cluster , abra o arquivo de configuração:

$ sudo nano /etc/my.cnf

Em seguida, adicione a seguinte linha a ele:

/etc/my.cnf
[mysqld]
ndbcluster # run NDB storage engine
...

Salve e saia do arquivo.

De acordo com as melhores práticas, o servidor MySQL deve ser executado em seu próprio usuário (mysql ), que pertence a seu próprio grupo (novamente mysql ). Então vamos criar o primeiro do grupo:

$ sudo groupadd mysql

Em seguida, crie o mysql usuário pertencente a esse grupo e se certificar de que não pode usar shell, definindo seu caminho shell para /bin/false como este:

$ sudo useradd -r -g mysql -s /bin/false mysql

O último requisito para a instalação do servidor MySQL personalizado é criar o banco de dados padrão. Você pode fazê-lo com o comando:

$ sudo /opt/mysql/server-5.6/scripts/mysql_install_db --user=mysql

Para iniciar o servidor MySQL vamos usar o script de inicialização a partir /opt/mysql/server-5.6/support-files/mysql.server . Copiá-lo para o diretório scripts de inicialização padrão sob o nome mysqld como este:

$ sudo cp /opt/mysql/server-5.6/support-files/mysql.server /etc/init.d/mysqld

Ativar o script de inicialização e adicioná-lo aos níveis de execução padrão com o comando:

$ sudo systemctl enable mysqld.service

Agora podemos iniciar o servidor MySQL pela primeira vez manualmente com o comando:

$ sudo systemctl start mysqld

Como um cliente MySQL vamos usar novamente o binário costume que vem com a instalação do cluster. Ele tem o seguinte caminho: /opt/mysql/server-5.6/bin/mysql . Por conveniência vamos criar um link simbólico para ele no padrão /usr/bin caminho:

$ sudo ln -s /opt/mysql/server-5.6/bin/mysql /usr/bin/

Agora você pode iniciar o cliente a partir da linha de comando, basta digitar mysql como este:

$ mysql

Você deverá ver uma saída semelhante a:

Output of ndb_mgmd
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 3
Server version: 5.6.29-ndb-7.4.11-cluster-gpl MySQL Cluster Community Server (GPL)

Para sair do prompt do MySQL, simplesmente digite quit ou pressione simultaneamente CTRL-D .

A descrição acima é a primeira seleção para mostrar que o cluster MySQL, servidor e cliente estão funcionando. Em seguida, vamos passar por testes mais detalhados para confirmar o cluster está a funcionar corretamente.

Testando o Cluster

Neste ponto, nosso cluster MySQL é simples com um servidor de cliente, um servidor, um gerente, e dois nós de dados dever-se completa. A partir do nó gerenciador de clusters ( manager.mysql.cluster ) abrir o console de gerenciamento com o comando:

$ sudo /opt/mysql/server-5.6/bin/ndb_mgm

Agora o prompt deve mudar para o console de gerenciamento de cluster. Parece que este:

Inside the ndb_mgm console
-- NDB Cluster -- Management Client --
ndb_mgm>

Uma vez dentro do console de executar o comando SHOW como este:

ndb_mgm> SHOW

Você deve ver uma saída semelhante a esta:

Output of ndb_mgm
Connected to Management Server at: manager.mysql.cluster:1186
Cluster Configuration
---------------------
[ndbd(NDB)]     2 node(s)
id=2    @10.135.27.42  (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0, *)
id=3    @10.135.27.43  (mysql-5.6.29 ndb-7.4.11, Nodegroup: 0)

[ndb_mgmd(MGM)] 1 node(s)
id=1    @10.135.27.51  (mysql-5.6.29 ndb-7.4.11)

[mysqld(API)]   1 node(s)
id=4    @10.135.27.51  (mysql-5.6.29 ndb-7.4.11)

O exposto acima mostra que existem dois nós de dados com IDs 2 e 3. Eles são ativos e ligado. Há também um nó de gerenciamento com id 1 e um servidor MySQL com id 4. Você pode encontrar mais informações sobre cada id, digitando o seu número com o comando STATUS como este:

ndb_mgm> 2 STATUS

O comando acima iria mostrar-lhe o status do nó 2, juntamente com suas versões do MySQL e NDB:

Output of ndb_mgm
Node 2: started (mysql-5.6.29 ndb-7.4.11)

Para sair do console de gestão de quit .

O console de gerenciamento é muito poderoso e lhe dá muitas outras opções para gerenciar o cluster e seus dados, incluindo a criação de um backup online. Para mais informações consulte a documentação oficial .

Vamos ter um teste com o cliente MySQL agora. A partir do mesmo nó, iniciar o cliente com o mysql comando para o usuário root do MySQL. Por favor lembrar que criamos um link simbólico para ele mais cedo.

$ mysql -u root

Seu console vai mudar para o console do cliente MySQL. Uma vez dentro do cliente MySQL, execute o comando:

mysql> Show de NDB STATUS \ G

Agora você deve ver todas as informações sobre o arranque do motor de cluster NDB com os detalhes de conexão:

Output of mysql

*************************** 1. row ***************************
  Type: ndbcluster
  Name: connection
Status: cluster_node_id=4, connected_host=manager.mysql.cluster, connected_port=1186, number_of_data_nodes=2, number_of_ready_data_nodes=2, connect_count=0
...

A informação mais importante do alto é o número de nós prontos - 2. Esta redundância permitirá que o cluster MySQL para continuar a funcionar mesmo se um dos nós de dados falhar enquanto. Ao mesmo tempo, suas consultas SQL serão carregar equilibrada para os dois nós.

Pode tentar desligar um dos nós de dados, a fim de testar a estabilidade de cluster. A coisa mais simples seria apenas para reiniciar todo o nó, a fim de ter um teste completo do processo de recuperação. Você vai ver o valor de number_of_ready_data_nodes mudar para 1 e de volta para 2 novamente como o nó é reiniciado.

Trabalhar com o mecanismo NDB

Para ver como o cluster realmente funciona, vamos criar uma nova tabela com o motor NDB e inserir alguns dados nela. Por favor note que, a fim de utilizar a funcionalidade de cluster, o motor deve ser NDB. Se você usar InnoDB (padrão) ou qualquer outro mecanismo que não seja NDB, você não vai fazer uso do cluster.

Primeiro, vamos criar um banco de dados chamado cluster com o comando:

mysql> CREATE DATABASE cluster;

Em seguida, mudar para o novo banco de dados:

mysql> USE cluster;

Agora, criar uma tabela simples chamada cluster_test como este:

mysql> CREATE TABLE cluster_test (name VARCHAR(20), value VARCHAR(20)) ENGINE=ndbcluster;

Temos explicitamente especificado acima o motor ndbcluster , a fim de fazer uso do aglomerado. Em seguida, podemos começar a inserir dados com uma consulta como esta:

mysql> INSERT INTO cluster_test (name,value) VALUES('some_name','some_value');

Para verificar os dados foram inseridos, executar uma consulta seleção como esta:

mysql> SELECT * FROM cluster_test;

Quando você está inserindo e selecionando dados como este, você está de balanceamento de carga suas consultas entre todos os nó de dados disponíveis, que são dois em nosso exemplo. Com este dimensionamento para fora você beneficiar tanto em termos de estabilidade e desempenho.

Conclusão

Como vimos neste artigo, a criação de um cluster MySQL simples e fácil. Claro, existem muitas mais opções avançadas e recursos que valem a pena dominar antes de colocar o cluster para o ambiente de produção. Como sempre, certifique-se de ter um processo de teste adequado porque alguns problemas poder ser muito difíceis de resolver mais tarde. Para mais informações e leitura adicional por favor consulte a documentação oficial do MySQL cluster .


Por favor, aguarde!

Por favor aguarde... vai levar um segundo!