Skip to content
Go back

Fabric 网络启动(本地方式)

Edit page

Fabric 网络启动(本地方式)

启动一个 Fabric 网络主要包括以下步骤:

  1. 规划初始网络拓扑
  2. 准备启动配置文件
  3. 启动 Peer 节点
  4. 创建通道
  5. 加入通道

规划初始网络拓扑

示例网络拓扑结构如图:

picture 1

构成要素:

排序服务使用 Raft 模式,所有节点都加入 businesschannel 中。

准备启动配置文件

Fabric 网络启动之前需要准备一些相关的配置文件,主要包括:

picture 7

下面开始生成上述五类配置文件。

生成组织关系和身份证书

联盟链的成员之间通过身份进行识别,网络通过身份来限制资源的访问,所以所有的成员需要事先准备对应的身份文件,并部署到其所拥有的节点和客户端上。

用户可通过标准的 PKI 服务或 OpenSSL 工具,手动生成各个实体的证书和私钥,另外 Fabric 还提供了 cryptogen 工具(基于 Go 语言的 crypto 标准库)在本地生成,需要提前准备 crypto-config.yaml 配置文件。

crypto-config.yaml 支持定义两种类型的若干个组织( OrdererOrgsPeerOrgs )。每个组织还可以定义多个节点( Spec )和用户( User )。

本次案例中, crypto-config.yaml 文件定义了一个 OrdererOrgs 类型的组织 example.com 包括 3 个节点;两个 PeerOrgs 类型的组织 org1.example.comorg2.example.com ,分别包括 2 个节点和 1 个普通用户身份,文件内容如下:

OrdererOrgs:
    - Name: Orderer
        Domain: example.com
        CA:
            Country: US
            Province: California
            Locality: San Francisco
        Specs:
            - Hostname: orderer0
            - Hostname: orderer1
            - Hostname: orderer2
PeerOrgs:
    - Name: Org1
      Domain: org1.example.com
      EnableNodeOUs: true
      CA:
        Country: US
        Province: California
        Locality: San Francisco
      Template:
        Count: 2
      Users:
        Count: 1
    - Name: Org2
      Domain: org2.example.com
      EnableNodeOUs: true
      CA:
        Country: US
        Province: California
        Locality: San Francisco
      Template:
        Count: 2
      Users:
        Count: 1

生成身份文件:

cryptogen generate \
    --config=./crypto-config.yaml \
    --output ./crypto-config \
    && tree -L 4 crypto-config

可以看到目录结构如下:

/crypto-config
├── ordererOrganizations
│   └── example.com
│       ├── ca
│       │   ├── ca.example.com-cert.pem
│       │   └── priv_sk
│       ├── msp
│       │   ├── admincerts
│       │   ├── cacerts
│       │   └── tlscacerts
│       ├── orderers
│       │   ├── orderer0.example.com
│       │   ├── orderer1.example.com
│       │   └── orderer2.example.com
│       ├── tlsca
│       │   ├── priv_sk
│       │   └── tlsca.example.com-cert.pem
│       └── users
│           └── Admin@example.com
└── peerOrganizations
    ├── org1.example.com
    │   ├── ca
    │   │   ├── ca.org1.example.com-cert.pem
    │   │   └── priv_sk
    │   ├── msp
    │   │   ├── admincerts
    │   │   ├── cacerts
    │   │   ├── config.yaml
    │   │   └── tlscacerts
    │   ├── peers
    │   │   ├── peer0.org1.example.com
    │   │   └── peer1.org1.example.com
    │   ├── tlsca
    │   │   ├── priv_sk
    │   │   └── tlsca.org1.example.com-cert.pem
    │   └── users
    │       ├── Admin@org1.example.com
    │       └── User1@org1.example.com
    └── org2.example.com
        ├── ca
        │   ├── ca.org2.example.com-cert.pem
        │   └── priv_sk
        ├── msp
        │   ├── admincerts
        │   ├── cacerts
        │   ├── config.yaml
        │   └── tlscacerts
        ├── peers
        │   ├── peer0.org2.example.com
        │   └── peer1.org2.example.com
        ├── tlsca
        │   ├── priv_sk
        │   └── tlsca.org2.example.com-cert.pem
        └── users
            ├── Admin@org2.example.com
            └── User1@org2.example.com

我们看到 ordererOrganizations 目录下包括了如下三个排序节点的身份信息:

/crypto-config/ordererOrganizations/example.com/orderers
   ├── orderer0.example.com
   ├── orderer1.example.com
   └── orderer2.example.com

peerOrganizations 目录下包括了所有的 Peer 节点组织及其节点的身份信息:

/crypto-config/peerOrganizations
├── org1.example.com
   └── peers
       ├── peer0.org1.example.com
       └── peer1.org1.example.com
└── org2.example.com
    └── peers
        ├── peer0.org2.example.com
        └── peer1.org2.example.com

每个实体都有 msptls 目录,其中包括了对应的认证身份文件和 TLS 身份文件(公钥证书、私钥等)。

接下来需要把节点对应的身份文件移动到 /etc/hyperledger/fabric/ 目录下:

sudo cp -r \
crypto-config/ordererOrganizations/example.com/orderers/* \
 crypto-config/peerOrganizations/org1.example.com/peers/* \
 crypto-config/peerOrganizations/org2.example.com/peers/* \
 crypto-config/ordererOrganizations/example.com/users/* \
 crypto-config/peerOrganizations/org1.example.com/users/* \
 crypto-config/peerOrganizations/org2.example.com/users/* \
 /etc/hyperledger/fabric/ && \
 tree -L 2 /etc/hyperledger/fabric/

结果如下:

/etc/hyperledger/fabric/
├── Admin@example.com
│   ├── msp
│   └── tls
├── Admin@org1.example.com
│   ├── msp
│   └── tls
├── Admin@org2.example.com
│   ├── msp
│   └── tls
├── orderer0.example.com
│   ├── msp
│   └── tls
├── orderer1.example.com
│   ├── msp
│   └── tls
├── orderer2.example.com
│   ├── msp
│   └── tls
├── peer0.org1.example.com
│   ├── msp
│   └── tls
├── peer0.org2.example.com
│   ├── msp
│   └── tls
├── peer1.org1.example.com
│   ├── msp
│   └── tls
├── peer1.org2.example.com
│   ├── msp
│   └── tls
├── User1@org1.example.com
│   ├── msp
│   └── tls
└── User1@org2.example.com
    ├── msp
    └── tls

生成系统通道初始区块

系统通道是网络启动后的第一个通道,负责管理网络整体的配置。排序节点启动后,可以使用初始区块来创建一个新的网络。

初始区块包括了排序服务的相关配置信息(包括排序节点信息、块大小、最大通道数、默认策略等等)和示例联盟配置。可以使用 configtxgen 工具通过配置文件 configtx.yaml 生成。

configtx.yaml 配置文件

使用 configtxgen 工具生成初始区块文件:

export SYS_CHANNEL=testchainid
export ORDERER_GENESIS_PROFILE=TwoOrgsOrdererGenesis
export ORDERER_GENESIS=orderer.genesis.block
configtxgen \
-configPath ./ \
-channelID ${SYS_CHANNEL} \
-profile ${ORDERER_GENESIS_PROFILE} \
-outputBlock ${ORDERER_GENESIS}

Edit page
Share this post on:

Previous Post
git 简介
Next Post
nodejs、nvm、npm 的关系