1. 简介
core.yaml主要是为Peer服务提供一些配置定义,当Peer节点启动时,会先从命令行获取参数、环境变量、和core.yaml读取配置信息。通过docker去搭建一个Peer服务,命令行默认是不带参数的,主要通过docker-compose 文件和core.yaml 去定义配置信息。docker-compose相当于环境变量,其优先级比较高,用来更灵活和个性化配置Peer服务的配置,因此在编写docker-compose前需要完整学习core.yaml,推荐去GitHub fabric项目下的sampleconfig文件夹下去下载配置文件模板。注意版本,例如:搭建v2.4.5版本fabric就需要切换到v2.4.5分支去下载。
2. 官方core.yaml学习
core.yaml主要包括peer、vm、chaincode、ledger、operation、metrics六大部分。
2.1 peer部分
peer部分保护与服务直接相关的核心配置
peer:
# peer在网络中的辨识信息,一般都需要在docker-compose中重新定义:
# 例如: - CORE_PEER_ID=peer0.agencyorg.freehome.cn
id: jdoe
# 指定网络ID
networkId: dev
# peer节点服务的端口号
listenAddress: 0.0.0.0:7051
# 链码容器连接时的监听地址
chaincodeListenAddress: 0.0.0.0:7052
# 此peer的链码端点用于连接到peer。如果没有指定,则选择chaincodeListenAddress地址。
# 如果未指定chaincodeListenAddress,则选择(如下所示)peer地址
# 如果指定的peer地址无效,则无论peer地址自动检测值如何,它都将返回到自动检测的IP(本地IP)。
chaincodeAddress: 0.0.0.0:7052
# 表示同组织内作为联系其他节点的端点。
# 关于联系其他组织的peer节点,详情请看gossip中externalEndpoint。就是定义锚节点
# 当用作CLI配置时,也是和客户端交互的端点。
address: 0.0.0.0:7051
# peer节点是否通过编程的方式自动探测对外服务绑定的地址。这种情况对于docker容器非常有用
# 设置为true时,将覆盖peer地址
addressAutoDetect: false
# peer节点的 gateway网关 服务设置(2.4新增内容).
gateway:
# 是否对该peer启用网关
enabled: true
# 网关在向客户端返回超时错误之前等待其他背书对等方响应的时间。
endorsementTimeout: 30s
# 网关等待连接到其他网络节点的持续时间。
dialTimeout: 2m
# peer服务器和客户端的keepalive设置
keepalive:
# Interval是一个持续时间,如果服务器没有看到来自客户端的任何活动
# 则会ping客户端以查看其是否处于活动状态
interval: 7200s
# 等待响应超时时间
timeout: 20s
# MinInterval是服务器和客户端ping之间允许的最小时间。
# 如果客户端频繁地发送ping,对等服务器将断开它们的连接
minInterval: 60s
# 作为CLI客户端时的相关配置
client:
# cli ping peer 的时间间隔设定.这必须大于或等于对等节点指定的最小间隔
interval: 60s
# 连接超时时间
timeout: 20s
#DeliveryClient保持与orderer节点通信的设置
deliveryClient:
interval: 60s
# 连接orderer超时时间
timeout: 20s
# Gossip 相关配置
gossip: # 八卦协议
# 节点启动后默认连接的初始节点
# 是该peer节点在启动时可以联系到的其他peer节点的列表
# 注意:这里的端点必须是同一组织中的对等方的端点,不是同一个组织会被拒绝。
bootstrap: 127.0.0.1:7051
# 注意:orgLeader和useLeaderElection参数是互斥的。
# 如果对等体配置为useLeaderElection=false,请确保组织中至少有一个peer的orgLeader设置为true
# 是否选用动态算法来动态选举leader
# 其中leader是与orderer服务建立连接的peer,并使用交付协议从orderer服务中获取block
# peer节点的领导节点
useLeaderElection: false
# 静态地将该peer定义为组织领导节点,这意味着当前peer将保持与orderer服务的连接,
# 并在其自身组织中的peer之间传播块。
orgLeader: true
# 成员跟踪轮询的间隔
membershipTrackerInterval: 5s
# 对于其他组织中的peer观察到该peer的端点
# 请参见“externalEndpoint”
endpoint:
# 内存中存储的最大块数
maxBlockCountToStore: 10
# 连续消息推送之间的最大时间(单位:毫秒)超过则触发,转发给其它节点
maxPropagationBurstLatency: 10ms
# 能缓存的最大消息数量,若超过则推送消息给其他peer节点
maxPropagationBurstSize: 10
# 将消息推送到远程peer节点的次数
propagateIterations: 1
# 选择将消息推送到的peer节点的数量
propagatePeerNum: 3
# 拉取消息的时间间隔(单位:秒)
# 必须大于 digestWaitTime + responseWaitTim
pullInterval: 4s
# 拉取消息的peer节点数量
pullPeerNum: 3
# Peer节点拉取状态信息消息的周期
requestStateInfoInterval: 4s
# 将状态信息消息推送到peer节点的周期
publishStateInfoInterval: 4s
# 状态信息消息可以保存直到过期的超时时间
stateInfoRetentionInterval:
# Alive messages包含启动证书的时间
publishCertPeriod: 10s
# 是否应该跳过验证区块信息
skipBlockVerification: false
# gRPC连接拨号的超时时间
dialTimeout: 3s
# 建立连接超时时间
connTimeout: 2s
# 接收消息的缓冲区大小
recvBuffSize: 20
# 发送消息的缓冲区大小
sendBuffSize: 200
# 处理摘要信息前的等待时间(单位:秒)应略小于requestWaitTime
digestWaitTime: 1s
# 处理移除nonce数据之前等待的时间(单位:毫秒)应略大于digestWaitTime
requestWaitTime: 1500ms
# 结束拉取数据处理前的等待时间
responseWaitTime: 2s
# 心跳检查间隔时间
aliveTimeInterval: 5s
# 心跳消息的超时时间
aliveExpirationTimeout: 25s
# 重新连接的间隔时间
reconnectInterval: 25s
# 尝试连接到peer的最大次数
maxConnectionAttempts: 120
#活动消息的消息过期因子 算法一些参数
msgExpirationFactor: 20
# 这是发布给组织外部外的peer端口
# 如果未设置,则其他组织不会知道同伴,也不会通过服务发现暴露
externalEndpoint:
# Leader election service configuration
# Leader主节点选举模块配置
election:
# 领导者选择启动期间peer等待的时间
startupGracePeriod: 15s
# gossip成员关系采样的时间间隔用于检查稳定性
membershipSampleInterva