Hyperledger Fabric 1.0 快速搭建 -------- 多机部署准备篇

前言

在这里我推荐两位大神的博客,可以参考或者直接跟着这两位大神学习,我是阅读这两位大神的博客和《深度探索区块链Hyperledger技术与应用》一书部署的

《深度探索区块链Hyperledger技术与应用》作者:张增骏、董宁、朱轩彤、陈剑雄  著。

深蓝大大:https://www.cnblogs.com/studyzy/category/1024666.html

Aberic大神:https://www.cnblogs.com/aberic/category/1148898.html

在前两篇文章中介绍了如何通过官方示例单机启动Farbic网络,这篇文章开始是以多机部署,做个笔记以防自己忘掉,也可以分享出来请大家帮我看看哪里有不对的地方,如果对你有帮助可以点个赞。

我用的是阿里云的服务器、docker版本:Docker version 18.06.0-ce-rc3, build cbfa3d9、Hyperledger Fabric是1.0.1,(这里用的虽然不是和前两篇的一样,但是影响不大,把对应的配置不要弄错就可以了),如果没有云服务器,也可以在本地建立多个虚拟机。

下一篇:Hyperledger Fabric 1.0 快速搭建 -------- 多机部署 核心共识节点Orderer

准备

区块链系统由3类节点组成,核心共识节点(Orderer、Kafka、zookeeper)、CA节点、Peer节点

名称 个数 备注
共识节点 5 包含Orderer、Kafka、zookeeper
CA节点 2 包含CA、postgres(数据库)
Peer节点 5 包含peer、couchdb(数据库)

 

 

 

 

 

核心共识节点确定以后不要轻易改变,Peer节点的数量可根据自己的需求增加或减少,CA节点的性能和容量的要求不高,所以一般不需要增加节点

阿里云服务器,以下IP地址不是真实IP地址,如果是服务器上的虚拟机,IP则替换成你的外网IP地址

名称 IP 节点Hostname OrdererHostname KafkaHostname ZookeeperHostname
node01 192.168.0.101 peer0.ywhOrg1.example.com orderer0.ywhExample.com kafka1.ywhExample.com zookeeper1.ywhExample.com
node02 192.168.0.102 peer0.ywhOrg2.example.com orderer1.ywhExample.com kafka2.ywhExample.com zookeeper2.ywhExample.com
node03 192.168.0.103 peer0.ywhOrg3.example.com orderer2.ywhExample.com kafka3.ywhExample.com zookeeper3.ywhExample.com
node04 192.168.0.104 peer0.ywhOrg4.example.com orderer3.ywhExample.com kafka4.ywhExample.com zookeeper4.ywhExample.com
node05 192.168.0.105 peer0.ywhOrg5.example.com orderer4.ywhExample.com kafka5.ywhExample.com zookeeper5.ywhExample.com
node06 192.168.0.106        

博主练习时的部署方案如下

     在node01——node05:peer、kafka、zookeeper、orderer、微服务(可通过这个项目调用chaincode)

     在node05——node06:CA1、CA2、tools容器

     在node06:区块浏览器(可查看区块信息)

开放的端口有

     CA:7054、Orderer:7050;Peer:7051-7053;Kafka:9092;Zookeeper:2181、12888、13888;微服务:443;区块浏览器:80;在云服务器上要对这些端口进行开放加入安全组,如果是本地虚拟机的话,把虚拟机的防火墙关掉即可,不关防火墙的话,在防火墙中开启这些端口也可以,网上的资料很多,在这里不做介绍。

开始

1 生成MSP证书

使用cryptogen工具生成证书。MSP证书是超级账本网络实体的身份标识,实体在通信和交易时使用证书进行签名和验证。生成证书需要crypto-config.yaml配置文件。

cryptogen使用一个包含网络拓扑的crypto-config.yaml文件,为文中定义的组织和属于这些组织的实体生成一组证书和密钥。每个组织都配置了唯一的根证书(ca-cert),并包含了特定的实体(peers和orders),这就形成了一种典型的网络结构——每个成员都有所属的CA。Hyperledger Fabric 网络中的交易和通信都要使用实体的私钥签名,使用公钥验证。这个工具在我上一篇文章中提到过,用来生成一些密钥文件的,具体的下载方法在这里不做介绍,因为这篇博文开始用的是Hyperledger Fabric 1.0.1版本的所以这个工具也要下载1.0.1版本的。

1.1 创建配置文件存放目录,并下载相关工具

