《Hyperledger Fabric菜鸟进阶攻略》 —2.3 Hyperledger Fabric核心配置文件详解
2.3 Hyperledger Fabric核心配置文件详解
目标
1.了解Hyperledger Fabric对Peer节点的核心配置信息。
2.了解Hyperledger Fabric对Orderer节点的核心配置信息。
Hyperledger Fabric中有两个示例配置文件,一个为Peer节点的示例配置文件,另一个为Orderer节点的示例配置文件,理解这两个配置文件的内容有助于更进一步地理解Hyperledger Fabric运行状况。
2.3.1 core.yaml详解
core.yaml配置文件是Peer节点的示例配置文件,具体路径在fabric-samples/config目录下。该core.yaml示例配置文件共指定了如下六大部分内容。
1.日志部分
日志记录级别有6种:CRITICAL、ERROR、WARNING、NOTICE、INFO、DEBUG。
在配置文件中,使用level属性指定全局的日志记录级别;然后单独指定cauthdsl、gossip、grpc、ledger、msp、policies、peer的gossip模块的日志级别,用来覆盖默认的全局日志级别。
format属性指定了日志的输出格式。详细配置信息参考如下:
logging:
level: info # 全局的日志级别
# 单独模块的日志级别,覆盖全局日志级别
cauthdsl: warning
gossip: warning
grpc: error
ledger: info
msp: warning
policies: warning
peer:
gossip: warning
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}]
%{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
2.peer部分
peer部分是Peer服务的核心配置内容,包括peer基础服务部分、gossip部分、events、tls部分、BCCSP部分等相关配置信息。
peer基础服务部分主要指定Peer节点的监听地址、端口号信息,以及客户端与Peer节点的连接信息等。
gossip部分主要指定节点角色(Leader节点)的方式、区块/消息的大小及间隔时间等信息。
events部分主要指定事件监听地址、端口号、缓冲数、超时等信息。
tls部分主要指定证书及密钥的相关信息。
BCCSP部分主要指定区块链的加密实现方式,默认为SW(SoftWare),即软件基础的加密方式。
详细配置信息可参考如下:
peer:
id: jdoe # 指定节点ID
networkId: dev # 指定网络ID
listenAddress: 0.0.0.0:7051 # 侦听本地网络接口上的地址。默认监听所有网络接口
# 侦听入站链码连接的端点。如果被注释,则选择侦听地址端口7052的对等点地址
# chaincodeListenAddress: 0.0.0.0:7052
# 此Peer的链码端点用于连接到Peer。如果没有指定,则选择chaincodeListenAddress地址
# 如果没有指定chaincodeListenAddress,则从其中选择address
# chaincodeAddress: 0.0.0.0:705
address: 0.0.0.0:7051 # 节点对外的服务地址
addressAutoDetect: false # 是否自动探测对外服务地址
gomaxprocs: -1 # 进程数限制,-1代表无限制
keepalive: # Peer服务与Client的设置
# 指定客户机ping的最小间隔,如果客户端频繁发送ping,Peer服务器会自动断开
minInterval: 60s
client: # 客户端与Peer的通信设置
# 指定ping Peer节点的间隔时间,必须大于或等于 minInterval 的值
interval: 60s
timeout: 20s # 在断开Peer节点连接之前等待的响应时间
deliveryClient: # 客户端与Orderer节点的通信设置
# 指定ping Orderer节点的间隔时间,必须大于或等于 minInterval 的值
interval: 60s
timeout: 20s # 在断开Orderer节点连接之前等待的响应时间
gossip: # gossip相关配置
bootstrap: 127.0.0.1:7051 # 启动后的初始节点
useLeaderElection: true # 是否指定使用选举方式产式Leader
orgLeader: false # 是否指定当前节点为Leader
endpoint:
maxBlockCountToStore: 100 # 保存在内存中的最大区块
maxPropagationBurstLatency: 10ms
# 消息连续推送之间的最大时间(超过则触发,转发给其他节点)
maxPropagationBurstSize: 10 # 消息的最大存储数量,直到推送被触发
propagateIterations: 1 # 将消息推送到远程Peer节点的次数
propagatePeerNum: 3 # 选择推送消息到Peer节点的数量
pullInterval: 4s # 拉取消息的时间间隔
pullPeerNum: 3 # 从指定数量的Peer节点拉取
requestStateInfoInterval: 4s # 确定从Peer节点提取状态信息消息的频率(单位秒)
publishStateInfoInterval: 4s # 确定将状态信息消息推送到Peer节点的频率
stateInfoRetentionInterval: # 状态信息的最长保存时间
publishCertPeriod: 10s # 启动后包括证书的等待时间
skipBlockVerification: false # 是否应该跳过区块消息的验证
dialTimeout: 3s # 拨号的超时时间
connTimeout: 2s # 连接超时时间
recvBuffSize: 20 # 接收到消息的缓存区大小
sendBuffSize: 200 # 发送消息的缓冲区大小
digestWaitTime: 1s # 处理摘要数据的等待时间
requestWaitTime: 1500ms # 处理nonce之前等待的时间
responseWaitTime: 2s # 终止拉取数据处理的等待时间
aliveTimeInterval: 5s # 心跳检查间隔时间
aliveExpirationTimeout: 25s # 心跳消息的超时时间
reconnectInterval: 25s # 重新连接的间隔时间
externalEndpoint: # 组织外的端点
election: # 选举Leader配置
startupGracePeriod: 15s # 最长等待时间
membershipSampleInterval: 1s # 检查稳定性的间隔时间
leaderAliveThreshold: 10s # 进行选举的间隔时间
leaderElectionDuration: 5s # 声明自己为Leader的等待时间
pvtData: # 私有数据配置
# 尝试从Peer节点中提取给定块对应的私有数据的最大持续时间
pullRetryThreshold: 60s
# 当前分类账本在提交时的高度之间的最大差异
transientstoreMaxBlockRetention: 1000
pushAckTimeout: 3s # 等待每个对等方确认的最大时间
# 用作缓冲器;防止Peer试图从即将被消除的对等端提取私有数据
btlPullMargin: 10
events:
address: 0.0.0.0:7053 # 指定事件服务的地址
buffersize: 100 # 可以在不阻塞发送的情况下缓冲的事件总数
# 将事件添加到一个完整的缓冲区时要阻塞多长时间
# 如果小于0,则直接丢弃
# 如果等于0,则事件被添加至缓冲区并发出
# 如果大于0,超时还未发出则丢弃
timeout: 10ms
# 在注册事件中指定的时间和客户端时间之间的差异
timewindow: 15m
keepalive: # Peer服务器与客户端的实时设置
minInterval: 60s # 允许客户端向Peer服务器发送ping的最小间隔时间
sendTimeout: 60s # GRPC向客户端发送事件的超时时间
tls: # TLS设置
enabled: false # 是否开启服务器端TLS
# 是否需要客户端证书(没有配置使用证书的客户端不能连接到对等点)
clientAuthRequired: false
cert: # TLS服务器的X.509证书
file: tls/server.crt
key: # TLS服务器(需启用clientAuthEnabled的客户端)的签名私钥
file: tls/server.key
rootcert: # 可信任的根CA证书
file: tls/ca.crt
clientRootCAs: # 用于验证客户端证书的根证书
files:
- tls/ca.crt
clientKey: # 建立客户端连接时用于TLS的私钥。如果没有设置将使用peer.tls.key
file:
clientCert: # 建立客户端连接时用于TLS的证书。如果没有设置将使用peer.tls.cert
file:
authentication: # 与身份验证相关的配置
timewindow: 15m # 当前服务器时间与客户端请求消息中指定的客户端时间差异
fileSystemPath: /var/hyperledger/production # 文件存储路径
BCCSP: # 区块链加密实现
Default: SW # 设置SW为默认加密程序
SW: # SW加密配置(如果默认为SW)
Hash: SHA2 # 默认的哈希算法和安全级别
Security: 256 #
FileKeyStore: # 密钥存储位置
# 如果为空,默认为'mspConfigPath/keystore'
KeyStore:
PKCS11: # PKCS11加密配置(如果默认为PKCS11)
Library: # PKCS11模块库位置
Label: # 令牌Label
Pin:
Hash:
Security:
FileKeyStore:
KeyStore:
# MSP配置路径,Peer根据此路径找到MSP本地配置
mspConfigPath: msp
localMspId: SampleOrg # 本地MSP的标识符
client: # CLI客户端配置选项
connTimeout: 3s # 连接超时
deliveryclient: # 订购服务相关的配置
reconnectTotalTimeThreshold: 3600s # 尝试重新连接的总时间
connTimeout: 3s # 订购服务节点连接超时
reConnectBackoffThreshold: 3600s # 最大延迟时间
localMspType: bccsp # 本地MSP类型(默认情况下是bccsp类型)
profile: # 仅在非生产环境中与Golang分析工具一起使用。在生产中,它应该被禁用
enabled: false
listenAddress: 0.0.0.0:6060
# 用于管理操作,如控制日志模块的严重程度等。只有对等管理员才能使用该服务
adminService:
# 定义处理程序可以过滤和自定义处理程序在对等点内传递的对象
handlers:
authFilters:
-
name: DefaultAuth
-
name: ExpirationCheck
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# 并行执行事务验证的goroutines的数量(注意重写此值可能会对性能产生负面影响)
validatorPoolSize:
# 客户端使用发现服务查询关于对等点的信息
# 例如,哪些同行加入了某个频道,最新消息是什么通道配置
# 最重要的是,给定一个链码和通道,哪些对等点集满足背书政策
discovery:
enabled: true
authCacheEnabled: true
authCacheMaxSize: 1000
authCachePurgeRetentionRatio: 0.75
orgMembersAllowedAccess: false
3.vm部分
vm部分主要配置链码运行的环境,目前主要支持Docker容器,详细配置信息可参考如下:
vm:
endpoint: unix:// /var/run/docker.sock # vm管理系统的端点
docker: # 设置Docker
tls:
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
attachStdout: false # 启用/禁用链码容器中的标准out/err
# 创建Docker容器的参数
# 使用用于集群的ipam和dns-server可以有效地创建容器设置容器的网络模式
# 支持标准值是:"host"(默认)、"bridge"、"ipvlan"、"none"
# Dns -供容器使用的DNS服务器列表
# 注:'Privileged'、'Binds'、'Links'和'PortBindings'属性不支持Docker主机配置,
# 设置后将不使用
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
4.链码部分
链码部分是与链码相关的配置,主要指定了链码的路径、链码的名称、构建环境、链码容器启动超时、系统链码启用信息、链码容器的日志设置信息等,详细配置信息参考如下:
chaincode:
id:
path:
name:
# 通用构建器环境,适用于大多数链代码类型
builder: $(DOCKER_NS)/fabric-ccenv:latest
# 在用户链码实例化过程中启用/禁用基本Docker镜像的拉取
pull: false
golang: # golang的baseos(基础镜像)
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
dynamicLink: false # 是否动态链接golang链码
car:
# 平台可能需要更多的扩展工具(JVM等)。目前只能使用baseos
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
java:
# 用于Java链代码运行时,基于java:openjdk-8和加法编译器的镜像
Dockerfile: |
from $(DOCKER_NS)/fabric-javaenv:$(ARCH)-1.1.0
node:
# JS引擎在运行时,指定的baseimage(不是baseos)
runtime: $(BASE_DOCKER_NS)/fabric-baseimage:$(ARCH)-$(BASE_VERSION)
startuptimeout: 300s # 启动超时时间
executetimeout: 30s # 调用和Init调用的超时持续时间
mode: net # 指定模式(dev、net两种)
keepalive: 0 # Peer和链码之间的心跳超时,值小于或等于0会关闭
system: # 系统链码白名单
cscc: enable
lscc: enable
escc: enable
vscc: enable
qscc: enable
systemPlugins: # 系统链码插件
logging: # 链码容器的日志部分
level: info
shim: warning
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}]
%{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
5.ledger部分
ledger部分是分类账本的配置信息,主要指定如下内容。
blockchain:区块链配置信息,默认无指定。
state:指定状态数据库,默认使用goleveldb作为状态记录数据库,如果不使用goleveldb,则可以配置CouchDB数据库的相关信息。
history:是否开启历史记录功能。
详细配置信息参考如下:
ledger:
blockchain:
state:
stateDatabase: goleveldb # 指定默认的状态数据库
couchDBConfig: # 配置couchDB信息
couchDBAddress: 127.0.0.1:5984 # 监听地址
username:
password:
maxRetries: 3 # 重新尝试CouchDB错误的次数
maxRetriesOnStartup: 10 # 对等启动期间对CouchDB错误的重试次数
requestTimeout: 35s # 对等启动期间对CouchDB错误的重试次数
queryLimit: 10000 # 限制每个查询返回的记录数量
maxBatchUpdateSize: 1000 # 限制每个CouchDB批量更新的记录数量
# 值为1时将在每次提交块后进行索引;增加值可以提高Peer和CouchDB的写效率
# 但是可能会降低查询响应时间
warmIndexesAfterNBlocks: 1
history:
enableHistoryDatabase: true # 是否开启历史数据库
6.metrics部分
metrics是一个系统性能度量框架,主要用来实现对服务进行监控、统计;指定是否启动metrics服务器,当启用metrics服务器后,关联指定相应的类型、报告度量的频率及服务器相关的信息。详细配置信息参考如下:
metrics:
enabled: false # 启用或禁用metrics服务器
# 当启用metrics服务器时
# 必须使用特定的metrics报告程序类型当前支持的类型:"statsd"、"prom"
reporter: statsd
interval: 1s # 确定报告度量的频率
statsdReporter:
address: 0.0.0.0:8125 # 要连接的statsd服务器地址
flushInterval: 2s # 确定向statsd服务器推送指标的频率
# 每个push metrics请求的最大字节数,内部网中推荐用1432,互联网中推荐用512
flushBytes: 1432
promReporter:
listenAddress: 0.0.0.0:8080 # HTTP服务器监听地址
- 点赞
- 收藏
- 关注作者
评论(0)