Estou tendo um MySQL dual-master Replicação do MySQL, cada um dos servidores tem 21 GB de memória, agora estou procurando uma solução de clustering para este projeto, é possível ter 6 servidores: dois deles com 20 GB de RAM e outros com 10 GB de RAM. na documentação do MySQL Cluster está escrito abaixo a fórmula para memória total e cada nó RAM, parece que preciso de muito mais RAM da minha replicação existente e é difícil fazer minha empresa concordar com esse tipo de requisito de RAM, além do objetivo de clustering é, em vez de fazer um servidor grande, usar servidores menores (em recursos) conectados uns aos outros, mas com esta fórmula cada nó de clustering é muito maior do que meus servidores existentes.
Se estiver projetando um banco de dados completamente novo, os seguintes cálculos podem ser usados para ajudar a determinar os requisitos aproximados de dimensionamento de memória para os nós de dados:
• (na memória) Tamanho dos dados * Réplicas * 1,25 = Requisitos totais de memória do banco de dados Exemplo: 50 GB * 2 * 1,25 = 125 GB
• (Tamanho dos dados * Réplicas * 1,25)/Nós = RAM por nó Exemplo: (2 GB * 2 * 1,25)/4 = 31,25 GB
Nesta situação tenho algumas dúvidas:
- É necessário obedecer a essas fórmulas? posso usar menos RAM para nós?
Ao avaliar soluções em cluster, você precisa pensar no perfil de leitura/gravação de seu aplicativo e compará-lo com as soluções disponíveis.
Para um perfil baseado em leitura pesada de um aplicativo, você seria capaz de aumentar as leituras tendo várias réplicas do MySQL fora de sua configuração de replicação mestre-mestre do MySQL.
Para o perfil pesado de gravação, você está implementando algumas das escolhas óbvias na replicação mestre-mestre.
Ao escolher entre as opções de MySQL em cluster, há duas opções de tecnologia: Oracle MySQL Cluster baseado em NDB e opções baseadas em Galera da Percona (XtraDB Cluster) e MariaDB (MariaDB Cluster) e Galera Cluster para MySQL. Eles são arquitetados de forma diferente e têm diferentes vantagens e desvantagens.
Um bom webinar sobre a distinção está aqui:
http://severalnines.com/blog/galera-cluster-mysql-vs-mysql-ndb-cluster-high-level-comparison-webinar-replay-slides
A fórmula mencionada é usada principalmente para medir os requisitos projetados por nó para um cluster NDB. Originalmente MySQL Cluster, anteriormente NDB Cluster, era um banco de dados apenas de memória, que exigia que todos os dados residissem na memória dos nós disponíveis. Se todos os seus dados precisassem ficar na memória, então se você não tivesse RAM suficiente para manter todos os seus dados, você estaria subprovisionado em termos de hardware.
Atualmente, cada nó no cluster MySQL, ou seja, um nó de dados, é uma instância do MySQL. Mesmo que você deva manter seus dados na memória para desempenho ideal, isso não é necessário. Então, basicamente, se você não "obedecer" às fórmulas, acabará caindo no disco e terá que lidar com todo o desempenho de E/S do hardware específico disponível para seus nós.