多机部署
1. 搭建环境
本文使用的是Fabric 1.4版本,搭建solo模式的4+1的架构:1Order,4Peer,机器之间的网络需要互通,保证五台机子上的Fabric网络可以正常运行。举例说明如下:
域名 | ip |
---|---|
orderer.example.com | 172.18.4.49 |
peer0.org1.example.com | 172.18.4.33 |
peer1.org1.example.com | 172.18.4.34 |
peer0.org2.example.com | 172.18.4.35 |
peer1.org2.example.com | 172.18.4.36 |
Fabric 的环境搭建过程不再详解,例子中的order节点和4个peer节点放在5台不同机子上,我们搭建的过程共使用三台:order1台 + 组织1的peer0和peer1一台,组织2的peer0和peer1一台。
2. 多机环境搭建
只在Orderer节点的机子上修改配置文件,最后通过scp命令将配置文件复制到其余四台机子,保证所有的节点所使用的配置文件都是相同的。
本文使用 first-network 这个文件夹内的配置文件来修改为自己所需要的配置文件。(位于fabric同级目录的fabric-samples官方样例下的first-network)
2.1 准备配置文件(只在Order节点操作)
#step1 进入到first-network文件夹的上一级目录
cd ~/go/src/github.com/hyperledger/fabric/scripts/fabric-samples/
#step2 拷贝first-network文件夹,并命名为first
cp -r first-network/ first
#step3 进入到first文件夹内
cd first
#step4 删除此次多机环境搭建使用不到的文件,文件夹内剩余的文件有
.
├── base
│ ├── docker-compose-base.yaml
│ └── peer-base.yaml
├── channel-artifacts
├── configtx.yaml
├── crypto-config.yaml
├── docker-compose-cli.yaml
├── docker-compose-couch.yaml
本文就对以上文件进行修改搭建自己的Fabric多机网络
由于官方的 first-network 中的配置文件中使用的就是4+1的架构,所以我们可以直接生成所需要的证书文件,创世区块,通道配置文件。
2.2 生成相关配置文件(只在Order节点操作)
#step1 生成证书文件
cryptogen generate --config=./crypto-config.yaml
#step2 生成创世区块 首先要确保channel-artifacts文件夹存在,如果不存在需要手动创建,不然会报错
configtxgen -profile TwoOrgsOrdererGenesis -channelID byfn-sys-channel -outputBlock ./channel-artifacts/genesis.block
#step3 生成通道配置文件 其中通道名mychannel可以修改为自己的
configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
#step4 生成锚节点配置文件
#========Org1=============
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
##========Org2=============
configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
完成后在 channel-artifacts 中应该有以下几个文件:
2.3 修改节点配置文件(只提醒一次:所有文件内容的格式不能变,前面空格的数量必须和原文件一致)
2.3.1 base/docker-compose-base.yaml(Order主机)
删掉order.example.com下image项的冒号
下面内容暂不需要修改!!!(因为我们是多机环境,不存在端口冲突问题暂时用不到)
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: peer-base.yaml
service: peer-base
environment:
- CORE_PEER_ID=peer0.org1.example.com
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0.org1.example.com:7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.org1.example.com:8051 #这里更改为7051,因为我们是多机环境,不存在端口冲突问题
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
volumes:
- /var/run/:/host/var/run/
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/msp:/etc/hyperledger/fabric/msp
- ../crypto-config/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls:/etc/hyperledger/fabric/tls
- peer0.org1.example.com:/var/hyperledger/produc