项目结构说明
下载hyperledger-fabric-linux-amd64-1.4.3.tar.gz
得到以下文件.
bin/
├── configtxgen // 读取config/configtx.yaml文件生成创世区块
├── configtxlator // configtxlator模块可以把区块链的二进制文件转换成JSON格式文件,便于阅读。
├── cryptogen // 生成节点间的信任证书(一种用cryptogen生成,一种是通过fabric-ca服务生成)
├── discover // 用于发现fabirc服务
├── fabric-ca-client
├── idemixgen
├── orderer
└── peer
config/
├── configtx.yaml
├── core.yaml
└── orderer.yaml
一、生成证书
我们使用cryptogen
来生成各节点通信的信任证书。
简单的说,cryptogen是用来生产fabric需要的证书的;这个生产过程是静态的。
和cryptogen工具对等的是CA服务,是一种动态的证书生产环境;在开发和测试阶段,在环境中不需要部署CA,因此可以简单的使用cryptogen工具,当然在运行环境中也可以不使用CA服务器,而继续使用cryptogen。
如果需要了解Fabric CA证书部署,请移步Fabric CA服务搭建
配置文件 cryptogen使用一个YAML格式的配置文件crypto-config.yaml
OrdererOrgs: - Name: Orderer Domain: example.com Specs: - Hostname: orderer PeerOrgs: - Name: Org1 Domain: org1.example.com Template: Count: 2 Users: Count: 1 - Name: Org2 Domain: org2.example.com Template: Count: 2 Users: Count: 2
以上配置文件,我们将为三个节点生成证书,分别为一个order节点,两个peer节点。
生成证书 有了配置文件,就可以通过命令生成证书文件
cryptogen generate --config=./crypto-config.yaml
文件结构 生成的证书文件,目录结构如下:
$ tree -L 2 certs certs ├── ordererOrganizations │ └── example.com └── peerOrganizations ├── org1.example.com └── org2.example.com
启动
- 启动orderer节点。
Solo模式调用过程说明: 1. 节点(Peer)通过GPRC连接排序(Orderer solo)服务,连接成功后,发送交易信息; 2. 排序(Orderer solo)服务通过Recv接口,监听节点(Peer)发送过来的信息,收到信息后进行数据区块处理; 3. 排序(Orderer solo)服务根据收到的消息生成数据区块,并将数据区块写入账本(Ledger)中,返回处理信息; 4. 节点(Peer)通过deliver接口,获取排序(Orderer solo)服务生成的区块数据;
启动orderer节点需要配置环境变量# 日志级别 export set ORDERER_GENERAL_LOGLEVEL=debug # 监听地址 export set ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # 创世块方式 export set ORDERER_GENERAL_GENESISMETHOD=file export set ORDERER_GENERAL_GENESISFILE=/data/fabric/order/orderer.genesis.block export set ORDERER_GENERAL_LOCALMSPID=OrdererMSP export set ORDERER_GENERAL_LOCALMSPDIR=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/msp export set ORDERER_GENERAL_TLS_ENABLED=false export set ORDERER_GENERAL_TLS_PRIVATEKEY=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.key export set ORDERER_GENERAL_TLS_CERTIFICATE=/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.crt export set ORDERER_GENERAL_TLS_ROOTCAS=[/data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/ca.crt]
rderer模块的配置文件一共有4部分组成,分别是: General、FileLedger、RAMLedger、Kafka
General:
LedgerType: file #账本类型,支持ram、json、file。ram表示账本的数据存储在内存中,一般用于测试环境。json和file表示账本数据保存在文件中,在实际生产环境一般是使用file
ListenAddress: 0.0.0.0 #orderer服务监听的地址
ListenPort: 7050 #orderer服务监听的端口号
TLS:
Enabled: false #是否使能TLS通信
#TLS私钥文件
PrivateKey: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.key
#TLS公钥文件
Certificate: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/server.crt
#TLS根证书文件
RootCAs:
- /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/tls/ca.crt
ClientAuthEnabled: false #是否启用客户端验证
ClientRootCAs: #客户端根证书
LogLevel: debug #日志级别
GenesisMethod: file #创世块来源方式,支持provisional或者file,provisional表示GenesisProfile指定的内容在默认的配置文件中配置自动生成的,file表示使用GenesisFile指定的现成创世区块
GenesisProfile: TestOrgsOrdererGenesis
GenesisFile: /data/fabric/order/orderer.genesis.block
#orderer的msp路径
LocalMSPDir: /data/fabric/crypto-config/ordererOrganizations/simple.com/orderers/orderer.simple.com/msp
LocalMSPID: OrdererMSP #orderer的名称,在configtxgen模块的配置文件中指定。
Profile:
Enabled: false #是否启动go Profile
Address: 0.0.0.0:6060 #go profile信息访问地址
BCCSP:
Default: SW #采用的加密机制,SW为软件实现,PKCS11表示采用硬件实现
SW:
Hash: SHA2 #hash算法类型
Security: 256 #hash长度
FileKeyStore:
KeyStore:
FileLedger:
#账本文件的存储路径
Location: /data/fabric/order/production/orderer
#账本文件存放在临时目录时候的目录名,如果已经指定了Location,则该选项无效
Prefix: hyperledger-fabric-ordererledger
RAMLedger:
#内存中保存的区块的数量,超过这个数目的区块将被放弃。
HistorySize: 1000
Kafka:
Retry:
#操作失败端重试状态下重试的时间间隔
ShortInterval: 5s
#短重试状态下重试的时间
ShortTotal: 10m
#长重试状态下重试的时间间隔
LongInterval: 5m
#长重试状态下重试的时间
LongTotal: 12h
NetworkTimeouts:
#等待超时时间
DialTimeout: 10s
#读超时时间
ReadTimeout: 10s
#写超时时间
WriteTimeout: 10s
Metadata:
RetryBackoff: 250ms
RetryMax: 3
Producer:
RetryBackoff: 100ms
RetryMax: 3
Consumer:
RetryBackoff: 2s
#Kafka客户端日志级别,在orderer的运行日志中显示kafka日志
Verbose: false
TLS:
#Kafka是否启动TLS
Enabled: false
#TLS私钥
PrivateKey:
#TLS证书
Certificate:
#File: path/to/Certificate
#TLS根证书
RootCAs:
#File: path/to/RootCAs
#Kafa版本
Version: