Detalhes do ENV:
- GKE (cluster do Google Kubernetes)
- Delator da nuvem do Google. https://docs.datastax.com/en/cassandra-oss/3.0/cassandra/architecture/archSnitchGoogle.html
- 140 nós com 4 RACKs (4 statefulsets em 4 AZs em uma região)
- Cada tamanho de nó é 5 TB e o tamanho do cluster é 700 TB.
Procedimento seguido para restaurar o banco de dados: restaurei um tamanho de banco de dados de 450 TB no cassandra K8s da origem ao destino usando a atualização do nodetool copiando sstables. Cada nó possui cerca de 5 a 6 TB de dados. A abordagem que tomei:
- Crie um novo cluster com o mesmo número de nós, como 140 nós de origem.
- Criou novos discos a partir de instantâneos de disco de origem (nuvem) e anexou esses discos a novos nós.
- Tabelas de sistema limpas.
- C* iniciado como um cluster de destino.
- Tabelas criadas manualmente que correspondem ao cluster de origem
- Estábulos copiados de tabelas antigas para tabelas recém-criadas (UUID). 7 Executei a atualização do nodetool
Observação: status do Nodetool mostrando o mesmo tamanho da origem para cada nó, cfstats também correspondendo ao tamanho das tabelas no destino e na origem.
Problema pós-migração:
Para reduzir o tamanho do cluster, comecei a descomissionar um dos nós e ele foi concluído em 10 minutos. Esperando ver pelo menos 8 horas com base na manutenção anterior do cluster de origem.
Como não se esperava que a desativação fosse executada apenas por 10 minutos, tentei adicionar um novo nó ao cluster, que deveria copiar dados de aproximadamente 5 a 6 TB, mas copiou apenas 2 TB.
Como outra verificação, tentei "limpeza do Nodetool" em outro nó que faz parte do cluster de destino e reduziu os dados de 6 TB para 2 TB. A mesma limpeza não reduz quaisquer dados no nó de origem.
Após a restauração, todo o cluster é reparado no destino usando a ferramenta Reaper e não há problemas com o reparo, mas o problema é a desativação, a limpeza e a inicialização.
Suspeito que o problema subjacente é que seu procedimento está incorreto. Para que o "método de atualização" funcione, o(s) nó(s) de origem e o(s) nó(s) de destino correspondente(s) devem ter configuração idêntica ao(s) token(s) atribuído(s) a eles, conforme expliquei em Como restaurar instantâneos do Cassandra para outro cluster com configuração idêntica? .
Quando você copia SSTables para um nó que possui uma propriedade de token diferente do nó de origem, as partições nesses SSTables que não pertencem ao nó de destino são descartadas quando você executa
nodetool cleanup
.Como os nós são implantados em um cluster Kubernetes, presumo que você não tenha controle sobre as atribuições de token, o que significa que os pods teriam recebido tokens aleatórios.
Em uma situação em que a configuração não é idêntica entre os clusters de origem e de destino, não é possível usar o método de atualização. O procedimento correto é carregar os dados usando
sstableloader
.Se você estiver interessado, documentei as etapas detalhadas em Como migrar dados em tabelas para um novo cluster Cassandra? . Saúde!