区块链部署之 Fabric1.0.5分布式部署

第一章、前言
1.目的
主旨为了指引读者快速在4台服务器上分布式搭建fabric区块链网络,要求小伙伴对fabric有一定程度的了解,本文主要从环境要求、所依赖软件、分布式fabric网络搭建及其维护等方面描述。
2.概述
- fabric区块链:本文所描述的fabric区块链部署仅适用分布式部署,规划3个zookeeper + 4个kafka + 3个orderer节点 + 4个peer节点,orderer节点采用kafka排序规则,批处理等待时间2秒,最大批处理数1个(避免同时处理一个ID多笔交易问题);
- fabric部署文档:以fabric1.0.5源码例子examples中的e2e_cli为基础,并集合了预先编译的configtxgen、configtxlator、cryptogen三个工具,在修改部署命令中依赖于源码目录的部分命令,形成单独完整的部署文档;
- docker镜像:使用国内docker镜像加速服务(daocloud)下载fabric的1.0.5版本镜像,自定义命令一键pull所有单机部署需要的镜像;
- fabric命令:放弃单机部署命令:network_setup.sh,提供setIPAddress.sh命令配置IP,部署节点命令:install.sh,维护命令:fabric.sh;
- 部署文档下载地址:https://pan.baidu.com/s/1dzF5gTgpMnqbglQIimGN3A 密码: 7tv3
3.部署规划
- 规划两个组织,每个组织两个peer,服务器IP另自配置,本文命令仅支持以下规划:
服务器IP | 192.168.1.71 | 192.168.1.72 | 192.168.1.73 | 192.168.1.74 |
Zookeeper | zookeeper1 | zookeeper2 | zookeeper3 | |
Kafka | kafka0 | kafka1 | kafka2 | kafka3 |
Orderer | orderer0 | orderer1 | orderer2 | |
Peer | peer0.org1 | peer1.org1 | peer0.org2 | peer1.org2 |
Ca | ca_peerOrg1 | ca_peerOrg2 |
第二章、环境准备
1.环境要求
1.1.操作系统
- 内核要求:3.10.0-693.17.1.el7.x86_64及以上
- 查看内核版本uname -r
- 推荐系统:CentOS 7及以上、Ubuntu16.04LTS及以上,本文使用CentOS 7系统
- 查看版本cat /etc/os-release
1.2.软件版本
- docker版本:13.01.0以上;
- 查看版本命令:docker -v
- docker-compose版本:1.8.0以上;
- 查看版本命令:docker-compose -v
- fabric版本:x86_64-1.0.5
- 查看版本命令:docker images | grep x86_64-1.0.5
2.软件安装
2.1.系统安装(4台服务器)
2.1.1.安装CentOS 7
- 服务器安装:https://www.cnblogs.com/Yiutto/p/5958301.html
- 虚拟机安装:https://jingyan.baidu.com/article/3065b3b6a00892becef8a467.html
2.1.2.配置固定IP
- 查看网卡,命令:ip a
- 修改网卡配置,命令:vi /etc/sysconfig/network-scripts/ifcfg-eno16777736 #(此处黄色标识的则是本人虚拟机网卡名称,实际情况按照读者安装系统的网卡名称修改)
改为如下并保存退出:
- 说明:
- IPADDR=192.168.1.71 ## IP地址
- NETMASK=255.255.255.0 ## 子网掩码
- GATEWAY= ## 网关
- DNS1= ## DNS
- 重启网络,命令:/etc/init.d/network restart
- 确认ip地址:ip a | grep 255
注:另外三台服务器同样需要进行固定IP配置,不在此逐一演示。
2.1.3.ssh远程服务
- 确认ssh服务:netstat -plnt | grep sshd
- CentOS7一般自带ssh服务,如果没有安装,可参考:
- https://blog.csdn.net/mengyoufengyu/article/details/72855524
- Ubuntu安装sshd服务,可参考:
- https://blog.csdn.net/cs_mary/article/details/54728906
2.1.4.客户端
- 推荐SecureCRT远程工具,其他工具亦可;
- 过程不在此赘述,如有不明请看八斗金链区块链部署之0.5单机部署。
2.1.5.上传下载
- 过程不在此赘述,如有不明请看八斗金链区块链部署之0.5单机部署。
2.2.docker安装
2.2.1.快速安装
- 命令:curl -sSL https://get.daocloud.io/docker | sh
- 过程:更新镜像源
- 建立元数据缓存
- 安装docker-ce:
- 查看安装版本:docker -v
2.2.2.添加镜像加速器
- 命令:
curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://860eaa91.m.daocloud.io
2.2.3.启动docker服务
- 命令:service docker start
- 查看docker状态:docker info
2.2.4.开机自启动
- 命令:systemctl enable docker
- 确认是否生效:systemctl is-enabled docker
2.3.docker-compose安装
2.3.1.安装依赖
- 命令:yum -y install epel-release python2-pip
- 完成
2.3.2.下载安装
- 命令:
curl -L https://github.com/docker/compose/releases/download/1.17.0/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
- 下载:
- 完成安装:
- 赋予权限命令:chmod +x /usr/local/bin/docker-compose
2.3.3.查看版本
- 命令:docker-compose -v
第三章、Fabric部署
注:因为分布式部署需要相同的证书和区块、通道文件,因此在一台机器上,生产证书、区块、通道文件,再打包拷到其他服务器。
1.下载部署文档
1.1.网盘
- 浏览器直接访问下载:
https://pan.baidu.com/s/1dzF5gTgpMnqbglQIimGN3A 密码: 7tv3
1.2.上传
- 创建目录,命令:mkdir -p /home/blockchain
- 进入目录:cd /home/blockchain
- 上传:rz回车,选择文件点击OK:
- 完成上传
- 查看
1.3.解压
- 安装命令:yum install zip unzip -y
- 完成
- 解压:unzip fabric_1.0.5_kafka.zip
- 查看:ls -l
- 删除zip包,命令:rm -rf fabric_1.0.5_kafka.zip
- 进入部署目录:cd fabric_1.0.5_kafka
- 查看部署文件:
- 赋予权限:chmod +x bin/* scripts/*
2.生成证书
2.1.生成证书
- 命令:./bin/generateCerts.sh
2.2.查看证书
- 命令:ll crypto-config
3.创世区块
3.1.清空目录
- 命令:rm -rf channel-artifacts/*
- 查看:ll channel-artifacts/
3.2.生成区块文件
- 命令:./bin/generateArtifacts.sh mychannel
3.3.查看文件
- 命令:ll channel-artifacts
4.拷到其他服务器
4.1.压缩部署文件
- 返回上级目录:cd ..
- 压缩命令:zip -qr fabric_1.0.5_kafka.zip fabric_1.0.5_kafka/
- 查看:
4.2.远程拷贝
- 分别在三台服务器创建目录:mkdir -p /home/blockchain
- 远程拷贝命令:scp fabric_1.0.5_kafka.zip root@192.168.1.72:/home/blockchain/
- 第一次拷贝需要输入:yes
- 然后输入密码(密码不显式展示出来的):
- 拷到另外两台服务器:
4.3.解压
- 在其中一台服务器查看:
- 拷贝后,在三台服务器上,分别解压部署包:unzip fabric_1.0.5_kafka.zip
- 查看目录:
5.下载镜像
5.1.下载
- 分别在四台服务器上,进入目录:cd fabric_1.0.5_kafka
- 分别四台服务器执行命令:./bin/download-dockerimages.sh 1.0.5
- 完成镜像pull
5.2.查看镜像
- 命令:docker images
6.部署fabric
6.1.配置节点的IP
注:四台服务器都需要执行命令,配置IP生成YAML文件;
- 修改IP列表,命令:vi yaml/peer-ip-list
- 此文件固定格式,仅可修改IP,其他不可修改,说明:
- 第一列为判断名称:peer0、peer1、peer2、peer3,用于获取IP及赋值标识;
- 第二列为IP,对应本文的部署规划,每台服务器IP部署对应的节点、服务。
- 执行yaml文件赋值,命令:./bin/setIPAddress.sh
6.2.分布式部署节点
注:在四台服务器,执行install.sh命令,分别将node1、node2、node3、node4部署到四台服务器中;
- 安装节点:
- 192.168.1.71服务器执行命令:./bin/install.sh node1
- 192.168.1.72服务器执行命令:./bin/install.sh node2
- 192.168.1.73服务器执行命令:./bin/install.sh node3
- 192.168.1.74服务器执行命令:./bin/install.sh node4
等待三台服务器的zookeeper安装完成,部署停留在“Enter to continue!”,如上图;
- 192.168.1.71按回车继续安装kafka:
- 192.168.1.72按回车继续安装kafka:
- 192.168.1.73按回车继续安装kafka:
- 192.168.1.74按回车继续安装kafka:
等待四台服务器的kafka安装完成后,部署停留在第二个“Enter to continue!”,如上图;
- 192.168.1.71按回车继续安装orderer节点:
- 192.168.1.72按回车继续安装orderer节点:
- 192.168.1.73按回车继续安装orderer节点:
注:192.168.1.74没有orderer节点,暂时不按回车继续;
等待三台服务器的orderer安装完成后,部署停留在第三个“Enter to continue!”,如上图;
- 192.168.1.71按回车继续安装peer节点:
- 192.168.1.72按回车继续安装peer节点:
- 192.168.1.73按回车继续安装peer节点:
- 192.168.1.74按回车继续安装peer节点:
6.3.查看各个节点
- 192.168.1.71服务器,命令:docker ps -a
- 192.168.1.72服务器,命令:docker ps -a
- 192.168.1.73服务器,命令:docker ps -a
- 192.168.1.74服务器,命令:docker ps -a
6.4.部署区块链网络
注:在其中一台服务器执行部署命令,如192.168.1.71服务器:
- 命令:docker exec cli bash -c ‘./scripts/script.sh mychannel’ && docker logs -f cli
- 网络部署成功:
6.5.查看部署情况
- 192.168.1.71服务器,命令:docker ps -a
- 192.168.1.72服务器,命令:docker ps -a
- 192.168.1.73服务器,命令:docker ps -a
- 192.168.1.74服务器,命令:docker ps -a
7.分布式fabric维护
7.1.停止全部节点
- 192.168.1.71服务器上执行命令:./scripts/fabric.sh stop
- 192.168.1.72服务器上执行命令:./scripts/fabric.sh stop
- 168.1.73服务器上执行命令:./scripts/fabric.sh stop
- 192.168.1.74服务器上执行命令:./scripts/fabric.sh stop
- 查看所有服务器:docker ps -a
7.2.启动fabric节点
- 192.168.1.71服务器上执行命令:./scripts/fabric.sh start
- 192.168.1.72服务器上执行命令:./scripts/fabric.sh start
- 192.168.1.73服务器上执行命令:./scripts/fabric.sh start
- 192.168.1.74服务器上执行命令:./scripts/fabric.sh start
7.3.启动Chaincodes
- 在其中一台服务器执行命令,如192.168.1.71执行:./scripts/fabric.sh chaincode
- 查看192.168.1.72服务器,命令:docker ps -a
- 查看192.168.1.73服务器,命令:docker ps -a
- 查看192.168.1.74服务器,命令:docker ps -a
8.交易及查询
8.1.确认账户资产
8.1.1.进入cli
- 在其中一台服务器,如192.168.1.71执行命令:docker exec -it cli bash
8.1.2.查询A账户
- 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”a”]}’
结果A账户资产为90
8.1.3.查询B账户
- 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”b”]}’
结果B账户资产为210
8.2.从A交易10给B
8.2.1.执行交易
- 命令:peer chaincode invoke -o orderer0.example.com:7050 –tls $CORE_PEER_TLS_ENABLED –cafile $ORDERER_CA -C mychannel -n mycc -c ‘{“Args”:[“invoke”,”a”,”b”,”10″]}’
8.2.2.查询A账户
- 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”a”]}’
结果A账户资产为80(90-10=80)
8.3.从B交易100给A
8.3.1.执行交易
- 命令:peer chaincode invoke -o orderer0.example.com:7050 –tls $CORE_PEER_TLS_ENABLED –cafile $ORDERER_CA -C mychannel -n mycc -c ‘{“Args”:[“invoke”,”b”,”a”,”100″]}’
8.3.2.查询B账户
- 命令:peer chaincode query -C mychannel -n mycc -c ‘{“Args”:[“query”,”b”]}’
结果B账户资产为120(210+10-100=120)