- O que são snapshots e onde encontrá-los
- Como o problema se manifesta
- Possíveis estratégias de recuperação e o que cada uma significa
Visão geral dos snapshots do Keeper
O que é um snapshot?
Onde posso encontrar snapshots?
/var/lib/clickhouse/coordination/snapshots/ ou no caminho personalizado definido por snapshot_storage_path no arquivo keeper_server.xml. Os snapshots são nomeados sequencialmente (por exemplo, snapshot.23), e os mais recentes têm números maiores.
Em clusters com vários nós, cada nó do Keeper tem seu próprio diretório de snapshots.
A consistência dos snapshots entre os nós é fundamental para a recuperação.
Principais sintomas e manifestações de snapshots corrompidos do Keeper
Indicadores nos logs:
Antes de diagnosticar corrupção de snapshot, verifique os logs do Keeper em busca de padrões de erro específicos:
Recuperando snapshots corrompidos do Keeper
- Pare todos os nós do Keeper para evitar mais corrupção
- Faça backup de tudo copiando todo o diretório de coordenação para um local seguro
- Verifique o quorum do cluster para garantir que pelo menos um nó tenha dados íntegros
1. Restaurar a partir de um backup existente
- A corrupção dos metadados do Keeper ou dos snapshots tornar os dados atuais irrecuperáveis.
- Houver um backup com um estado íntegro e conhecido do Keeper.
- Localize e valide o backup mais recente quanto à consistência dos metadados.
- Desligue os serviços do ClickHouse e do Keeper.
- Substitua os snapshots e logs com falha pelos do diretório de backup.
- Reinicie o cluster do Keeper e valide a sincronização dos metadados.
2. Reverter para um snapshot mais antigo
- Snapshots recentes estiverem corrompidos, mas os mais antigos ainda puderem ser usados.
- Os logs incrementais estiverem íntegros para uma recuperação consistente.
- Identifique e selecione um snapshot válido mais antigo (por exemplo, snapshot.19) no diretório do Keeper.
- Remova os snapshots e logs mais recentes.
- Reinicie o Keeper para que ele reaplique os logs e reconstrua o estado dos metadados.
3. Restaure os metadados usando SYSTEM RESTORE REPLICA
- Os metadados do Keeper forem perdidos ou corrompidos, mas os dados da tabela ainda existirem em disco
- As tabelas tiverem passado para o modo somente leitura devido à ausência de metadados do ZooKeeper/Keeper
- Você precisar recriar os metadados no Keeper com base nas partes de dados disponíveis localmente
-
Verifique se os dados da tabela existem localmente no caminho de dados do
clickhouse-server, definido por<path>na config. (/var/lib/clickhouse/data/por padrão) - Para cada tabela afetada, execute:
- Para recuperação no nível do banco de dados (se estiver usando o Replicated database engine):
- Aguarde a sincronização ser concluída:
- Verifique a recuperação conferindo
system.replicasparais_readonly = 0e monitorandosystem.detached_parts
Como funciona
SYSTEM RESTORE REPLICA desanexa todas as partes existentes, recria os metadados no Keeper (como se fosse uma nova tabela vazia) e, em seguida, anexa novamente todas as partes. Isso evita baixar os dados novamente pela rede.4. Remover e recriar os metadados da réplica no Keeper
- O erro ocorre em uma única réplica do cluster e há metadados corrompidos ou inconsistentes no Keeper
- Você encontrar erros como “Part XXXXX intersects previous part YYYYY”
- Você precisa redefinir completamente os metadados da réplica no Keeper, preservando os dados locais
- Na réplica afetada, desanexe a tabela:
- Remova os metadados da réplica do Keeper (execute em qualquer réplica):
- Anexe novamente a tabela (ela ficará em modo somente leitura):
- Restaure os metadados da réplica:
- Sincronize-se com as outras réplicas:
- Verifique
system.detached_partsem todas as réplicas após a recuperação
- Pare o servidor ClickHouse
- Crie a flag de recuperação:
- Inicie o servidor ClickHouse
- O servidor removerá automaticamente a flag e restaurará todas as tabelas replicadas
- Monitore os logs para acompanhar o progresso da recuperação
5. Reconstruir o cluster do Keeper
- Não houver snapshots, logs ou backups válidos disponíveis para recuperação.
- For necessário recriar todo o cluster do Keeper e seus metadados.
- Pare completamente os clusters do ClickHouse e do Keeper.
- Redefina cada nó do Keeper limpando os diretórios de snapshot e log.
- Inicialize um nó do Keeper como líder e adicione os outros nós de forma incremental.
- Reimporte os metadados, se estiverem disponíveis em registros externos.