hyperledger多机部署

一、环境配置

5台服务器全部是centos7.4

orderer 47.75.123.155 orderer.example.com orderer

peer0.org1 47.52.202.124   1G内存

peer1.org1 47.75.184.117

cli 启动后如果出错,很可能要重新安装

总结:

1、首先所有的服务器都要预先处理vim /etc/resolv.conf的问题,否则会有问题;

2、只有orderer服务器需要启动network_setup,获取bin文件夹,并且生成channel-artifacts crypto-config 两个文件夹

3、所有的服务器最好都copy一下chaincode文件夹

4、peer0运行cli后,有一个mychannel.block文件需要发送到其余的peer1,其中要进行多次copy,最终到其他peer的cli容器

5、peer的启动脚本docker-peer.yaml中有两处是org的CA编号,需要保持一致

二、服务器的初始化和安装有关软件

参考单机部署https://blog.csdn.net/frankxixu/article/details/81369411

的描述,完成环境搭建

0、vi ~/.ssh/known_hosts

解决连接问题

1、更新依赖源 sudo yum update

2、安装docker:

sudo yum install -y yum-utils \device-mapper-persistent-data \lvm2

3、安装有关的依赖

sudo yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repo

4、安装docker-ce

sudo yum install docker-ce

检查安装结果

docker --version

5、启动 service docker start

6、每次自动启动 chkconfig docker on

7、安装curl 命令 yum install curl

8、下载docker-compose,注意不是单引号

sudo curl -L https://github.com/docker/compose/releases/download/1.20.1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose

cp /usr/local/bin/docker-compose /usr/bin

10、docker-compose version  如果提示权限不足,那么chmod +x /usr/local/bin/docker-compose

11、安装go

curl -O https://storage.googleapis.com/golang/go1.10.1.linux-amd64.tar.gz

tar -C /usr/local -xzf go1.10.1.linux-amd64.tar.gz

解压缩到/usr/local目录

12、配置环境

vim /etc/profile

export PATH=$PATH:/usr/local/go/bin

export GOPATH=/opt/gopath

source /etc/profile

13、查看go 安装信息

echo $PATH

go version

14、安装git

yum install git

15、创建安装目录

mkdir -p /opt/gopath/src/github.com/hyperledger

16、进入安装目录

cd /opt/gopath/src/github.com/hyperledger

17、拉取源代码

git clone https://github.com/hyperledger/fabric.git

18、切换到分支

cd fabric

git checkout v1.0.0   这两个有差异!应该这样而不是上面的 -b是新建分支的意思!

19、拉取docker

cd examples/e2e_cli/

chmod +x download-dockerimages.sh

./download-dockerimages.sh -c x86_64-1.0.0 -f x86_64-1.0.0

docker images 查看下载内容

修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉 

所有节点都提前改一下,不然进入cli 指令错误

20、运行fabric网络    peer节点暂时不运行 orderer运行获取bin

cd examples/e2e_cli/

./network_setup.sh up

错误:fatal error: unexpected signal during runtime execution

./network_setup.sh down

docker rm -f $(docker ps -aq)

解决办法:

修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉

peer也需要修改,虽然不需要启动测试网络,但是不修改的话,进入cli,执行peer指令报错

21、在fabric目录下 mkdir aberic all节点

22、上一步生成了bin 在fabric/release/linux-amd64/下  orderer节点

./network_setup.sh down 先停止服务

cp -r bin /opt/gopath/src/github.com/hyperledger/fabric/aberic

还需要configtx.yaml 和 crypto-config.yaml

这两个文件来自/opt/gopath/src/github.com/hyperledger/fabric/examples/e2e_cli

cp configtx.yaml /opt/gopath/src/github.com/hyperledger/fabric/aberic

cp crypto-config.yaml /opt/gopath/src/github.com/hyperledger/fabric/aberic

copy chaincode 在 fabric/examples

cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic

配置齐全了!

22、准备有关文件 orderer节点

准备启动  aberic目录下

./bin/cryptogen generate --config=./crypto-config.yaml

结果生成

org1.example.com

org2.example.com

crypto-config 目录也添加了

生成创世区块

export FABRIC_CFG_PATH=$PWD

在fabric/aberic目录下执行以上

echo $PWD

输出:/opt/gopath/src/github.com/hyperledger/fabric/aberic

23、执行创世区块生成 orderer节点

在fabric/aberic目录下创建channel-artifacts目录

mkdir channel-artifacts

执行

./bin/configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block

./bin/configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/mychannel.tx -channelID mychannel

-------

查看ca的具体ID,写入peer节点的docker-peer01.yaml文件

