Experiences with Tombstones in Apache Cassandra
Detect and prevent tombstones
Tombstones can be detected in logs and by monitoring specific metrics. O seu tempo de vida é definido pela configuração da tabela gc_grace_seconds.
Ajustar configurações de tabela
- gc_grace_seconds
A configuração padrão para o gc_grace_seconds é 864000 (10 dias). Para nós fazia sentido baixar esse valor para 345600 (4 dias). No caso de você decidir mudar o período de graça, certifique-se de executar reparos dentro desse intervalo de tempo.
pode simplesmente alterar o valor das tabelas existentes ou criar uma nova tabela como esta:
criar espaço de tabela.nome de tabela com GC_GRACE_SEGUNDOS = 345600;
alterar o espaço de tabela.tablename COM GC_GRACE_SECONDS = 345600;
- TTL
Depois de TTL passa a determinado período de tempo, as linhas são eliminados e os valores são transformados em lápides. Por omissão, as linhas/valores não expiram.Enquanto vivenciávamos as questões da lápide, descobrimos que precisávamos aumentar o tempo de vida das nossas mesas. Ao ter este valor definido para 1 ½ dias, falhar write jobs teve o efeito de apagar todos os dados de uma tabela ao mesmo tempo. Devido às atualizações em falta, cada fila foi marcada com uma lápide. A fixação do valor mais elevado permite-nos reler os postos de trabalho a tempo e evitar a criação desnecessária de uma grande quantidade de lápides.
- tombstone_warn_threshold
o aviso do limiar da lápide é definido como 1. 000 por omissão e tornar-se-á visível nos seus registos no caso de mais de 1.000 lápides serem digitalizadas por uma única consulta.
- tombstone_failure_threshold
o limiar de falha da lápide é atingido quando 100.000 lápides são digitalizados por uma única consulta. Neste caso, a consulta será abortada, o que significa que os dados da tabela afetada não podem mais ser questionados.
essas configurações de limiar podem ser alteradas, mas esteja ciente de que se você aumentá-las pode levar a nós ficar sem memória.Cassandra vem com alta tolerância a falhas e opera bem, mesmo se um nó está temporariamente indisponível. No entanto, é a melhor prática para executar reparação nodetool após uma falha de nó. Especialmente se você quiser evitar a perda de dados a todo o custo.
durante o processo de reparação, o nó que estava indisponível receberá as escritas que aconteceram durante o seu tempo de inatividade.
é uma boa abordagem para executar reparos dentro do gc_grace_seconds e em uma base regular, caso contrário você pode experimentar casos em que os dados apagados são ressuscitados.
existem algumas maneiras de executar reparos automaticamente. Uma delas é Cassandra Reaper. Esta ferramenta vem com uma UI agradável que torna fácil de agendar reparos.
Configurar e executar a compactação
remover finalmente lápides e liberar espaço em disco, compactação precisa ser acionado. Há diferentes tipos de compactações. A compactação menor executa compactação sobre todos os sstables e corre automaticamente em Cassandra. Ele remove todas as lápides que são mais antigas do que o período de graça. Se você ativar uma compactação manualmente sobre todos os sstables, ela é chamada de compactação principal. Tenha em mente que a compactação precisa ser desencadeada para cada nó individualmente. Você também tem a opção de executar uma compactação definida pelo usuário apenas em um grupo de sstables especificados.
compactar dados em C* normalmente significa fundir os sstables num único novo sstable. Ao realizar leituras em várias linhas, quanto mais sstables precisam ser digitalizados, mais lento o processo fica. Para evitar que isso aconteça, a compactação precisa ser executada regularmente.Para iniciar compactações manualmente, pode usar o nodetool compact. No caso de não especificar um espaço de teclas ou uma tabela, a compactação será executada em todos os espaços de teclas e tabelas.
nodetool compact keyspace tablename
este comando inicia uma compactação na tabela especificada. Você deve descobrir qual é a estratégia de compactação configurada para as suas tabelas e compará-la com as estratégias alternativas. Se você quiser descobrir se outra estratégia atende melhor às suas necessidades, você pode verificar a documentação DataStax.
monitorizar as métricas de tabela
1. Nodetool
Nodetool is Cassandra command line interface. É útil se você quiser descobrir mais sobre o seu desempenho clusters. Você pode verificar toda a lista de comandos possíveis fornecidos pela DataStax.
os comandos Nodetool precisam ser executados para cada nó individualmente. Corremos C* na Kubernetes para que possamos abrir um shell para execução de Cassandra pod da seguinte forma:
kubectl exec -ele cassandra-0 -n recomendo bash
a Partir de que ponto podemos usar nodetool para obter várias informações sobre nossas mesas. O comando nodetool tablestats pode ser realizada para imprimir estatísticas individuais keyspaces ou tabelas:
Os valores para a Média de lápides por fatia’ e ‘Máximo lápides por fatia’ irá dizer-lhe quantas marcas de exclusão foram digitalizadas por consulta nos últimos cinco minutos. Se você vê este valor sendo muito alto você pode precisar executar compactação mais frequentemente para essa tabela.
2. Ferramentas de SSTable
Antes de executar ferramentas de SSTable Cassandra precisa ser parada. O comando sstableutil dar-lhe-á uma lista de ficheiros sstable existentes para uma determinada tabela. A execução do sstablemetadata nestes ficheiros irá fornecer-lhe informações úteis sobre a tabela especificada, como por exemplo o TTL e uma estimativa de lápides droppable.
3. Prometheus e Grafana
a nossa monitorização para C* é estabelecida com Prometheus e Grafana. Depois de receber os avisos de limiar de lápides decidimos adicionar um painel ao nosso painel que nos dá uma ideia do comportamento de lápide para cada uma das nossas tabelas.Cassandra tem uma métrica de tabela chamada “TombstoneScannedHistogram”, que apresenta o histograma de lápides que foram digitalizadas por consulta. Ao mostrar o percentil 99 veremos se algo não está certo.