Eu corro um site que tem picos de tráfego alto e, por causa disso, as soluções de dimensionamento automático são muito lucrativas para este caso. Atualmente, o servidor da web é capaz de dimensionar automaticamente horizontalmente, mas o gargalo está no servidor do MySQL.
- Eu tentei com o Amazon RDS Multi-AZ, mas o banco de dados de 12 GB leva 15 minutos para atualizar com alguns minutos de inatividade. Ajudou bastante quando eu já sabia que um aumento de tráfego ocorreria em algum momento específico.
- Eu também considerei Xeround. Esta é provavelmente a melhor solução, embora seja bastante cara para bancos de dados desse tamanho. De qualquer forma, não é uma opção, porque eu legalmente preciso que o banco de dados esteja na União Europeia.
- Eu li sobre o Scalr, mas não tenho certeza se isso pode ser útil e como.
- Vi que muitos provedores de hospedagem em nuvem oferecem soluções de escalabilidade vertical que eu acho que tem 0 de inatividade (não tenho certeza se isso é realmente possível, tanto quanto eu sei que eles usam o hipervisor Xen). Essa poderia ser uma solução, mas eu me pergunto se não há tempo de inatividade e como a configuração do MySQL (e muitas outras coisas no sistema operacional) são capazes de atualizar também sem tempo de inatividade.
- Eu tentei com servidores escravos MySQL, mas não foi de todo útil.
- Estou usando o memcache, o que ajuda muito, mas não é suficiente. Preciso atualizar por causa das gravações, não apenas por causa das leituras.
Alguma sugestão? Agradeço antecipadamente
mysql
scalability
amazon-rds
scalr
Zillo
fonte
fonte
Respostas:
Na verdade, uma solução mais simples seria tentar adicionar o Memcached à sua pilha para economizar na carga do banco de dados. Isso pode economizar drasticamente a carga e é muito mais simples do que tentar resolver o problema de levantar servidores rapidamente (baixa dificuldade) e, em seguida, calcular uma sincronização rápida do MySQL (dificuldade muito maior).http://toblender.com/?s=memcachedPara resolver o problema de muitas gravações, a correção mais comum é adicionar memória ao servidor (um conjunto de trabalho maior pode ser mantido na RAM), colocar seu banco de dados em discos mais rápidos (os SSDs são uma boa solução, mas cara) ou fragmentar (que é caro em servidores e complexidade adicionais).
Outra maneira de reduzir a carga de gravação do banco de dados seria incorporar um armazenamento de dados na memória (como Redis) para lidar com dados que mudam com frequência e, se necessário, gravar periodicamente as alterações no seu banco de dados principal.
fonte
Você deve considerar o uso de uma topologia em estrela
Aqui está o que eu estou propondo
Prepare a topologia como esta
Etapa 01: Configurar 5 RSS com essas opções comuns
Isso fará com que todas as tabelas sejam criadas carregadas como MyISAM Storage Engine
Etapa 02: Configurar o DM e todos os servidores RS
tblname ROW_FORMAT=Fixed;
em todas as tabelas no RSStblname ENGINE=BLACKHOLE;
em todas as tabelas no DMEtapa 03: Configurar a replicação do DM para todos os 5 RSS
Etapa 04: configurar a replicação do WM para o DM
FIM DA CONFIGURAÇÃO
Aqui está como o seu mecanismo de leitura / gravação funciona
Agora, aqui está o problema ...
service mysql stop
no 5º RSSservice mysql stop
no 5º RSSservice mysql stop
no novo RSSVocê pode usar o RSS nº 5 para ativar novos servidores repetidamente
Em uma nota lateral, não use o XEROUND para o WM ou DM, pois eles não suportam o mecanismo de armazenamento InnoDB ou BLACKHOLE.
Espero que essas idéias ajudem.
fonte
Se você usa o Innodb, deve considerar os multi-mestres Mysql gerenciados pelo Galera . Isso facilita a configuração do multi-master do mysql e facilita a "auto-escala" semi-automática.
Se esse é um aplicativo que você ou sua empresa está escrevendo, considere mudar para um design fragmentado (particionado) para o aplicativo. Mas o sharding pode ficar complicado. Aqui está um link para você começar.
Estou assumindo que você "afinou" os arquivos de configuração do mysql, como na memória apropriada alocada etc.
fonte
Isso está em um rack que você controla ou está na nuvem? 12 GB é um banco de dados muito pequeno em relação ao tamanho dos discos disponíveis. Coloque-o em uma matriz RAID1 ou RAID10 de pequenos SSDs SLC e a latência de gravação desaparecerá.
O SSD da Intel 311 série 20GB SLC (US $ 120 cada) faria o trabalho de maneira brilhante.
Se o banco de dados fosse maior, você poderia obter resultados igualmente espetaculares movendo o banco de dados para um destino iSCSI em um servidor ZFS SAN (construído em hardware de servidor básico usando Nexenta, OpenIndiana, FreeNAS ou qualquer outra coisa) e configurando um espelho de SSDs semelhantes para seu cache de gravação do ZIL. Em todas as circunstâncias, exceto as mais extraordinárias, a Gigabit Ethernet é mais do que suficiente para mover o tráfego iSCSI do banco de dados.
fonte