区块链架构-fabric集群版安装(centos7版本)
书接上回,配置多机器多节点集群模式:
服务器选择说明
暂不考虑高可用,也不考虑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
basedocker-compose-base.yaml
操作步骤简述
- 创建证书;
- 创建创世区块;
- 创建channel、锚节点配置 ;
- 启动orderer、peer节点、注册channel;
- 链码安装及调用。
配置阶段(基于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: orderer
PeerOrgs:
- 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-artifacts
export 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
主要改动点:
- container_name中涉及域名部分替换为chanpay.com
- environment中涉及域名部分替换为chanpay.com
- volumes中涉及域名部分替换为chanpay.com
- 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配置继承与basedocker-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
需要注意几点:
- 是跨机访问,所以要设置域名和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实例所以我们在这个配置文件中增加了相关配置:
- 由于是跨机访问,所以设置域名,ip映射,添加extra_hosts节点
- 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
- 进入CLI容器:
$ docker exec -it cli bash
- 然后操作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
- 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操作同上,注意:更改相关环境变量,以及文件配置路径上
链码验证
- 安装链码
$peer chaincode install -n example -v 1.0 -p github.com/hyperledger/fabric/chaincode/go/chaincode_example02
说明:
-n :链码名称
-v :链码版本
-p :链码所在目录路径
- 初始化链码
$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')"
- 查询链码
$ peer chaincode query -o orderer.chanpay.com:7050 -C mychannel -n example -c '{"Args":["query","a"]}'
- 调用链码
$ peer chaincode invoke -o orderer.chanpay.com:7050 -C mychannel -n houseregistry -c '{"Args":["queryHouse","HouseInfo-1"]}'
写到文末
到这里基本的安装部署就结束了,但是fabric的版本在不断更新,最好的途径还是参考官方文档,目前国内也有很多翻译版的官方文档可以参考。