书接上回,配置多机器多节点集群模式:

服务器选择说明

暂不考虑高可用,也不考虑kafka,所以先使用三台机器。
3M = 3台服务器
1O = 1 Order
2P = 2 Org2Peer
3.1.2证书加密
证书与加密暂时不采用CA ,直接使用官方提供的工具configtxgen生成文件。

核心配置文件

configtx.yaml
crypto-config.yaml
docker-compose-org1-peer.yaml
docker-compose-org2-peer.yaml
docker-compose-order.yaml
base\docker-compose-base.yaml

操作步骤简述

  1. 创建证书;
  2. 创建创世区块;
  3. 创建channel、锚节点配置 ;
  4. 启动orderer、peer节点、注册channel;
  5. 链码安装及调用。

配置阶段(基于fabric/examples/e2e_cli)

创建目录,并拷贝文件信息

$ mkdir -p $GOPATH/src/github.com/hyperledger/chanpay/bin/$ GOPATH/src/github.com/hyperledger/fabric/release/linux-amd64/bin

二进制文件拷贝至该目录下

$ mkdir -p  $GOPATH/src/github.com/hyperledger/chanpay/docker-compose/

并将$GOPATH/src/github.com/hyperledger/fabric/examples/e2e_cli目录下所有文件拷贝到该目录下

创建证书配置

证书配置依赖crypto-config.yaml文件,对原有文件做一定修改
1)Order与Peer的Domain设置,设置为自己的域名
2)Template.Count为一个Org下peer数量,设置为2
3)Users.Count为用户数量,为1,默认一个admin用户,一个普通user用户
更改如下:

OrdererOrgs: - Name: Orderer   Domain: chanpay.com   Specs:     - Hostname: ordererPeerOrgs: - Name: Org1   Domain: org1.chanpay.com   Template:     Count: 2   Users:     Count: 1 - Name: Org2   Domain: org2.chanpay.com   Template:     Count: 2   Users:     Count: 1

如上证书配置完成,我们使用cryptogen工具来生成相关配置,生成crypto-config文件:

cd $GOPATH/src/github.com/hyperledger/chanpay/docker-compose../bin/cryptogen generate --config=./crypto-config.yaml

创建创世区块、Channel、Anchor peer配置

这块配置依赖configtx.yaml文件,根据我们设定的orderer和org设置我们做一定修改 ,主要改动点:
1)MSPDir设置,相关目录替换为新的项目目录
2)设计域名的部分均替换为chanpay.com
如上,创世区块、Channel等配置已经完成,这里还是用configtxgen工具生成相关文件。

创建order genesis block

mkdir channel-artifactsexport FABRIC_CFG_PATH=$PWD    ../bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

创建Channel Configfiguration

export CHANNEL_NAME=mychannel../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

定义org1的anchor peer

export CHANNEL_NAME=mychannel../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org1MSP

定义org2的anchor peer

export CHANNEL_NAME=mychannel../bin/configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID $CHANNEL_NAME -asOrg Org2MSP

编辑节点基础配置文件

Order和Peer节点配置会继承base目录下的 docker-compose-base.yaml文件,所以先对这个文件进行调整。
该文件是docker-compose的标准配置文件,其定义我们的orderer,peer的容器实例的配置,我们这里重点关注:container_name、environment、volumes、ports
主要改动点:

  1. container_name中涉及域名部分替换为chanpay.com
  2. environment中涉及域名部分替换为chanpay.com
  3. volumes中涉及域名部分替换为chanpay.com
  4. ports不需要像单机版特别修改以防止不同peer端口冲突,所以这里peer的端口都使用7051和7053

编辑Orderer配置文件

Orderer节点启动时主要使用docker-compose-orderer.yaml文件,如果没有, 可以在$GOPATH/src/github.com/hyperledger/chanpay.com/docker-compose/目录中创建或者将docker-compose-cli.yaml拷贝一份命名为docker-compose-orderer.yaml文件只保留orderer部分,将域名example.com替换为chanpay.com。修改方式如下:
由于Orderer配置继承与base\docker-compose-base.yaml,其中已定义了大部分配置,所以这里的Orderer配置文件非常简单。
主要改动点:文件中所有涉及域名部分替换为chanpay.com

services: orderer.chanpay.com:   extends:     file:   base/docker-compose-base.yaml     service: orderer.chanpay.com   container_name: orderer.chanpay.com

配置peer文件

