Como tornar o cluster do MySQL completamente à prova de falhas?

0

Então eu quero configurar um servidor de banco de dados MySQL com alta disponibilidade - assim eu consegui dois dispositivos (Banana Pi) e segui um tutorial sobre como instalar o software de cluster MySQL. Eu sei que uma constelação de apenas dois dispositivos não é exatamente como o cluster MySQL deve ser usado, mas, para economizar custos de hardware, eu só tenho esses dois dispositivos por enquanto.

Até agora eu tenho a seguinte configuração (sqlnode1 e sqlnode2 são os nomes de host dos dispositivos):

Nós de gerenciamento (ndb_mgmd):

  • sqlnode1 (id do nó: 1)
  • sqlnode2 (id do nó: 2)

Mecanismos de armazenamento (ndbd):

  • sqlnode1: configurado para usar o nó de gerenciamento no localhost (id do nó: 3)
  • sqlnode2: configurado para usar o nó de gerenciamento no localhost (id do nó: 4)

Servidores MySQL (mysqld):

  • sqlnode1: configurado para usar os dois nós ndbd (id do nó: 5)
  • sqlnode2: configurado para usar os dois nós ndbd (id do nó: 6)

Então, basicamente, todo dispositivo tem um ndb_mgmd, ndbd e mysqld em execução.

O que eu gostaria de alcançar é que, se um dos dispositivos falhar, o outro dispositivo deve ser completamente utilizável (por alguns motivos muito específicos, não posso usar a replicação de banco de dados simples aqui).

Quando inicio todos os componentes, tudo está funcionando bem. Se eu alterar dados em um host MySQL, o outro aplicará as alterações imediatamente (e vice-versa).

No entanto, se eu desconectar o cabo LAN de um dos dispositivos, acontece o seguinte:

  • Desconectando sqlnode2: O nó em funcionamento (sqlnode1) trava por um curto período de tempo e continua a funcionar corretamente (o que é basicamente o que eu quero)
  • Desconectando sqlnode1: o nó em funcionamento (sqlnode2) trava por um curto período de tempo e não funciona de todo - todas as consultas terminam em "4009 Cluster Failure" e as consultas só começam a funcionar novamente depois de restaurar a conexão de rede do nó que caiu. Depois disso, monitorar o daemon ndb_mgmd mostra que o id do nó 4 (o ndbd no sqlnode2) foi forçado a desligar.

Em resumo, todo o sistema parece depender de sqlnode1 e eu realmente me pergunto por que isso está acontecendo porque pensei que, se um componente for excluído (e outro do mesmo tipo estiver disponível), tudo continuará em execução.

Eu segui este tutorial para configurar dois nós de gerenciamento diferentes: link

Eu senti falta de alguma coisa? Ou talvez eu tenha entendido mal como funciona o cluster do MySQL?

    
por D.Cent 09.08.2016 / 21:11

2 respostas

0

Eu resolvi meus problemas mudando para o cluster Galera MySQL que parece fazer exatamente o que eu quero / preciso.

    
por 11.08.2016 / 09:40
0

Eu não usei o Mysql Cluster, mas você deve ser capaz de fazer replicação nele, também o cluster mysql faz um pouco mais do que você provavelmente está precisando, se tudo que você precisa é de replicação. O cluster MySQL tem a capacidade de rotear para diferentes servidores sql em tempo real se um ficar inativo, reduzindo assim a necessidade de modificar os registros dns do nome do host toda vez ou de configurar um servidor sql temporário ou simplesmente deixá-lo inativo até ser corrigido. Pode fazer outras coisas também. Então, para ajudá-lo, sugiro usar a edição da comunidade MySQL como mais amigável para você do que o cluster do mysql.

Agarre a edição da comunidade mysql, isso permitirá que você tenha replicação, assim, você pode definir 1 servidor mysql como o mestre onde everthing é editado e o segundo servidor mysql é o escravo e pode apenas recuperar o que o mestre tem em um intervalo configurável. Você pode facilmente adicionar mais escravos no futuro também. Além disso, os escravos não precisam necessariamente estar em máquinas separadas também, você pode executar mais de uma instância do MySQL. No entanto, isso iria frustrar o propósito de replicação e ser à prova de falhas. Isso é mais provável que você está procurando. Além disso, o mysql tem um guia em seu site para configurar a replicação para a edição da comunidade mysql.

MySQL Community Server

    
por 10.08.2016 / 05:58