How to Backup and Restore Private Blockchains Using Hyperledger Besu
In the evolving landscape of blockchain technology, maintaining the robustness and reliability of private networks is paramount. Hyperledger Besu, an open-source Ethereum client designed for corporate use, offers various methods for backing up and restoring data. This blog post provides a comprehensive guide on how to effectively backup and restore a private blockchain network using Besu, ensuring minimal downtime and data integrity.
Setting Up the Environment
Before delving into the backup and restore processes, it is essential to establish your network nodes properly. Here’s a typical setup using Besu version 24.3.0, emphasising the significance of managing the genesis file and data paths:
- Genesis File Management: The genesis file defines the initial configuration of your blockchain and must be consistent across all nodes. It is prudent to store this file under source control to prevent discrepancies and ensure all nodes start from the same initial state.
- Data Path Configuration: Besu allows you to specify a data path using the --data-path command. It is advisable to mount a separate volume dedicated to blockchain data to simplify backups and enhance security. The default data path is often within the Besu installation directory, but for Docker installations, it defaults to /opt/besu/database.
Each node initializes with the following base command pattern:
besu --data-path=data --genesis-file=../genesis.json --bootnodes=<node_enode> --p2p-port=<port> --rpc-http-enabled --rpc-http-api=ETH,NET,QBFT --host-allowlist="*" --rpc-http-cors-origins="all" --rpc-http-port=<rpc_port>
Recommended Backup and Restore Process
To ensure data consistency and network integrity, follow a structured approach to backup and restore operations:
Regular Data Backups: Perform periodic backups of the data directory to safeguard against data corruption or losses due to hardware failure. Methods can include automated scripts using cron jobs and rsync, archiving to cloud services like AWS S3, or creating tar.gz archives for manual storage.
Restoring Data:
- Approach 1: Single Point of Recovery
- Stop the first node to ensure data consistency during the backup.
- Copy the genesis.json file and take a backup of data/database, data/caches, and DATABASE_METADATA.json from the stopped node.
- Restore these files to each node in the network, ensuring that the cryptographic keys (key and key.pub) remain unchanged as they are unique to each node.
- Restart the first node, followed by all other nodes.
- Approach 2: Sync all nodes to Recover
- Stop the first node and backup the necessary files as in Approach 1.
- Delete data/database, data/caches, and DATABASE_METADATA.json from each node, keeping the cryptographic keys intact.
- Restore the backup to the first node and restart it.
- Once the first node is operational, start the remaining nodes. They will sync with the first node, allowing the network to resume block production and transactions.
Non-recommended Method
- Approach 3: Complete Network Backup
- Stop all nodes simultaneously to take a snapshot of the entire network’s data.
- Back up each node’s entire data directory.
- Restore the respective backups to each node.
- Restart all nodes simultaneously.
This approach, while straightforward, poses risks of data inconsistency and requires precise timing, making it less favourable for most operational environments.
Handling Corrupted Data
If log messages signify a corrupt database, the cleanest way to recover is:
-
Stop the node.
-
Restore the data from a previous backup.
-
Restart the node.
Effectively managing backups and restores in a Hyperledger Besu-based private blockchain is crucial for maintaining the network's health and data integrity. The recommended methods prioritise safety, ensuring that each node is correctly synchronised without compromising individual node security. By following these structured approaches, administrators can safeguard their networks against data loss and ensure seamless continuity even in the face of system failures.
For further details and updates on Besu functionalities, refer to the official Hyperledger Besu documentation - https://besu.hyperledger.org/development/private-networks/how-to/backup