以下操作在任意peer节点上操作即可,生成文件以后在发送给其他节点相同目录下

//创建此目录并进入此目录下
[root@node1 /]# mkdir -p u01/chainConfig/

[root@node1 /]# cd u01/chainConfig/

[root@node1 chainConfig]# pwd
/u01/chainConfig

//下载cryptogen工具
[root@node1 chainConfig/]# wget https://nexus.hyperledger.org/content/repositories/releases/org/hyperledger/fabric/hyperledger-fabric/linux-amd64-1.0.1/hyperledger-fabric-linux-amd64-1.0.1.tar.gz | tar xz

//下载以后会在当前目录下生成一个bin目录,bin目录下就是我们要用的工具了

1.2 cryptogen命令说明

cryptogen [] [ ...]

(1)超级账本密钥证书生成工具选项

-----help——显示帮助文档;

-----help-long——显示详细的帮助文档

(2)命令

     1)显示帮助文档

     help [ ...]

     2)生成密钥文件

generate []

     --config——指定配置文件,如果不指定,则使用默认配置(即cryptogen showtemplate中的内容)

     --output——生成密钥证书的目录,默认为crypto-config

3)showtemplate——显示版本信息

4)version——显示版本信息

最常用的命令语法是:

     cryptogen generate --config=./crypto-config.yaml(根据crypto-config.yaml文件的配置,生成组织信息及其密钥文件证书等,保存在crypto-config目录下)

1.3 生成证书文件及文件解析

编写crypto-config.yaml文件           chainConfig\crypto-config.yaml

[root@node5 chainConfig/]# vi crypto-config.yaml

#opyright IBM Corp. All Rights Reserved.
#
# SPDX-License-Identifier: Apache-2.0
#
#./cryptogen generate --config=./crypto-config.yaml
# ---------------------------------------------------------------------------
# "OrdererOrgs" - Definition of organizations managing orderer nodes
#                 定义排序服务节点的组织
# ---------------------------------------------------------------------------
OrdererOrgs:
  # ---------------------------------------------------------------------------
  # Orderer  排序服务节点的名称和域名
  # ---------------------------------------------------------------------------
  - Name: Orderer
    Domain: ywhExample.com  //全限定名,我理解的是跟java中的包名类似的性质
    EnableNodeOUs: true    // EnableNodeOUs 允许节点 OUS -> out of service暂停服务
    Template:        //按模板生成 Orderer节点的MSP证书
      Count: 5       //生成五套      orderer0 - orderer4
    Users:
      Count: 1       //每一套证书有一个普通用户 member
    # ---------------------------------------------------------------------------
    # "Specs" - See PeerOrgs below for complete description
    # 手动定义节点名称,命名规范是:{{.Hostname}}.{{.Domain}} 例如orderer.ywhExample.com
    # 如果没有定义CommonName,自动生成的节点名称就是:orderer.ywhExample.com
    # 如果定义了CommonName,就以CommonName为准
    # Hostname可以定义多个
    # ---------------------------------------------------------------------------
    Specs:
      - Hostname: orderer
      #-Hostname:orderer1
      #CommonName: order.example.net
# ---------------------------------------------------------------------------
# "PeerOrgs" - Definition of organizations managing peer nodes 定义peer节点的组织
# ---------------------------------------------------------------------------
PeerOrgs:
  # ---------------------------------------------------------------------------
  # Org1 组织Org1的配置
  # ---------------------------------------------------------------------------
  - Name: ywhOrg1
    Domain: ywhOrg1.example.com
    EnableNodeOUs: true
#------------------------------------------------------------------------------
# Template——按模板生成Peer节点的MSP证书
#         ——默认生成的Peer节点名称:peer{{.Index}}.{{Domain}}
#         ——Index是从Start到Count-1,Start默认是0
#         ——Hostname可以自定义节点名称的规则
#         ——Prefix默认是peer
#  Template 这个就是生成几套证书  是从start到count-1套  这里设置count为2 则生成
#  peer0.ywhOrg1.example.com和peer1.ywhOrg1.example.com两个节点(ywhOrg这个组织中有两个peer)
#  peer0和peer1都是可以部署的,后续我只部署了peer0的。每一个组织下有几个peer我认为是Template控制的,仅代表个人意见
#
#
#------------------------------------------------------------------------------
    Template:
      Count: 2
      #Start:0
      #Hostname:{{.Perfix}}{{.Index}}
