Para fins de compreensão, configurei um cluster de 4 nós usando a versão mais recente/maior (lançada) do Cassandra. Os quatro nós foram ativados em sequência usando quase inteiramente as configurações padrão e parecem estar se comunicando corretamente.
Criei então um esquema da seguinte forma:
CREATE KEYSPACE first WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': '1'
};
Crie uma tabela simples com 5 colunas e adicione aproximadamente 100 mil linhas de dados. Tudo muito bem. Os dados estão disponíveis de todos os clientes, então acho que estão distribuídos uniformemente.
Então, estou procurando uma estratégia de backup e começando a mexer com instantâneos e assim por diante. Depois de executar nodetool snapshot
em cada máquina, quero saber o que ela criou. Vou para a primeira máquina e procuro /var/lib/cassandra/data/first e vejo que está vazio. Hmm .. segunda máquina .. mesma coisa .. terceira .. finalmente na 4ª máquina vejo arquivos na pasta de dados e um diretório de instantâneo.
A execução nodetool ring
mostra que cada sistema possui aproximadamente 25%, mas a carga é fortemente direcionada para o sistema que (parece ter) acabou com todos os dados.
Todos os dados estão realmente nesta máquina? Qual etapa eu perdi na configuração?
Cassandra atribui intervalo de token para cada nó no cluster.
Como existem 4 nós em sua configuração, 25% dos tokens são atribuídos a cada nó.
Cada consulta de inserção terá um hash gerado para esses dados de linha. O hash sempre pertencerá a um e apenas um dos intervalos de token, portanto, esses dados de linha são armazenados nesse nó físico específico.
No seu caso, principalmente as consultas de inserção têm chaves de partição iguais ou semelhantes que levam ao mesmo nó físico, ou seja, nó 4.
Para obter mais detalhes, assista ao site da datastax explicando o particionamento.