Hyperledger Fabric 1.0 多机部署
环境搭建
在进行多机部署前,需要确保每一台服务器单机部署成功,可以运行官方示例fabric/examples/e2e_cli
。
具体搭建过程可以参考[https://blog.csdn.net/mellymengyan/article/details/77529390]
节点选择
笔者用3台服务器搭建5个节点,其中1个orderer节点,4个peer节点。
服务器 | 节点 |
---|---|
192.168.2.2 | peer0.org1.example.com peer1.org1.example.com client |
192.168.2.3 | peer0.org2.example.com peer1.org2.example.com |
192.168.2.4 | orderer.example.com |
读者可以根据服务器数量分配节点。
生成公私钥、证书等
1.选择任意一台服务器,在fabric/examples/e2e_cli
目录下执行
bash generateArtifacts.sh mychannel
此时会在此目录下生成两个文件channel-artifacts
和 crypto-config
。
channel-artifacts
用于orderer创建channel。
crypto-config
用于确保节点间的安全通信。
2.将这两个文件复制到其他服务器的相同目录下,若之前已存在,则需删除后替换。
设置peer0.org1和peer1.org1的配置文件
192.168.2.2
参考e2e_cli目录下的docker-compose-cli.yaml
编写配置文件,可以将此文件复制一份,在原来的基础上修改。
1.在e2e_cli目录下执行
cp docker-compopose-cli.yaml docker-compose-peer.yaml
然后打开docker-compose-peer.yaml
文件进行编辑。
笔者在此服务器上分配了org1的两个peer节点和cli,因此只需保留文件中的两个peer和cli部分配置信息,其余可以删除。
2.每个peer节点还需要配置好orderer节点的域名-IP映射,添加:
extra_hosts:
- "orderer.example.com:192.168.2.4"
3.对于cli的配置信息,去掉无效的depend,只保留org1的两个peer,并且需要添加各个节点的域名-IP映射:
extra_hosts:
- "peer0.org1.example.com:192.168.2.2"
- "peer1.org1.example.com:192.168.2.2"
- "peer0.org2.example.com:192.168.2.3"
- "peer1.org2.example.com:192.168.2.3"
- "orderer.example.com:192.168.2.4"
4.最后的配置信息如下:
services:
peer0.org1.example.com:
container_name: peer0.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer0.org1.example.com
extra_hosts:
- "orderer.example.com:192.168.2.4"
peer1.org1.example.com:
container_name: peer1.org1.example.com
extends:
file: base/docker-compose-base.yaml
service: peer1.org1.example.com
extra_hosts:
- "orderer.example.com:192.168.2.4"
cli:
container_name: cli
image: hyperledger/fabric-tools
tty: true
environment:
- GOPATH=/opt/gopath
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_LOGGING_LEVEL=DEBUG
- CORE_PEER_ID=cli
- CORE_PEER_ADDRESS=peer0.org1.example.com:7051
- CORE_PEER_LOCALMSPID=Org1MSP
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt
- CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key
- CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt
- CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/[email protected]/msp
working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
command: /bin/bash -c './scripts/script.sh ${
CHANNEL_NAME}; sleep $TIMEOUT'
volumes:
- /var/run/:/host/var/run/
- ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go
- ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/
- ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/
- ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts
depends_on:
- peer0.org1.example.com
- peer1.org1.example.com
extra_hosts:
- "peer0.org1.example.com:192.168.2.2"
- "peer1.org1.example.com:192.168.2.2"
- "peer0.org2.example.com:192.168.2.3"
- "peer1.org2.example.com:192.168.2.3"
- "orderer.example.com:192.168.2.4"
设置peer0.org2和peer1.org2的配置文件
192.168.2.3
步骤基本与上文相似,只是笔者没有选择此服务器作为一个cli节点,因此不需要配置cli部分,只需关注org2的两个peer。
设置orderer的配置文件
192.168.2.4
也是类似的步骤,在e2e_cli目录下复制docker-compose-cli.yaml文件,执行:
cp docker-compose-cli.yaml docker-compose-orderer.yaml
只保留orderer部分,不需要添加extra_hosts
配置信息为:
services:
orderer.example.com:
extends:
file: base/docker-compose-base.yaml
service: orderer.example.com
container_name: orderer.example.com
设置base目录的配置文件
以上的配置信息都extends了fabric/examples/e2e_cli/base
目录下的docker-compose-base.yaml
,这个文件中配置了各节点的端口号。
由于示例是单机运行,此文件中对端口进行了映射。根据笔者的节点分配情况,peer0.org1和peer0.org2在同一台服务器,因此不需要修改端口映射。peer0.org2和peer1.org2在另一台服务器上,因此需要修改端口映射:
把原来的
ports:
- 9051:7051
- 9052:7052
- 9053:7053
改为
ports:
- 7051:7051
- 7052:7052
- 7053:7053
原来的
ports:
- 10051:7051
- 10052:7052
- 10053:7053
改为
ports:
- 8051:7051
- 8052:7052
- 8053:7053
记得每台服务器都需修改!
启动各节点
1.启动peer0.org1、peer1.org1和cli
192.168.2.2
在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps
命令查看,若生成并运行了cli和两个peer容器,就说明节点启动成功。
2.启动peer0.org2、peer1.org2
192.168.2.3
在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps
命令查看,若生成并运行了两个peer容器,就说明节点启动成功。
3.启动orderer
192.168.2.4
在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps
命令查看,若生成并运行了orderer容器,就说明节点启动成功。
修改scripts/script.sh
(写在前面:笔者在参考其他多机部署的资料中时并没有看到这一步,于是遇到了peer1.org1无法加入通道的问题,经过分析修改了script.sh便可以运行了。至于为什么他们没有修改也能运行,笔者现在也没搞懂,希望有大佬知道的话可以指点一下,谢谢!)
返回cli所在的服务器
192.168.2.2
在运行网络之前,需要修改e2e_cli目录下的scripts/script.sh
。
在setGlobals()方法中,环境变量CORE_PEER_ADDRESS需要说明节点的端口号。我们在base/docker-compose-base.yaml
中进行了端口映射,所以需要修改此环境变量中的端口号:
把
peer1.org1.example.com:7051
修改为
peer1.org1.example.com:8051
把
peer1.org2.example.com:7051
修改为
peer1.org2.example.com:8051
(当然读者也可以尝试不用脚本,手动去创建通道、选择anchor节点、peer加入通道、安装链码、实例化链码等一系列操作,只是比较麻烦。)
启动网络
192.168.2.2
1.在e2e_cli目录下执行:
docker exec -it cli bash
进入cli容器
2.在cli容器中执行脚本:
./scripts/script.sh mychannel
最后出现All GOOD, End-2-End execution completed ,就说明网络运行成功。