블록체인은 불변이고 절대 종료될 수 없기 때문에 블록체인에서의 백업하는 것은 불가능해 보입니다. 이 경우는 공개형(public) 블록체인에 해당되지만 Hyperledger Fabric 과 같은 허가된 블록체인의 경우에는 해당되지 않습니다.
Hyperledger Fabric 은 맞춤형 Private 블록체인 이며 때때로 블록체인 시스템을 새 버전으로 마이그레이션하거나 새 서버로 이동해야 합니다. 이러한 이유로 현재 시스템에서 백업을 가져와야 할 수도 있습니다.
필자는 Hyperledger Fabric 네트워크를 다른 서버로 옮겨서 실행을 해야하는 상황이었습니다. 이 때 사용한 Hyperledger Fabric 백업(backup) 및 복구(restore) 하는 방법을 설명드릴려고 합니다.
이 튜토리얼과 예제에서는 우리가 시작한 블록체인이 Fabric Samples에서 제공하는 test-network 를 사용하여 시작되었다고 가정합니다. 디렉토리는 아래와 같이 정의됩니다.
https://hyperledger-fabric.readthedocs.io/en/release-2.2/test_network.html
Using the Fabric test network — hyperledger-fabricdocs master documentation
Docs » Getting Started » Using the Fabric test network Edit on GitHub Using the Fabric test network After you have downloaded the Hyperledger Fabric Docker images and samples, you can deploy a test network by using scripts that are provided in the fabric
hyperledger-fabric.readthedocs.io
Hyperledger Fabric 백업하기
백업이 작동하는 데 필요한 4가지 주요 항목이 있습니다. 이 4가지 항목을 사용해야만 네트워크를 다시 실행할 수 있습니다.
1. Crypto materials (public/private keys and certificates)
2. Channel artifacts (genesis block and channel blocks)
3. Peer backup files
4. Orderer backup files
네트워크에 구성 DB로 couchDB 가 있는 경우, 피어가 자신의 블록을 갖게 된 후에는 couchDB 를 동기화 상태로 유지하기 때문에 couchDB 파일을 백업할지 여부는 중요하지 않습니다.
자, 이제 백업을 시작하겠습니다.
첫번째. 백업 폴더 생성
백업 파일 생성 위치는 아무위치나 상관없습니다. 필자는 test-network 하위에 생성했습니다.
cd ~/fabric-samples/test-network
mkdir backup
두번째. crypto materials 백업
Fabric 버전의 따라 cryto-config 라는 폴더 하위에 생성될 수 있으나, 필자는 v2.2 기준으로 하기 때문에 organizations 사본 생성했습니다.
# cp –r crypto-config/ backup/
# 권한문제로 복사할 수 없을 경우, 다음과 같이 sudo 로 복사하고 사용계정으로 owner 를 변경
sudo cp -r organizations/ backup/
sudo chown -R hyper:hyper backup/organizations/
세번째. channel artifact 백업
cp -r channel-artifacts/ backup/
cp -r system-genesis-block/ backup/
네번째. Peer 데이터 백업
peer 의 데이터로는 사용된 원장 데이터, 블록 데이터 및 체인코드는 피어의 /var/hyperledger/production/ 폴더에 저장됩니다. 이 폴더에는 5개의 폴더가 있습니다.
1. chaincodes
2. externalbuilder
3. ledgersData
4. lifecycle
5. transientstore
이 폴더들은 Peer 를 다시 생성하는데 필요합니다. 따라서 /var/hyperledger/production 폴더 내에 모든 항목을 backup/peer0.org1/ 폴더로 복사하세요.
docker container cp peer0.org1.example.com:/var/hyperledger/production ./backup/peer0.org1
docker container cp peer0.org2.example.com:/var/hyperledger/production ./backup/peer0.org2
모든 org 의 모든 peer 의 데이터를 다음과 같이 복사해주세요.
다섯번째. orderer 데이터 백업
orderer 에서 데이터를 추출합니다. 블록 파일 및 채널 구성 세부 정보는 orderer의 /var/hyperledger/production/orderer/ 폴더에 저장됩니다. 이 폴더에는 3개의 기본 폴더가 있습니다.
1. chains
2. etcdraft
3. index
이 폴더들은 orderer 를 다시 생성하는 데 필요합니다. 따라서 /var/hyperledger/production/orderer/ 폴더 내의 모든 항목을 backup/orderer/ 폴더로 복사하십시오.
docker container cp orderer.example.com:/var/hyperledger/production/orderer ./backup/orderer
다음과 같이 6개의 항목이 복사되었다면 이제 네트워크를 다시 실행하는데 필요한 모든 중요한 파일을 백업했습니다.
네트워크를 종료하기 전에 다시 올렸을 때를 비교해보기 위해 블록높이를 확인해봅니다.
docker container exec -it peer0.org1.example.com sh
# 컨테이너 안에서 아래 명령어
peer channel getinfo -c mychannel
이제 백업을 다른 네트워크에 배포할 준비가 되었습니다.
'Hyperledger Fabric' 카테고리의 다른 글
Hyperledger Fabric v2.2 백업(backup) 및 복구(restore)(2) (1) | 2021.11.26 |
---|---|
Hyperledger Fabric 2.0 체인코드 배포하기(번역 및 실습) (0) | 2020.04.13 |