Peer节点启动时主要使用docker-compose-peer.yaml文件,这里我们定义了两个组织,每个组织一个peer节点,所以我们创建两个配置文件:

 docker-compose-org1-peer.yaml docker-compose-org2-peer.yaml

同样在$GOPATH/src/github.com/hyperledger/chanpay/docker-compose/目录中创建可以将docker-compose-cli.yaml拷贝一份命名为docker-compose-org1-peer.yaml(org服务器1)和docker-compose-org2-peer.yaml(org服务器2)文件只保留org peer部分,并将域名example.com替换为chanpay.com

docker-compose-org1-peer.yaml

需要注意几点:

  1. 是跨机访问,所以要设置域名和IP的映射,添加extra_hosts节点
    extra_hosts:
     - "orderer.chanpay.com:172.20.6.99"     - "peer0.org2.chanpay.com:172.20.6.98"     - "peer1.org2.chanpay.com:172.20.6.98"

Docker-compose-org2-peer.yaml

类似org1的peer配置文件,但这里有个特殊,会在org2的机器上运行cli实例所以我们在这个配置文件中增加了相关配置:

  1. 由于是跨机访问,所以设置域名,ip映射,添加extra_hosts节点
  2. cli的默认节点信息设置为peer0,org2环境变量enviroment以及数据卷volumes对应目录要更改,至当前工作目录

启动服务

orderer节点

在orderer节点上,我们进入目录

cd /opt/gopath/src/github.com/hyperledger/chanpay.com/docker-compose

然后执行:

docker-compose -f docker-compose-orderer.yaml up -d

启动org1的peer节点

在org1节点上,进入目录

cd /opt/gopath/src/github.com/hyperledger/chanpay.com/docker-compose

然后执行:

docker-compose -f docker-compose-org1-peer.yaml -f docker-compose-org1-couch.yaml up -d

注:如果没有启用CouchDB,这里执行:

docker-compose -f docker-compose-org1-peer.yaml up -d

启动org2的peer节点

在org2节点机器上,我们进入目录

 cd /opt/gopath/src/github.com/hyperledger/chanpay.com/docker-compose

然后执行:

docker-compose -f docker-compose-org2-peer.yaml -f docker-compose-org2-couch.yaml up -d

注:如果没有启用CouchDB,这里执行:

docker-compose -f docker-compose-org2-peer.yaml up -d

创建channel,链码校验

创建channel

  1. 进入CLI容器:
$ docker exec -it cli bash
  1. 然后操作channel,创建channel:
$ export CHANNEL_NAME=mychannel$ peer channel create -o orderer.chanpay.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/chanpay/crypto-config/ordererOrganizations/chanpay.com/orderers/orderer.chanpay.com/msp/tlscacerts/tlsca.chanpay.com-cert.pem
  1. Org1 peer0加入channel
    环境变量配置
$ CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/chanpay/crypto-config/peerOrganizations/org1.chanpay.com/users/Admin@org1.chanpay.com/msp $ export CORE_PEER_ADDRESS=peer0.org1.chanpay.com:7051 $ export CORE_PEER_LOCALMSPID="Org1MSP" $ export CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/chanpay/crypto-config/peerOrganizations/org1.chanpay.com/peers/peer0.org1.chanpay.com/tls/ca.crt 

正式加入通道

$ peer channel join -b mychannel.block

其它各节点加入channel操作同上,注意:更改相关环境变量,以及文件配置路径上

链码验证

  1. 安装链码
$peer chaincode install -n example -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/chaincode_example02

说明:
-n :链码名称
-v :链码版本
-p :链码所在目录路径

  1. 初始化链码
$peer chaincode instantiate -o orderer.chanpay.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/chanpay.com/orderers/orderer.chanpay.com/msp/tlscacerts/tlsca.chanpay.com-cert.pem -C mychannel -n example -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "OR ('Org1MSP.member','Org2MSP.member')"
  1. 查询链码
$ peer chaincode query -o orderer.chanpay.com:7050 -C mychannel -n example -c '{"Args":["query","a"]}'
  1. 调用链码
$ peer chaincode invoke -o orderer.chanpay.com:7050 -C mychannel -n houseregistry -c '{"Args":["queryHouse","HouseInfo-1"]}'

写到文末

到这里基本的安装部署就结束了,但是fabric的版本在不断更新,最好的途径还是参考官方文档,目前国内也有很多翻译版的官方文档可以参考。