首先能够根据官方Fabric自带的e2e_cli列子中的集群方案来生成咱们本身的集群,与案例不一样的是咱们须要把容器都分配到不一样的服务器上,彼此之间经过网络来进行通讯,网络构建完成后则进行相关的channel和chaincode操做。html
笔者目前申请了五台服务器,全部的服务器均是按照上述e2e_cli环境构建与测试步骤配置。计划其中四台服务器运行peer节点,另一台服务器运行orderer节点,为其它四个节点提供order服务。git
虚拟机具体参数以下表所示:github
名称docker |
ip安全 |
节点标识bash |
节点Hostname服务器 |
Organization(组织机构)网络 |
Server1测试 |
10.130.116.8加密 |
orderer |
orderer.example.cn |
Orderer |
Server2 |
10.130.116.9 |
sp0 |
peer0.org1.example.cn |
Org1 |
Server3 |
10.130.116.10 |
sp1 |
peer1.org1.example.cn |
Org1 |
Server4 |
10.130.116.25 |
sp2 |
peer0.org2.example.cn |
Org2 |
Server5 |
10.130.116.27 |
sp3 |
Peer1.org2.example.cn |
Org2 |
公私钥和证书是用于Server与Server之间的安全通讯,另外要建立channel并让其它节点加入channel就须要创世区块,这些必备文件均可以经过一个命令生成,而且官方已经给出了脚本,在以下目录中的文件:
/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli/ generateArtifacts.sh
使用generateArtifacts.sh生成证书和config.tx,具体执行命令以下:
bash generateArtifacts.sh mychannel
这里建立了5台服务器,在任意一台服务器的该目录下执行此项命令便可,将会生成两个目录,它们分别为channel-artifacts和crypto-config,两个目录的结果和含义以下视图:
在上述目录里的文件用于orderer建立channel,它们根据configex.yaml的配置生成。
在上述目录里有orderer和peer的证书、私钥和用于通讯加密的tls证书等文件,它经过configex.yaml配置文件生成。
根据4.2的方案,以及以前所述的gopath目录等配置方案,咱们假定全部的服务器都按照该文档的配置来操做,全部服务器都有Fabric源码且目录为
/opt/gopath/src/github.com/hyperledger/fabric
咱们在Server1上执行以下命令生成构建Fabric网络所需的成员证书等必要材料:
bash generateArtifacts.sh mychannel
如4.2中所述,该命令只需在其中某一台服务器上运行一次便可,其它服务器无需再次运行。
在运行该命令的服务器/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli目录下会生成channel-artifacts和crypto-config目录,须要把它们拷贝到其它服务器相同的e2e_cli目录下,若是在其它服务器中已经存在该目录,则先把此目录删除。
当全部服务器都有同一个channel-artifacts和crypto-config目录后,接下来就开始配置compose文件。
e2e_cli中提供了多个yaml文件,咱们能够基于docker-compose-cli.yaml文件建立,具体可执行以下命令:
cp docker-compose-cli.yaml docker-compose-peer.yaml
而后修改docker-compose-peer.yaml,去掉orderer的配置,只保留一个peer和cli,由于咱们要多级部署,节点与节点以前又是经过主机名通信,因此须要修改容器中的host文件,也就是extra_hosts设置,修改后的peer配置以下:
1 peer0.org1.example.com: 2 container_name: peer0.org1.example.com 3 extends: 4 file: base/docker-compose-base.yaml 5 service: peer0.org1.example.com 6 extra_hosts: 7 - "orderer.example.com:10.130.116.8"
一样,cli也须要可以和各个节点通信,因此cli下面也须要添加extra_hosts设置,去掉无效的依赖,而且去掉command这一行,由于咱们是每一个peer都会有个对应的客户端,也就是cli,因此我只须要去手动执行一次命令,而不是自动运行。修改后的cli配置以下:
1 cli: 2 container_name: cli 3 image: hyperledger/fabric-tools 4 tty: true 5 environment: 6 - GOPATH=/opt/gopath 7 - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 8 - CORE_LOGGING_LEVEL=DEBUG 9 - CORE_PEER_ID=cli 10 - CORE_PEER_ADDRESS=peer0.org1.example.com:7051 11 - CORE_PEER_LOCALMSPID=Org1MSP 12 - CORE_PEER_TLS_ENABLED=true 13 - 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 14 - 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 15 - 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 16 - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 17 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer 18 volumes: 19 - /var/run/:/host/var/run/ 20 - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go 21 - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ 22 - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ 23 - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts 24 depends_on: 25 - peer0.org1.example.com 26 extra_hosts: 27 - "orderer.example.com:10.130.116.8" 28 - "peer0.org1.example.com:10.130.116.9" 29 - "peer1.org1.example.com:10.130.116.10" 30 - "peer0.org2.example.com:10.130.116.25" 31 - "peer1.org2.example.com:10.130.116.27"
在3.2示例单机模式下,4个peer会映射主机不一样的端口,可是咱们在多机部署的时候是不须要映射不一样端口的,因此须要修改base/docker-compose-base.yaml文件,将全部peer的端口映射都改成相同的:
1 ports: 2 - 7051:7051 3 - 7052:7052 4 - 7053:7053
与peer0.org1.example.com节点compose文件配置同样,不过须要将启动的容器改成peer1.org1.example.com,而且添加peer0.org1.example.com的IP映射,对应的cli中也改为对peer1.org1.example.com的依赖。这是修改后的peer1.org1.example.com上的配置示例:
1 peer1.org1.example.com: 2 container_name: peer1.org1.example.com 3 extends: 4 file: base/docker-compose-base.yaml 5 service: peer1.org1.example.com 6 extra_hosts: 7 - "orderer.example.com:10.130.116.8" 8 - "peer0.org1.example.com:10.130.116.9" 9 10 cli: 11 container_name: cli 12 image: hyperledger/fabric-tools 13 tty: true 14 environment: 15 - GOPATH=/opt/gopath 16 - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock 17 - CORE_LOGGING_LEVEL=DEBUG 18 - CORE_PEER_ID=cli 19 - CORE_PEER_ADDRESS=peer1.org1.example.com:7051 20 - CORE_PEER_LOCALMSPID=Org1MSP 21 - CORE_PEER_TLS_ENABLED=true 22 - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.crt 23 - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/server.key 24 - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer1.org1.example.com/tls/ca.crt 25 - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp 26 working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer 27 volumes: 28 - /var/run/:/host/var/run/ 29 - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go 30 - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ 31 - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/ 32 - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts 33 depends_on: 34 - peer1.org1.example.com 35 extra_hosts: 36 - "orderer.example.com:10.130.116.8" 37 - "peer0.org1.example.com:10.130.116.9" 38 - "peer1.org1.example.com:10.130.116.10" 39 - "peer0.org2.example.com:10.130.116.25" 40 - "peer1.org2.example.com:10.130.116.27"
与上述相似,能够再次设置peer0.org2.example.com及peer1.org2.example.com节点compose配置文件。
与建立peer的配置文件相似,咱们也复制一个yaml文件出来进行修改:
cp docker-compose-cli.yaml docker-compose-orderer.yaml
orderer服务器上咱们只须要保留order设置,其余peer和cli设置均可以删除。orderer能够不设置extra_hosts。
如下是order compose的配置示例:
1 orderer.example.com: 2 extends: 3 file: base/docker-compose-base.yaml 4 service: orderer.example.com 5 container_name: orderer.example.com
本章节及后面的一章能够直接参阅:Fabric 1.0的多机部署,在这位老师的博客里写的很是清楚,并且我也是参考这篇博客来完成多机多节点自动部署方案的,只是手动调配及后续操做在网上基本上没有可供参考的中文内容,须要查看官网文档来逐步实现。