#------------------------------------------------------------------------------
# Users——默认生成的用户数:User1@{{.Domain}}
#      ——默认生成一个管理员:Admin@{{.Domain}}
#------------------------------------------------------------------------------
    Users:
      Count: 1
  # ---------------------------------------------------------------------------
  # Org2 组织Org2的配置
  # ---------------------------------------------------------------------------
  - Name: ywhOrg2
    Domain: ywhOrg2.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
  # ---------------------------------------------------------------------------
  # Org3 组织Org3的配置
  # ---------------------------------------------------------------------------

  # ---------------------------------------------------------------------------
  - Name: ywhOrg3
    Domain: ywhOrg3.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
  # ---------------------------------------------------------------------------
  # Org4 组织Org4的配置
  # ---------------------------------------------------------------------------
  - Name: ywhOrg4
    Domain: ywhOrg4.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1
  # ---------------------------------------------------------------------------
  # Org5 组织Org5的配置
  # ---------------------------------------------------------------------------
  - Name: ywhOrg5
    Domain: ywhOrg5.example.com
    EnableNodeOUs: true
    Template:
      Count: 2
    Users:
      Count: 1

编写好以后退出保存,使用命令:./bin/cryptogen generate --config=./crypto-config.yaml 会在当前目录生成crypto-config文件夹,文件夹下有两个生成好的目录,ordererOrganizations和peerOrganizations,它们分别代表排序服务节点和Peer节点的MSP配置信息,里面的文件就不一一详解了,如果有机会后续的博文中我会列出。

2.生成排序服务创世区块

    有一位博主写的已经很详细了,介绍了配置生成工具configtxgen的使用,还有configtx.yaml文件的解析,来源是《深度探索区块链 Hyperledger技术与应用》---附录B

链接地址:http://www.blockchainbrother.com/article/1339   作者:李晓琼

在这里贴上我自己的configtx.yaml文件:

#######################################################################
#
#   可以编写不同的 profile 配置,作为参数给 configtxgen 工具使用
#   指定了Consortium(组合、集团、联盟)profile用来生成orderer的创世区块
#   带有正确联盟成员定义的orderer创世区块,其通道的创建请求必须带有组织成员名和联盟名
#   此配置文件主要分为3部分:profiles organizations 默认部分:此部分是orderer和Application的配置,如BatchTimeout和一般用作继承的基础值
################################################################################
Profiles:

    FiveOrgsOrdererGenesis:
        Orderer:
            <<: *OrdererDefaults
            Organizations:
                - *OrdererOrg
        Consortiums:
            SampleConsortium:
                Organizations:
                    - *Org1
                    - *Org2
                    - *Org3
                    - *Org4
                    - *Org5
    FiveOrgsChannel:
        Consortium: SampleConsortium
        Application:
            <<: *ApplicationDefaults
            Organizations:
                - *Org1
                - *Org2
                - *Org3
                - *Org4
                - *Org5
Organizations:

    - &OrdererOrg
        Name: OrdererOrg
        ID: OrdererMSP
        MSPDir: crypto-config/ordererOrganizations/ywhExample.com/msp //上面生成的msp路径

    - &Org1
        Name: Ywh1OrgMSP
        ID: Ywh1OrgMSP
        MSPDir: crypto-config/peerOrganizations/ywhOrg1.example.com/msp
        AnchorPeers:
            - Host: peer0.ywhOrg1.example.com
              Port: 7051

    - &Org2
        Name: Ywh2OrgMSP
        ID: Ywh2OrgMSP
        MSPDir: crypto-config/peerOrganizations/ywhOrg2.example.com/msp
        AnchorPeers:
            - Host: peer0.ywhOrg2.example.com
              Port: 7051

    - &Org3
        Name: Ywh3OrgMSP
        ID: Ywh3OrgMSP
        MSPDir: crypto-config/peerOrganizations/ywhOrg3.example.com/msp
        AnchorPeers:
            - Host: peer0.ywhOrg3.example.com
              Port: 7051

    - &Org4
        Name: Ywh4OrgMSP
        ID: Ywh4OrgMSP
        MSPDir: crypto-config/peerOrganizations/ywhOrg4.example.com/msp
        AnchorPeers:
            - Host: peer0.ywhOrg4.example.com
              Port: 7051

    - &Org5
        Name: Ywh5OrgMSP
        ID: Ywh5OrgMSP
        MSPDir: crypto-config/peerOrganizations/ywhOrg5.example.com/msp
        AnchorPeers:
            - Host: peer0.ywhOrg5.example.com
              Port: 7051
