Perguntas Frequentes
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.
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:
- Três Ubuntu 16.04 nós com um mínimo de 1 GB de RAM e rede privada habilitado
- Usuário não-root com privilégios sudo para cada nó ( Setup inicial do servidor com o Ubuntu 16.04 explica como configurar isso.)
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 |
---|
|
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 |
---|
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 |
---|
|
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 |
---|
|
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 |
---|
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 |
---|
|
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 |
---|
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 |
---|
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 |
---|
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 |
---|
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 |
---|
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 .