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节点HostnameOrdererHostnameKafkaHostnameZookeeperHostname
node01192.168.0.101peer0.ywhOrg1.example.comorderer0.ywhExample.comkafka1.ywhExample.comzookeeper1.ywhExample.com
node02192.168.0.102peer0.ywhOrg2.example.comorderer1.ywhExample.comkafka2.ywhExample.comzookeeper2.ywhExample.com
node03192.168.0.103peer0.ywhOrg3.example.comorderer2.ywhExample.comkafka3.ywhExample.comzookeeper3.ywhExample.com
node04192.168.0.104peer0.ywhOrg4.example.comorderer3.ywhExample.comkafka4.ywhExample.comzookeeper4.ywhExample.com
node05192.168.0.105peer0.ywhOrg5.example.comorderer4.ywhExample.comkafka5.ywhExample.comzookeeper5.ywhExample.com
node06192.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 [<flages>] <command> [<args> ...]

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

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

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

(2)命令

     1)显示帮助文档

     help [<command> ...]

     2)生成密钥文件

generate [<flags>]

     --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根证书。

 


 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值