Orderer: &OrdererDefaults

    OrdererType: kafka  //如果是kafka集群部署,这里要写kafka,单节点是solo

    Addresses:
        - orderer0.ywhExample.com:7050
        - orderer1.ywhExample.com:7050
        - orderer2.ywhExample.com:7050
        - orderer3.ywhExample.com:7050
        - orderer4.ywhExample.com:7050
    #Bath Timeout:创建batch的超时时间
    BatchTimeout: 2s
    #控制batch到块中的消息数
    BatchSize:
        # Max Message Count: batch中允许的最大消息数量
        MaxMessageCount: 100
        #如果OrdererType 是kafka,则要设置Kafka brokers的'message.max.bytes'和'replica.fetch.max.bytes'的值大于该值
        AbsoluteMaxBytes: 99 MB
        #Preferred Max Bytes: batch中允许的首选绝对最大序列化消息字节数
        #如果一个消息大于该值,会导致batch 大于该值
        PreferredMaxBytes: 512 KB
    Kafka:
        Brokers:
            - kafka1.ywhExample.com:9092
            - kafka2.ywhExample.com:9092
            - kafka3.ywhExample.com:9092
            - kafka4.ywhExample.com:9092
            - kafka5.ywhExample.com:9092
    Organizations:

Application: &ApplicationDefaults

    Organizations:

在上述配置文件中,根据需求的配置修改配置文件,例如配置需要5个Org,每个Org中需要注意的配置项有Org的名称,Org的MSPID,MSPdir是一个完整的配置目录。还有就是AnchorPeer的地址和端口。

创建以上配置文件生成的文件的目录以及生成创世区块等文件

[root@node1 ~]# mkdir channel-artifacts

[root@node1 ~]# cd /u01/chainConfig
//配置环境变量   设置FABRIC_CFG_PATH环境变量告诉configtxgen去哪个目录寻找configtx.yaml文件
[root@node1 ~]# export FABRIC_CFG_PATH=$(pwd)
//创建genesis.block  排序服务节点使用的创世区块
[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
//创建onbchannel.tx  通道的名字或者ID  -channelID 这个后面写的全部小写,不要带有特殊字符,要不到后面巨坑
[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputCreateChannelTx ./channel-artifacts/ywhchannel.tx -channelID ywhchannel
//生成组织锚节点  通道中的组织锚节点 咱们有5个  所以要运行五次这个命令,把相应的改掉,这个跟上面的配置文件中配置是相对应的,应该不难看出
[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Ywh1OrgMSPanchors.tx -channelID ywhchannel -asOrg Ywh1OrgMSP

[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Ywh2OrgMSPanchors.tx -channelID ywhchannel -asOrg Ywh2OrgMSP

[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Ywh3OrgMSPanchors.tx -channelID ywhchannel -asOrg Ywh3OrgMSP

[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Ywh4OrgMSPanchors.tx -channelID ywhchannel -asOrg Ywh4OrgMSP

[root@node1 ~]# ./bin/configtxgen -profile FiveOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Ywh5OrgMSPanchors.tx -channelID ywhchannel -asOrg Ywh5OrgMSP
//执行完以上命令以后 在channel-artifacts文件目录
[root@node5 channel-artifacts]# pwd
/u01/chainConfig/channel-artifacts
[root@node5 channel-artifacts]# ll
-rw-r--r-- 1 root root 18290 Sep 10 18:02 genesis.block
-rw-r--r-- 1 root root   296 Sep 10 18:04 Ywh1OrgMSPanchors.tx
-rw-r--r-- 1 root root   296 Sep 10 18:05 Ywh2OrgMSPanchors.tx
-rw-r--r-- 1 root root   296 Sep 10 18:05 Ywh3OrgMSPanchors.tx
-rw-r--r-- 1 root root   296 Sep 10 18:05 Ywh4OrgMSPanchors.tx
-rw-r--r-- 1 root root   296 Sep 10 18:05 Ywh5OrgMSPanchors.tx
-rw-r--r-- 1 root root   505 Sep 10 18:02 ywhchannel.tx

到此多机部署的准备已经完成,把以上生成的文件及目录全部拷贝到每一个服务器上的相同目录下。

总结

1.学会了MSP生成工具cryptogen的使用,Fabric网络中的实体之间交易和通信都是要使用私钥、公钥,根证书可以给其它签发证书,被称为中间证书。根证书是由配置文件中生成的,实现自签名证书。根证书有两种,一种是CA根证书,一种是TLS根证书。

 


 

你可能感兴趣的:(Hyperledger,Fabric)