Executa múltiplas instâncias do MySQL no mesmo servidor (com replicação)?

3

temos uma caixa dedicada atual com 8 GBs de RAM (dual quad core CPU) e nosso DB cresceu mais de 17 GBs (mais de 3 DBs para nossa aplicação). Estou supondo que isso seja motivo suficiente para mudar para uma máquina que tenha mais memória (colocando o sharding de lado).

A nova caixa tem 48 GB de RAM. Temos uma segunda caixa dedicada à qual nós replicamos (master slave) nosso banco de dados. Eu estava pensando em configurar duas instâncias do nosso banco de dados (rodando seu próprio sistema de arquivos) rodando em paralelo na mesma caixa, mas portas diferentes e mantendo o proxy mysql na frente dele para balancear a carga do meu tráfego de leitura.

Meu raciocínio foi que eu não vejo cada um dos nossos DBs precisando de mais de 20-22 GB de RAM antes de correr para outros gargalos. Será que executar estes em paralelo e balanceamento de carga ler o tráfego para eles fornecer desempenho comparável ao uso de duas caixas dedicar?

    
por Prem 29.06.2010 / 10:07

1 resposta

2

Qual é a base do seu raciocínio? Quais são os gargalos que você prevê?

O tamanho dos dados armazenados em seu banco de dados não deve ser a base da quantidade de RAM disponibilizada para o sistema. Se ele foi carregado até o ponto em que não foi possível atender com eficiência às solicitações, é nesse momento que você deve considerá-lo. No entanto, consultas ajustadas de forma inadequada, falta de índices e uma instância do MySQL mal configurada não serão tratadas integralmente por atualizações de hardware.

Em uma instância ajustada corretamente, se você encontrar um gargalo que impeça que toda a sua memória seja utilizada sob carga, várias instâncias não resolverão isso. Provavelmente será um gargalo da CPU ou potencialmente E / S de disco. Por exemplo, confira InnoDB Memory Usage .

Existem certas limitações. Tal como com o MyISAM no MySQL 5.0, cada buffer de chaves será limitado a 4 GB, mesmo em plataformas de 64 bits, uma vez que são referenciadas por números inteiros de 32 bits.

O MySQL cria um thread por conexão. Assim, se você não estivesse executando uma plataforma de 64 bits, cada thread seria limitado a 4 GB, mesmo com Extensão de endereço físico .

Se você quisesse escalar as solicitações de leitura, você poderia usar vários servidores de banco de dados com carga equilibrada com LVS . Eu não usaria várias instâncias.

Alto desempenho MySQL é um livro fantástico. Eu sugiro que você leia.

    
por 29.06.2010 / 15:36