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

2018-06-12 06:06:11


第一章、前言

1.目的

主旨为了指引读者快速在4台服务器上分布式搭建fabric区块链网络,要求小伙伴对fabric有一定程度的了解,本文主要从环境要求、所依赖软件、分布式fabric网络搭建及其维护等方面描述。

 

2.概述

  1. fabric区块链:本文所描述的fabric区块链部署仅适用分布式部署,规划3个zookeeper + 4个kafka + 3个orderer节点 + 4个peer节点,orderer节点采用kafka排序规则,批处理等待时间2秒,最大批处理数1个(避免同时处理一个ID多笔交易问题);
  2. fabric部署文档:以fabric1.0.5源码例子examples中的e2e_cli为基础,并集合了预先编译的configtxgen、configtxlator、cryptogen三个工具,在修改部署命令中依赖于源码目录的部分命令,形成单独完整的部署文档;
  3. docker镜像:使用国内docker镜像加速服务(daocloud)下载fabric的1.0.5版本镜像,自定义命令一键pull所有单机部署需要的镜像;
  4. fabric命令:放弃单机部署命令:network_setup.sh,提供setIPAddress.sh命令配置IP,部署节点命令:install.sh,维护命令:fabric.sh;
  5. 部署文档下载地址: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.客户端

2.1.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)

 

在线咨询
QQ咨询
邮件咨询
微信咨询
扫一扫,微信聊