/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config/peerOrganizations/org1.example.com/ca

三、orderer服务器

1、准备docker-orderer.yaml脚本,上传

scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-orderer.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic

2、启动orderer节点

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

要关闭的话执行:docker-compose -f docker-orderer.yaml down

这里即使有错误也会显示成功,主要要docker ps来看

四、peer0.org1服务器

不需要启动网络产生bin

需要channel-artifacts文件夹和crypto-config文件夹,channel-artifacts文件夹包含了channel的相关信息,crypto-config文件夹包含了所有节点的公钥,私钥和证书信息。这两个文件夹我们只在orderer服务器上生成就行了,然后拷贝到其他机器上就可以了。

在aberic目录下

还需要chaincode

copy chaincode 在 fabric/examples

cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic

cd fabric/aberic

scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts ./

scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config ./

在本地开发的机器上执行

scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-peer01.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic

#上传之前docker-peer01.yaml 中要更换CA的具体ID

回到peer0.org1 fabric/aberic/

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

#docker-compose -f docker-peer01.yaml down

#docker rm `docker ps -a -q`

进入 cli of peer0

docker exec -it cli bash

3、尝试有关智能合约指令

创建mychannel

peer channel create -o orderer.example.com:7050 -c mychannel -t 50 -f ./channel-artifacts/mychannel.tx

4、加入channel

peer channel join -b mychannel.block

peer0加入网络,由于cli是默认指向peer0的,docker-peer.yaml文件说明

可以修改cli配置,使得指向其他的peer

5、安装智能合约

peer chaincode install -n mychannel -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0

6、实例化chaincode

peer chaincode instantiate -o orderer.example.com:7050 -C mychannel -n mychannel -c '{"Args":["init","A","10","B","10"]}' -P "OR ('Org1MSP.member')" -v 1.0

7、查询

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}'

Query Result: 10

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'

8、交易

peer chaincode invoke -C mychannel -n mychannel -c '{"Args":["invoke","A","B","8"]}'

result: status:200 

 

五、peer1.org1

1、修改vim /etc/resolv.conf 配置,将 options timeout:2 attempts:3 rotate single-request-reopen 这一行内容注释掉

peer也需要修改,虽然不需要启动测试网络,但是不修改的话,进入cli,执行peer指令报错

2、从peer0.org1的cli中copy出mychannel.block文件,这个需要多次中转

3、在aberic目录下还需要chaincode、channel-artifacts crypto-config 和启动用的yaml脚本

(1)copy chaincode 在 fabric/examples

cp -r chaincode /opt/gopath/src/github.com/hyperledger/fabric/aberic

(2)cd fabric/aberic

scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts ./

scp -r [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/crypto-config ./

(3)在本地开发的机器上执行

scp -r /Users/developer/Desktop/git/Hyperledger_singleServer/multiple/docker-peer11.yaml [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic

(4)启动

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

docker ps

5a4ff44f7a41 containerID of cli   每次装系统都不一样,这个ID 会在后面copy mychannel.block文件中用到

(5) 获取mychannel.block

(5.1)首先从peer0.org1的cli中将mychannel.block考出

退出 peer0.org1 cli  (exit)

把peer0的cli中的mychannel.block copy出来到物理主机

docker cp 46370c0ca94e:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block /opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts/

(5.2)将该文件从peer0.org1发到peer1.org1

cd channel-artifacts  (peer0.org1)

scp -r mychannel.block [email protected]:/opt/gopath/src/github.com/hyperledger/fabric/aberic/channel-artifacts/

(5.3)想办法把该文件从peer1.org1的主机copy到其上的cli中

另外从本地建1个ssh 到peer1.org1

cd channel-artifacts

docker cp mychannel.block 5a4ff44f7a41:/opt/gopath/src/github.com/hyperledger/fabric/peer/

4、测试智能合约

(1)加入peer channel join -b mychannel.block

(2)安装智能合约

peer chaincode install -n mychannel -p github.com/hyperledger/fabric/aberic/chaincode/go/chaincode_example02 -v 1.0

(3)查询账户

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'

18

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}' 

2

(4)交易

peer chaincode invoke -C mychannel -n mychannel -c '{"Args":["invoke","A","B","1"]}'

result: status:200

(5)交易后查询

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","A"]}' 

Query Result: 1

peer chaincode query -C mychannel -n mychannel -c '{"Args":["query","B"]}'

Query Result: 19

(6)这里的交易会使得peer0.org1查询的结果也发生变化

 

你可能感兴趣的:(区块链,阿里云服务器)