Sou inexperiente com Cassandra, mas tenho alguma experiência com bancos de dados relacionais baseados em SQL.
Não consegui encontrar informações sobre as melhores práticas sobre como manter o Cassandra uma vez implantado. É necessário aspirar o banco de dados? Eu acho que as cargas de leitura / gravação causam fragmentação no armazenamento.
Ou, de maneira mais geral: quais são as melhores práticas para manter uma implantação de produção do Cassandra? O que tem que ser feito em intervalos regulares para manter a saúde do sistema? O manual de operações realmente não discute esse aspecto.
Obrigado.
cassandra
maintenance
Mayur Patel
fonte
fonte
Respostas:
Em geral, um cluster bem projetado pode viver por ANOS sem ser tocado. Eu tive clusters que funcionavam há anos sem interrupção. No entanto, aqui estão algumas diretrizes:
O monitoramento é extremamente importante:
1) Monitorar latências. Use o opscenter ou suas ferramentas de métricas favoritas para acompanhar as latências. As latências em ascensão podem ser sinais de problemas, incluindo pausas no GC (mais comuns em cargas de trabalho de leitura do que cargas de trabalho de gravação), problemas estáveis e similares.
2) Monitore contagens estáveis. As contagens de SSTable aumentarão se você exceder a compactação (cada sstable é gravado exatamente uma vez - as exclusões são tratadas combinando sstables antigos em novos sstables por meio da compactação).
3) Monitore as alterações de estado do nó (para cima / para baixo, etc). Se você vir nós batendo, investigue, pois isso não é normal.
4) Acompanhe o uso do seu disco - tradicionalmente, você precisa ficar abaixo de 50% (especialmente se você usar a compactação STCS).
Existem algumas coisas básicas que você deve e não deve fazer regularmente:
1) Não execute explicitamente
nodetool compact
. Você mencionou que fez isso, não é fatal, mas cria sstables muito grandes, que são menos propensos a participar da compactação no futuro. Você não precisa necessariamente continuar executando, mas às vezes pode ajudar a se livrar dos dados excluídos / substituídos.2)
nodetool repair
é normalmente recomendado a cadagc_grace_seconds
10 dias, por padrão. Existem cargas de trabalho em que isso é menos importante - a maior razão pela qual você PRECISA reparar é garantir que os marcadores de exclusão (tombstones
) sejam transmitidos antes de expirarem (eles permanecem vivosgc_grace_seconds
, se um nó estiver inativo quando a exclusão aconteceu, esses dados poderão voltar à vida útil) sem o reparo!). Se você não emitir exclusões e consultar com nível de consistência suficiente (leituras e gravações no QUORUM, por exemplo), poderá realmente viver uma vida sem reparo.3) Se você for reparar, considere o uso de reparo incremental e repare pequenos intervalos de cada vez.
4) Estratégias de compactação são importantes - muito. O STCS é ótimo para gravações, o LCS é ótimo para leituras. O DTCS tem algumas peculiaridades.
5) Os modelos de dados são importantes - assim como os ambientes RDBMS / SQL enfrentam problemas quando consultas não indexadas atingem tabelas grandes, o Cassandra pode ser problemático com linhas / partições muito grandes.
6) Instantâneos são baratos. Muito barato. Quase instantaneamente, apenas links físicos, eles custam quase nenhum espaço em disco imediatamente. Use o instantâneo antes de atualizar as versões, especialmente as principais.
7) Tenha cuidado com exclusões. Como sugerido no item 2, delete cria mais dados no disco e não o libera pelo menos
gc_grace_seconds
.Quando tudo falha:
Vi artigos que sugerem que o Cassandra in prod requer um chefe dedicado para gerenciar qualquer cluster de tamanho - não sei se é necessariamente verdade, mas se você estiver preocupado, convém contratar um consultor de terceiros (TheLastPickle, Pythian ) ou tenha um contrato de suporte (Datastax) para lhe dar um pouco de tranquilidade.
fonte
De acordo com a documentação de reparo do Cassandra ,
nodetool repair
deve ser executado nas seguintes situações:Os dados no Cassandra não "fragmentam" da maneira que você está pensando. No entanto, as exclusões acionam o posicionamento de lápides e o processo compacto normal elimina as lápides.
Corrigir. Foi-me dito por um representante do DataStax que, uma vez executado
compact
manualmente, você sempre precisará executá-lo manualmente. O motivo é que a compactação funciona "compactando" todos os SSTABLES existentes em um espaço de chave em um único arquivo SSTABLE. Você pode ter algumas famílias de colunas nesse arquivo SSTABLE pequenas e que demoram tanto para aumentar além do limite de compactação, que a probabilidade de compactação automática em execução novamente é muito baixa.Essencialmente, certifique-se de agendar uma
nodetool repair
operação regular , nunca executarnodetool compact
e implementar uma estratégia de backup (instantâneos, backups incrementais ou ambos).fonte
nodetool compact
, estou condenado para sempre, a menos que destrua meu cluster? Ou existe uma maneira de obter a compactação automática para começar a trabalhar novamente?upgradesstables
), isso poderá redefinir as coisas o suficiente para salvá-lo do "inferno de compactação manual".nodetool compact
. Além disso, agora você pode usar o sstablesplit para se livrar desse sstable anormalmente grande, para que você possa "desfazer" o arquivonodetool compact
.