【视频】超级账本HyperLedger:使用Ansible进行Fabric多节点分布式部署(实战)

作者: 李佶澳   转载请保留:原文地址   更新时间:2018/07/29 13:03:43

说明

这是“网易云课堂IT技术快速入门学院”使用的素材。操作、配置文件和代码讲解视频在网易云课堂《HyperLeger Fabric进阶实战课》第三章中。

这其实已经是一套非常实用的Ansible部署脚本了,完全可以应用于生产。 脚本托管在github上:hyperledger-fabric-ansible,网易云上有视频讲解:视频

微信公众号:我的网课 (二维码在文末,关注后自动回复个人微信号)

QQ交流群: 576555864

如果视频中有讲解不到位或需要订正的地方,可以到知识星球“区块链实践分享”中提问(二维码在文末)。

为了统一我的环境,这里的IP变为33网段了,之前视频中都是88网段的,IP变化不影响实质。

相关笔记

都是一边学习一边记录的,有疑惑地方以官方文档为准:

视频演示:

【视频】超级账本HyperLedger:Fabric的全手动、多服务器部署教程

【视频】超级账本HyperLedger:使用Ansible进行Fabric多节点分布式部署(实战)

【视频】超级账本HyperLedger:Fabric从1.1.0升级到1.2.0

【视频】超级账本HyperLedger:Fabric使用kafka进行区块排序(共识)

【视频】超级账本HyperLedger:为Fabric的Peer节点配置CouchDB

【视频】超级账本HyperLedger:Fabric-CA的使用演示(两个组织一个Orderer三个Peer)

【视频】超级账本HyperLedger:Fabric的Chaincode(智能合约、链码)开发、使用示

【视频】超级账本HyperLedger:Fabric Go SDK的使用

【视频】超级账本HyperLedger:Fabric nodejs SDK的使用

【视频】超级账本HyperLedger:Fabric进阶,在已有的Channel中添加新的组织

文字介绍:

超级账本HyperLedger:超级账本工作组旗下项目介绍

超级账本HyperLedger:Fabric掰开揉碎,一文解惑

超级账本HyperLedger:Fabric的基本概念与基础用法

超级账本HyperLedger:FabricCA的基本概念与用法讲解

超级账本HyperLedger:FabricCA的级联使用(InterMediateCA)

超级账本HyperLedger:Fabric Chaincode(智能合约、链码)开发方法

超级账本HyperLedger:Fabric Channel配置的读取转换

超级账本HyperLedger:Explorer安装使用

超级账本HyperLedger:Cello部署和使用

问题汇总:

超级账本HyperLedger:Fabric部署过程时遇到的问题汇总

超级账本HyperLedger:Fabric的Chaincode开发过程中遇到的问题

超级账本HyperLedger:Fabric Node.js SDK使用时遇到的问题

超级账本HyperLedger:Fabric Golang SDK使用时遇到的问题

超级账本HyperLedger:Fabric 1.2.0使用时遇到的问题

目标

在192.168.33.11、192.168.33.12、192.168.33.13上部署一个有两个组织三个Peer组成的联盟。

联盟的二级域名为: example.com。

组织一的域名为: member1.example.com

组织二的域名为: member2.example.com

组织一中部署了一个Orderer和两个Peer,域名和IP分别为:

orderer0.member1.example.com  192.168.33.11
peer0.member1.example.com     192.168.33.11
peer1.member1.example.com     192.168.33.12

组织二没有部署Orderer参与共识,只部署一个Peer:

peer0.member2.example.com     192.168.33.13

共识算法是solo,如果要切换为其它共识算法,例如kafka,需要另外部署kafka,并修改配置文件。

准备

下载Ansible脚本,这里使用Fabric1.1.x,1.2.x以及正在准备的1.3暂时没有文档,可以直接参考对应分支中的README.md

git clone https://github.com/introclass/hyperledger-fabric-ansible.git
cd hyperledger-fabric-ansible
git branch Fabric-1.1.x -t origin/Fabric-1.1.x 
git checkout Fabric-1.1.x  

0 将要部署到目标环境中的二进制文件复制到output/example.com/bin/目录中

mkdir -p output/example.com/
cd output/example.com/
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.1.0/hyperledger-fabric-linux-amd64-1.1.0.tar.gz.md5
tar -xvf hyperledger-fabric-linux-amd64-1.1.0.tar.gz

1 在inventories/example.com中创建配置文件,以及ansible需要的hosts文件:

configtx.yaml
crypto-config.yaml
hosts

2 准备在运行ansible的机器使用fabric命令:

注意事项1:

prepare.sh会使用hyperledger fabric的命令,需要把在本地运行的fabric命令放到output/bin目录中。

例如,我是在mac上执行ansible的,下载的是darwin版本的fabric:

mkdir -p output/bin
cd output/bin
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/darwin-amd64-1.1.0/hyperledger-fabric-darwin-amd64-1.1.0.tar.gz
wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/darwin-amd64-1.1.0/hyperledger-fabric-darwin-amd64-1.1.0.tar.gz.md5
tar -xvf hyperledger-fabric-darwin-amd64-1.1.0.tar.gz

3 运行perpare.sh生成证书,以及创世块(可以根据需要修改脚本):

./prepare.sh example

