Eu tenho uma configuração de servidor único MySQL com todas as tabelas usando o mecanismo InnoDB (porque preciso de suporte para chaves estrangeiras). Como os tempos de resposta estão ficando mais longos, agora acredito que preciso criar um cluster de servidores para poder lidar com uma carga de banco de dados cada vez maior.
É possível criar um cluster de servidores MySQL usando meus bancos de dados existentes que usam o InnoDB? Se não, quais são minhas opções?
Mudar para a Galera seria uma opção. Em seguida, seu aplicativo deve estar ciente dos erros de 'impasse detectado, tente reiniciar a transação'. Outra possibilidade é configurar um escravo de leitura e configurar seu aplicativo para usar esse escravo para consultas read_only. Se um escravo não for suficiente, você pode adicionar mais e usá-los com um balanceador de carga de qualquer tipo. Exemplos são maxScale, ha-proxy na camada de aplicação ou ipvs na camada de transporte.
Sim e não.
Não, não há como aplicar vários núcleos ou servidores a uma única transação InnoDB.
Sim, você pode construir um cluster com InnoDB. Mas é um Cluster Galera (PXC ou MariaDB), o que significa vários servidores replicando entre si. A taxa de transferência geral aumenta, mas o tempo de resposta para consultas individuais não. Isso pode ajudar a "carregar", mas não "tempo de resposta". O seu problema é realmente os dois?
Não, o InnoDB não funciona no NDB Cluster.
Vejamos uma de suas consultas lentas. Pode ser tão simples quanto criar um índice composto ou reformular a consulta. Ou, se você estiver fazendo Data Warehousing, criando tabelas de resumo. Forneça
EXPLAIN SELECT ...
eSHOW CREATE TABLE
.Às vezes, acelerar a pior consulta ajuda drasticamente o "carregamento" e o "tempo de resposta", mesmo para outras consultas.
Você deve ser capaz de migrar para MySQL Cluster (NDB Cluster), pois as novas versões já suportam chaves estrangeiras e é fácil dimensionar a carga.
No entanto, conforme declarado por Rick, talvez seja bom primeiro ter certeza, se lidar com os tempos de resposta colocando servidores adicionais é a única opção aqui.
Observe também que o MySQL Cluster mantém todos os dados na memória, não é adequado para big data.
A partir do MySQL 5.7 (ou ainda melhor 8.0), você pode usar o InnoDB Cluster. O que permite executar várias instâncias do MySQL como um cluster. Que pode ser executado como Single Master: um membro do cluster permite operações de gravação enquanto o restante está no modo somente leitura OU Multi Master: todos os membros do cluster suportam operações de leitura e gravação. Para mais detalhes, você pode verificar: Manual do MySQL