Hyperledger Fabric Disaster Recovery Methods

Hyperledger Fabric Disaster Recovery Methods

Hyperledger Fabric is gaining potential day by day. Many enterprises are trying fabric in their applications. When using large networks involving more number of peers and orderers, it is very essential to maintain a backup of the ledger data. It will help in case there is a network failure. It will also help in the development phase as one can use the backup data to perform future tests.

In this article, I will address how to take a backup and how to use the backup in a Hyperledger Fabric.

Location of Ledger Data in Containers

Generally, the ledger data in a peer is stored in /var/hyperledger/production/ location. And in an orderer, it is in /var/hyperledger/production/orderer. We need to take a backup of these folders.

Steps to take Backup

Step 1:

To take a backup, it is necessary to create space to store data. As the network runs inside Docker containers we shall use volumes to achieve this. I will be using a basic network with one peer, one orderer, one ca and one CouchDB. As we have one peer and one orderer, we need to create two volumes, say backup_orderer and backup_peer. We need to specify these as volumes in docker-compose.yml file as below.

Terminal window
networks:
basic:
volumes:
backup_peer:
backup_orderer:

This will create two volumes at the time of starting a network.

Step 2:

The next step is to mount these volumes to the containers. For a peer, we can define volumes as shown below.

Terminal window
volumes:
- backup_peer:/var/hyperledger/production

For an orderer, we can define volume as shown below.

Terminal window
volumes:
- backup_orderer:/var/hyperledger/production/orderer

Now we are ready to start the network by executing docker-compose. All the data that we generate as part of the transactions will now get copied to the volumes. One can use the cloud to store the data in volumes.

Peer Backup Underhood

In peers, ledger data gets stored in /var/hyperledger/production. production folder has three subfolders namely chaincodes, ledgersData, transientStore, Inside ledgersData we have six folders namely bookkeeper, chains, configHistory, historyLeveldb, ledgerProvider, pvtdataStore. Inside chains we have two other folders namely chains, index. chains folder has all the channel data, a folder with channel name and complete blockchain of that channel (file blockfile_000000).

Orderer Backup Underhood

In the orderer, ledger data gets stored in /var/hyperledger/production. production has orderer folder. orderer has two folders namely chains, index. chains has folders with names of channel and testchainid. All the folders have blockfile_000000.

blockfile_000000 in testchainid contains all the details of the channels. Rest of the blockfile_000000 in other folders deals with ledger data of the channels.

Steps to Use Backup Data

Now we have the backup data. You can find the volumes at /var/lib/docker/volumes in your machine or else in the cloud if you stored there. Mount the end point of volumes to the /var/hyperledger/production of peers and orderers in docker-compose.yml.

Start the network by executing a docker-compose file. As the volumes are mounted, the ledger data will automatically get copied to the new network. There is no need to create channels and join peers, as all the required data is copied to respective folders in containers. Check whether the data is perfect or not by executing queries.


If you have any doubts or stuck somewhere you can comment below and let us know, we will try to answer as soon as possible. 😀