注意事项2:

每个部署环境分别在output和inventories中有一个自己的目录,要增加新部署环境除了在output和inventories中准备目录和文件,您还可能需要根据自己的需要在prepare.sh中添加为新的环境生成证书和其它文件的命令。

部署

0 在本地生成ssh登陆证书

$ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/lijiao/.ssh/id_rsa):

开始下面的操作之前,你需要确认本机已经正确设置了/etc/hosts:

$ cat /etc/hosts
127.0.0.1 localhost

192.168.33.10 orderer0.member1.example.com
192.168.33.10 peer0.member1.example.com
192.168.33.11 peer1.member1.example.com
192.168.33.12 peer0.member2.example.com

另外确认文件inventories/example.com/hosts./inventories/example.com/etc_hosts中的IP也正确设置了。

要确保能够用密码登录,设置登录的证书时候需要用密码登录:

1 初始化目标机器

export ANSIBLE_HOST_KEY_CHECKING=False
ansible-playbook -k -i inventories/example.com/hosts -u root deploy_prepare.yml

2 检测证书设置是否成功

ansible -i inventories/example.com/hosts -u root  all  -m command -a "pwd"

3 如果域名没有绑定IP,修改每台机器的/etc/hosts,(会替换整个文件):

ansible -i inventories/example.com/hosts -u root  all  -m copy -a "src=./inventories/example.com/etc_hosts dest=/etc/hosts"

4 部署节点

ansible-playbook -i inventories/example.com/hosts -u root deploy_nodes.yml

5 部署客户端

ansible-playbook -i inventories/example.com/hosts -u root deploy_cli.yml

Fabric初始化

1 进入member1的管理员目录,对peer0.member1.example.com进行操作:

cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer0.member1.example.com/

//创建channel,channel只需要创建一次
./0_create_channel.sh

//加入channel
./1_join_channel.sh

//设置锚点Peer:
./2_set_anchor_peer.sh

2 进入member1的管理员目录,对peer1.member1.example.com进行操作:

cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer1.member1.example.com
./1_join_channel.sh

3 进入member2的管理员目录,对peer0.member1.example.com进行操作:

cd /opt/app/fabric/cli/user/member2.example.com/Admin-peer0.member2.example.com

//加入channel
./1_join_channel.sh

//设置锚点Peer:
./2_set_anchor_peer.sh

部署合约

1 进入member1的管理员目录,对peer0.member1.example.com进行操作:

cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer0.member1.example.com/

//先获取合约代码,可能会比较慢,拉取代码比较耗时
//注意用浏览器查看合约代码地址是: github.com/introclass/hyperledger-fabric-chaincodes/
go get github.com/introclass/hyperledger-fabric-chaincodes/demo

//安装合约
./3_install_chaincode.sh

//查看已经安装的合约
./peer.sh chaincode list --installed

//合约实例化,只需要实例化一次
./4_instantiate_chaincode.sh

2 在其它Peer上部署合约

//peer1.member1.example.com
//先获取合约代码,可能会比较慢,拉取代码比较耗时
go get github.com/introclass/hyperledger-fabric-chaincodes/demo

cd /opt/app/fabric/cli/user/member1.example.com/Admin-peer1.member1.example.com/
./3_install_chaincode.sh

//peer0.member2.example.com
//先获取合约代码,可能会比较慢,拉取代码比较耗时
go get github.com/introclass/hyperledger-fabric-chaincodes/demo

cd /opt/app/fabric/cli/user/member2.example.com/Admin-peer0.member2.example.com/
./3_install_chaincode.sh

同一个合约,只需要在任意一个Peer上实例化一次。

3 调用合约,写数据

./6_invoke_chaincode.sh

4 调用合约,查数据

./5_query_chaincode.sh

管理操作

1 启动链:

ansible-playbook -i inventories/example.com/hosts -u root playbooks/manage_start.yml

2 停止链:

ansible-playbook -i inventories/example.com/hosts -u root playbooks/manage_stop.yml

3 清空链上所有数据:

ansible-playbook -i inventories/example.com/hosts -u root playbooks/manage_rebuild.yml

4 销毁链:

ansible-playbook -i inventories/example.com/hosts -u root playbooks/manage_destroy.yml

联系

要获得更多的内容,可以关注:

    微信公众号: “我的网课”,(关注后可以获得我微信)
    QQ交流群: 576555864

如果视频中有讲解不到位或需要订正的地方,可以加入:

更多关于超级账本和区块链的文章

参考

  1. 网易云课堂,IT技术快速入门学院
  2. HyperLedger Fabric进阶实战课
  3. 超级账本&区块链实战文档
  4. HyperLedger Fabric原版文档中文批注
  5. hyperledger-fabric-ansible
  6. 更多关于超级账本和区块链的文章

本文原创首发于网站:www.lijiaocn.com

QQ交流群

区块链实践互助QQ群:576555864

Kubernetes实践互助QQ群:947371129

Prometheus实践互助QQ群:952461804

Kong/Envoy实践互助QQ群:952503851

Ansible实践互助QQ群:955105412

Copyright @2011-2019 All rights reserved. 转载请添加原文连接,合作请加微信lijiaocn或者发送邮件: [email protected],备注网站合作 友情链接: lijiaocn github.com