- What snapshots are and where to find them
- How the problem manifests
- Possible strategies for recovery and what each of them means
Overview of Keeper snapshots
What is a snapshot?
A snapshot is a serialized state of Keeper’s internal data (such as metadata about clusters, table coordination paths, and configurations) at a specific point in time. Snapshots are vital for resynchronizing Keeper nodes within a cluster, recovering metadata during failures, and start-up or restart processes that rely on a known-good Keeper state.Where can I find snapshots?
Snapshots are stored as files on the local filesystem of Keeper nodes. By default, they are stored at/var/lib/clickhouse/coordination/snapshots/ or by the custom path specified by snapshot_storage_path in your keeper_server.xml file. Snapshots are named incrementally (e.g., snapshot.23), with newer ones having higher numbers.
For multi-node clusters, each Keeper node has its own snapshot directory.
Consistency within snapshots across nodes is critical for recovery.
Key symptoms and manifestations of corrupt Keeper snapshots
The table below details some common symptoms and manifestations of corrupt Keeper snapshots:
Log Indicators:
Before diagnosing snapshot corruption, check Keeper logs for specific error patterns:
Recovering from corrupt Keeper snapshots
Before touching any files, always:- Stop all Keeper nodes to prevent further corruption
- Backup everything by copying the entire coordination directory to a safe location
- Verify cluster quorum to ensure at least one node has good data
- Restore from an existing backup
You should follow this process if:
- The Keeper metadata or snapshot corruption makes current data unsalvageable.
- A backup exists with a known-good Keeper state.
- Locate and validate the newest backup for metadata consistency.
- Shut down the ClickHouse and Keeper services.
- Replace the faulty snapshots and logs with those from the backup directory.
- Restart the Keeper cluster and validate metadata synchronization.
- Rollback to an older snapshot
You should follow this process when:
- Recent snapshots are corrupt, but older ones remain usable.
- Incremental logs are intact for consistent recovery.
- Identify and select a valid older snapshot (e.g., snapshot.19) from the Keeper directory.
- Remove newer snapshots and logs.
- Restart Keeper so it replays logs to rebuild the metadata state.
- Restore metadata using
SYSTEM RESTORE REPLICA
You should follow this process when:
SYSTEM RESTORE REPLICA- Keeper metadata is lost or corrupted but table data still exists on disk
- Tables have switched to read-only mode due to missing ZooKeeper/Keeper metadata
- You need to recreate metadata in Keeper based on locally available data parts
-
Verify that table data exists locally in your clickHouse-server data path, set by
<path>in your config. (/var/lib/clickhouse/data/by default) - For each affected table, execute:
- For database-level recovery (if using Replicated database engine):
- Wait for synchronization to complete:
- Verify recovery by checking
system.replicasforis_readonly = 0and monitoringsystem.detached_parts
How it works
SYSTEM RESTORE REPLICA detaches all existing parts, recreates metadata in Keeper (as if it’s a new empty table), then reattaches all parts. This avoids re-downloading data over the network.
- Drop and recreate replica metadata in Keeper
You should follow this process when:
- The error occurs on a single replica of the cluster and has corrupt or inconsistent metadata in Keeper
- You encounter errors like “Part XXXXX intersects previous part YYYYY”
- You need to completely reset a replica’s Keeper metadata while preserving local data
- On the affected replica, detach the table:
- Remove the replica’s metadata from Keeper (execute on any replica):
- Reattach the table (it will be in read-only mode):
- Restore the replica metadata:
- Synchronize with other replicas:
- Check
system.detached_partson all replicas after recovery
- Stop ClickHouse server
- Create the recovery flag:
- Start ClickHouse server
- The server will automatically delete the flag and restore all replicated tables
- Monitor logs for recovery progress
- Rebuild Keeper cluster
You should follow this process when:
- No valid snapshots, logs, or backups are available for recovery.
- You need to recreate the entire Keeper cluster and its metadata.
- Fully stop the ClickHouse and Keeper clusters.
- Reset each Keeper node by cleaning the snapshot and log directories.
- Initialize one Keeper node as the leader and add other nodes incrementally.
- Re-import metadata if available from external records.