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成员关系采样的时间间隔用于检查稳定性
membershipSampleInterval: 1s
# peer节点决定选举的等待时间
leaderAliveThreshold: 10s
# peer发送提议消息和声明自己为领导者之间的时间
leaderElectionDuration: 5s
# 私有数据配置
pvtData:
# 从其他peer节点拉取数据直到被提交时(隐私数据被删除),隐私数据的最大保存时间
pullRetryThreshold: 60s
# 当私有数据进入暂态数据库时,它与当时peer的账本的高度相关联。
# 定义了当前区块高度与暂态数据库私有数据之间的最大差异。
# 当提交序列为transientstoreMaxBlockRetention倍数的块时,将从暂态数据库中清除私有数据。
transientstoreMaxBlockRetention: 1000
# 在背书时间等待隐私数据推送的每个peer确认的最长时间
pushAckTimeout: 3s
# 用作缓冲区以防止peer试图从别的peer提取私有数据,这些数据很快将在接下来的N个块中被清除。
# 这有助于新加入的peer更快地赶上当前的区块链高度。
btlPullMargin: 10
# 协调器都试图从其他对等体中提取最新丢失的块,并且具有最大的批量大小限制。
# rconditionBatchSize确定将在单个迭代中协调的丢失私有数据的最大批量大小。
reconcileBatchSize: 10
# 确定协调器从迭代结束到下一次协调迭代开始的睡眠时间
reconcileSleepInterval: 1m
# 指示是否启用私有数据协调
reconciliationEnabled: true
# 指示是否需要在提交期间跳过从其他peer拉取无效事务的私有数据,并仅通过协调器拉取
skipPullingInvalidTransactionsDuringCommit: false
# implicitCollectionDisseminationPolicy 指定本peer节点的私有集合的传播策略。
# 当peer认可写入其自己的私有集合的提案时,以下值会覆盖用于传播私有数据的默认值。
# 该策略会适用于peer已加入的所有通道。
# 这意味着requiredPeerCount必须小于组织中对等方数量最少的通道中的对等方数量。
implicitCollectionDisseminationPolicy:
# 定义了peer在背书期间必须成功地将私有数据传播到其自己的隐式集合的合格peer的最小数量。 默认值为 0。
requiredPeerCount: 0
# 定义了peer在背书期间尝试为自己的隐式集合传播私有数据的合格peer的最大数量。 默认值为 1。
maxPeerCount: 1
# Gossip state transfer related configuration
# Gossip 状态转移相关配置
state:
# 指示何时启用状态转移,默认值为false,即状态转移处于活动状态,
# 并注意同步丢失的块,从而允许滞后对等体赶上其余网络的速度。
# 记住,当peer.gossip.useLeaderElection为true,并且组织中有多个peer,
# 或peer.gossip.useLeaderElection与peer.gossip.orgleader 一起为false时,
# 则对等方的账本可能落后于其他对等方,并且由于状态转移被禁用而永远无法赶上。
enabled: false
# checkInterval interval to check whether peer is lagging behind enough to
# request blocks via state transfer from another peer.
# checkInterval间隔,来检查peer是否滞后到足以通过来自另一个peer的状态传输来请求块。
# 10s检查一次
checkInterval: 10s
# responseTimeout amount of time to wait for state transfer response from
# other peers
# 等待来自其他peer的状态传输响应的时间量
responseTimeout: 3s
# batchSize the number of blocks to request via state transfer from another peer
#batchSize 通过状态传输从另一个peer请求的块数
batchSize: 10
# blockBufferSize 反映了重新排序缓冲区的大小
# 该缓冲区捕获块并注意将它们按顺序传递到分类帐层。
# 实际缓冲区大小在 0 到 2*blockBufferSize 之间,每个通道维护自己的缓冲区
blockBufferSize: 20
# maxRetries maximum number of re-tries to ask
# for single state transfer request
# 请求单个状态传输请求的最大重试次数
maxRetries: 3
# TLS Settings
tls:
# 是否开启Peer服务器端TLS
enabled: false
# 入站连接需要客户端证书/双向TLS。
# 未配置使用证书的客户端将无法连接到对等端
clientAuthRequired: false
# 用于 TLS 服务器的 X.509 证书
cert:
file: tls/server.crt
# 用于 TLS 服务器的私钥
key:
file: tls/server.key
# rootcert.file 表示在出站连接期间用于验证其他节点证书的可信的根CA证书。
# 它不需要设置,但可用于扩充每个通道配置的 MSP 中可用的 TLS CA 证书集。
rootcert:
file: tls/ca.crt
# 如果启用了双向 TLS,clientRootCAs.files 包含用于验证客户端连信任的根CA证书。
# 它增加了每个通道配置的 MSP 中可用的 TLS CA 证书集。
# 至少,设置您组织的 TLS CA 根证书,以便peer可以接收加入通道请求
clientRootCAs:
files:
- tls/ca.crt
# 建立客户端连接时用于 TLS 的私钥。 如果未设置,将使用 peer.tls.key.file 代替
clientKey:
file:
# 建立客户端连接时用于 TLS 的 X.509 证书。 如果未设置,将使用 peer.tls.cert.file 代替
clientCert:
file:
# 包含与验证客户端消息相关的配置参数
authentication:
#当前服务器时间与客户端请求消息中指定的客户端时间之间可接受的差异
timewindow: 15m
# peer将存储数据的文件系统上的路径(例如账本)。
# 此位置必须受到访问控制保护,以防止可能破坏对等操作的意外修改。
# 该路径可能是相对于 FABRIC_CFG_PATH 或绝对路径
fileSystemPath: /var/hyperledger/production
# BCCSP(区块链加密提供者):选择要使用的加密实现或库
BCCSP:
Default: SW
# 默认是SW(软件实现),也可以选择PKCS11(硬件安全模块)
SW:
# TODO:默认的哈希和安全级别需要重构才能完全配置。
# 更改这些默认值需要协调 SHA2 在多个地方被硬编码,不仅是 BCCSP
# 当前仅可以SHA2
Hash: SHA2
Security: 256
# Location of Key Store
FileKeyStore:
# 如果为 "",则默认为 'mspConfigPath'/keystore
KeyStore:
# Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11)
PKCS11:
# Location of the PKCS11 module library
Library:
# Token Label
Label:
# User PIN
Pin:
Hash:
Security:
# peer节点上msp本地配置文件路径
# 该路径可能是相对于 FABRIC_CFG_PATH 或绝对路径。
mspConfigPath: msp
# 本地 MSP 标识符
# ----!!!!IMPORTANT!!!-!!!IMPORTANT!!!-!!!IMPORTANT!!!!----
# 部署者需要更改 localMspId 字符串的值。
# 特别是,一个peer的localMspId的名称需要与该peer所属的每个通道中的一个MSP的名称相匹配
# 否则,此peer的消息将不会被其他节点识别为有效。
localMspId: SampleOrg
# CLI common client config options CLI 常用客户端配置选项
client:
# connection timeout
connTimeout: 3s
# 订购服务相关的配置
deliveryclient:
# 使该peer能够通过gossip传播它从排序服务中提取的块。
# 注意:“gossip.state.enabled”控制点对点复制过去提交的块。
blockGossipEnabled: true
# 它设置排序服务在重新连接尝试中可能花费的总时间,直到其重试逻辑放弃并返回错误
reconnectTotalTimeThreshold: 3600s
# It sets the delivery service <-> ordering service node connection timeout
# 它设置排序服务<->订购服务节点连接超时
connTimeout: 3s
# 它设置连续重试之间的传递服务最大延迟
reConnectBackoffThreshold: 3600s
# 在通道配置中找到时应覆盖的排序者端点地址列表。
addressOverrides:
# - from:
# to:
# caCertsFile:
# - from:
# to:
# caCertsFile:
localMspType: bccsp
# 仅在非生产环境中与 Go 分析工具一起使用。 在生产中,它应该被禁用(例如启用:false)
profile:
enabled: false
listenAddress: 0.0.0.0:6060
# Handlers定义了自定义处理程序,Handlers可以过滤和改变在peer间传递的对象,例如:
# 身份验证筛选器-拒绝或转发来自客户端的提案
# 装饰器-附加或修改传递给链码的链码输入
# 背书人-定制签名方案响应有效载荷及其变异
# 自定义一个handler需要:
# - 在 core/handlers/library/library.go 中为静态编译的处理程序定义的工厂方法名称
# - 可插入过滤器的共享对象二进制文件的库路径 Auth 过滤器和装饰器按照定义的顺序链接和执行。例如:
# Auth filters and decorators are chained and executed in the order that
# they are defined. For example:
# authFilters:
# -
# name: FilterOne
# library: /opt/lib/filter.so
# -
# name: FilterTwo
# decorators:
# -
# name: DecoratorOne
# -
# name: DecoratorTwo
# library: /opt/lib/decorator.so
# 背书者被配置为一个映射,它的键是被覆盖的背书系统链码。
# 下面是一个覆盖默认 ESCC 并使用与默认 ESCC 具有相同功能的背书插件的示例。
# 如果缺少 'library' 属性,则该名称将用作内置库中的构造方法,类似于 auth 过滤器和装饰器。
# If the 'library' property is missing, the name is used as the constructor method in the builtin library similar
# to auth filters and decorators.
# endorsers:
# escc:
# name: DefaultESCC
# library: /etc/hyperledger/fabric/plugin/escc.so
handlers:
authFilters:
- # 工厂方法的名称
name: DefaultAuth
- #此过滤器检查身份 x509 证书过期
name: ExpirationCheck # This filter checks identity x509 certificate expiration
decorators:
-
name: DefaultDecorator
endorsers:
escc:
name: DefaultEndorsement
library:
validators:
vscc:
name: DefaultValidation
library:
# library: /etc/hyperledger/fabric/plugin/escc.so
# 并行执行事务严重的goroutine的数量
validatorPoolSize:
# 客户端使用发现服务来查询有关节点的信息,
# 例如 - 哪些节点加入了某个通道,最新的通道配置是什么,最重要的是--给定链码和通道,哪些可能的节点集满足背书政策。
discovery:
enabled: true
# Whether the authentication cache is enabled or not.
authCacheEnabled: true # 是否启用了认证缓存
# 缓存的最大大小,之后进行清除
authCacheMaxSize: 1000
# 由于过多而清除缓存后,保留在缓存中的条目的比例(0 到 1)
authCachePurgeRetentionRatio: 0.75
# 是否允许非管理员执行非通道范围的查询。
# 如果为 false,则意味着只有对等管理员才能执行非通道范围的查询。
orgMembersAllowedAccess: false
# Limits is used to configure some internal resource limits.
# 用于配置一些内部资源限制
limits:
#并发性限制了每个对等端上并发运行的服务请求数。
#目前,此选项仅适用于背书服务和交付服务。
#当属性缺失或值为0时,将禁用服务的并发限制
concurrency:
#背书服务将并发请求限制到处理链码部署、查询和调用的背书服务,
#包括用户链码和系统链码。
endorserService: 2500
# deliverService limits concurrent event listeners registered to deliver service for blocks and transaction events.
#deliverService限制注册的并发事件监听器为块和事务事件提供服务。
deliverService: 2500
# gatewayService limits concurrent requests to gateway service that handles the submission and evaluation of transactions.
#gatewayService将并发请求限制到处理事务提交和评估的网关服务。
gatewayService: 500
# GRPC 服务器和客户端可以接收的最大消息大小(以字节为单位)100MB
maxRecvMsgSize: 104857600
# GRPC 服务器和客户端可以接收的最大消息大小(以字节为单位)100MB
maxSendMsgSize: 104857600
2.2 Vm部分
对链码运行环境进行配置
vm:
# 如果您使用外部链码生成器并且不需要默认的Docker链码生成器,则应取消peer的配置,
# 这样对等方的Docker-health checker就不会注册。
endpoint: unix:///var/run/docker.sock #docker daemon地址
docker:
tls:
enabled: false # 是否打开TLS认证
ca:
file: docker/ca.crt # CA证书
cert:
file: docker/tls.crt # TLS身份证书
key:
file: docker/tls.key # 私钥
# 启用/禁用链码容器的标准输出/错误以进行调试
attachStdout: false
# 创建 docker 容器的参数
# 可以使用 ipam 和 dns-server 为集群有效地创建容器
# NetworkMode - 设置容器的网络模式。支持的标准值为:`host`(默认)、`bridge`、`ipvlan`、`none`。
# Dns - 供容器使用的 DNS 服务器列表。
# 注意:不支持 Docker Host Config 的 `Privileged` `Binds` `Links` 和 `PortBindings` 属性,如果设置则不会使用。
# LogConfig - 为 Docker 设置日志记录驱动程序(类型)和相关选项(配置)。
# 了解更多信息,https://docs.docker.com/engine/admin/logging/overview/
# 注意:不支持使用环境变量设置 LogConfig。
hostConfig:
NetworkMode: host
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
2.3 Chaincode部分
chaincode:
# 该id由Chaincode stub用来向Peer注册正在执行的Chaincode id,
# 通常通过ENV变量提供,在安装链码时提供“路径”形式的id。“名称”用于所有其他请求,可以是任何字符串。
id:
path:
name:
# ccenv docker镜像
builder: $(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
# 是否动态拉取docker镜像
pull: false
golang:
# 链码运行基础 docker镜像
runtime: $(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
# 是否动态链接golang链码
dynamicLink: false
java:
# This is an image based on java:openjdk-8 with addition compiler
# tools added for java shim layer packaging.
# This image is packed with shim layer libraries that are necessary
# for Java chaincode runtime.
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
# This is an image based on node:$(NODE_VER)-alpine
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
# 被视为链码的外部构建器和启动器的目录列表。外部构建器检测处理将按照下面指定的顺序迭代构建器。
# 如果您不需要回退到默认的 Docker 构建器,也可以取消配置上面的 vm.endpoint。
# 要通过 env 变量覆盖此属性,请使用 CORE_CHAINCODE_EXTERNALBUILDERS: [{name: x, path: dir1}, {name: y, path: dir2}]
# 路径必须是绝对路径。
externalBuilders:
- name: ccaas_builder
path: /opt/hyperledger/ccaas_builder
propagateEnvironment:
- CHAINCODE_AS_A_SERVICE_BUILDER_CONFIG
# 等待链码构建和安装过程完成的最长时间。
installTimeout: 300s
# 启动容器并等待注册通过的超时时间。
startuptimeout: 300s
# Invoke 和 Init 调用的超时持续时间。
# 此超时适用于所有通道中的所有链码,包括系统链码。
# 在生产环境中,链码镜像不太可能被删除,因此可以相应减少超时。
executetimeout: 30s
# 有 2种模式 "dev" and "net".可以远程在ide环境中运行链码,和外部链码区别?
# "dev" 模式下,用户在本地机器上从命令行启动 peer 后运行链代码。
# "net"模式下,peer 将在 docker 容器中运行链代码。
mode: net
# Peer和链码之间的心跳超时,值小于或等于0会关闭
keepalive: 0
# enabled system chaincodes 启用系统链码
system:
_lifecycle: enable
cscc: enable
lscc: enable
qscc: enable
# Logging section for the chaincode container
logging:
# Default level for all loggers within the chaincode container
level: info
# Override default level for the 'shim' logger
shim: warning
# Format for the chaincode container logs
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
2.4 ledger部分
ledger:
blockchain: # 未使用
state:
# stateDatabase - 选项是“goleveldb”、“CouchDB”
# goleveldb - 存储在 goleveldb 中的默认状态数据库。
# CouchDB - 在 CouchDB 中存储状态数据库
stateDatabase: goleveldb
# 限制每次查询返回的记录数
totalQueryLimit: 100000
couchDBConfig:
# 建议在与对等服务器相同的服务器上运行CouchDB,不要将CouchDB容器端口映射到docker-compose中的服务器端口。
# 否则,必须在CouchDB客户端(对等端)和服务器之间的连接上提供适当的安全性。
couchDBAddress: 127.0.0.1:5984
# 此用户名必须在 CouchDB 上具有读写权限
username:
# 建议在启动期间将密码作为环境变量传递(例如 CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD)。
# 如果存储在此处,则该文件必须受到访问控制保护,以防止意外用户发现密码。
password:
# CouchDB 错误的重试次数
maxRetries: 3
# peer启动时候,couchdb重启的次数
maxRetriesOnStartup: 10
# CouchDB 请求超时
requestTimeout: 35s
# totalQueryLimit 是总约束。
# internalQueryLimit为单个查询约束,链码可以执行多个查询。
internalQueryLimit: 1000
# 批量更新最大记录数
maxBatchUpdateSize: 1000
# 创建 _global_ 更改系统数据库
# 这是可选的。创建全局更改数据库将需要额外的系统资源来跟踪更改和维护数据库
createGlobalChangesDB: false
# CacheSize 表示要为内存状态缓存分配的最大兆字节 (MB)。
# 请注意,CacheSize 需要是 32 MB 的倍数。
# 如果它不是 32 MB 的倍数,则对等方会将大小四舍五入到下一个 32 MB 的倍数。
# 要禁用缓存,需要为 cacheSize 分配 0 MB。
cacheSize: 64
history:
# 历史数据库的启用,及key更新记录
# 所有历史“索引”都将存储在 goleveldb 中,无论是否使用 CouchDB 或备用数据库作为状态。
enableHistoryDatabase: true
pvtdataStore:
# 提交隐私数据的最大数目
collElgProcMaxDbBatchSize: 5000
# 写入两个连续的数据库批次之间的最小持续时间 ms
collElgProcDbBatchesInterval: 1000
# 缺失的数据条目分为两类:
# (1) prioritized
# (2) deprioritized
# 最初,所有缺失的数据都在优先列表中。
# 当协调器无法从其他对等方获取丢失的数据时,未协调的丢失数据将被移动到去优先级列表中。
# 协调器将在每个 deprioritizedDataReconcilerInterval(单位:分钟)之后重试已取消优先级的缺失数据。
# 注意间隔需要大于reconcileSleepInterv
deprioritizedDataReconcilerInterval: 60m
snapshots:
# Path on the file system where peer will store ledger snapshots
# peer将存储分类帐快照的文件系统上的路径
# 路径必须是绝对路径
rootDir: /var/hyperledger/production/snapshots
2.5 operations部分
该部分主要设置运行时对外的RESTful管理服务。
operations:
# 操作服务器的主机和端口
listenAddress: 127.0.0.1:9443
# 是否启用TLS 对接口进行包含
tls:
# TLS enabled
enabled: false
# 操作服务器的 PEM 编码服务器证书的路径
# 本节中的路径可能是相对于 FABRIC_CFG_PATH 或绝对路径。
cert:
file:
# 操作服务器的 PEM 编码服务器密钥的路径
key:
file:
# 是佛开启客户端验证以限定访问的客户端
clientAuthRequired: false
# 信任的客户端根证书路径列表
clientRootCAs:
files: []
2.6 metrics部分
metrics部分负责配置统计服务。
metrics:
# metrics provider is one of statsd, prometheus, or disabled
# metrics provider是 statsd(推送模式)、prometheus(拉取模式) 或 disabled 之一
provider: disabled
statsd:
# 网络类型:tcp 或 udp
network: udp
# 修改为外部statsd的服务地址
address: 127.0.0.1:8125
# 地缓存的计数器和仪表被推送到 statsd 的时间间隔
writeInterval: 10s
# 统计推送的前缀
prefix:
3. freerent core.yaml配置
3.1 core.yaml修改的部分
当前仅修改了chaincode部分,添加了链码容器所需要的镜像源和注释了外部链码构造器相关配置,其他配置修改基本都在compose中。后续对性能进行优化还会对对相关配置参数进行探索。
chaincode:
id:
path:
name:
builder: ${PRIVATE_REGISTRY_URL}/fabric-ccenv:${FABRIC_TAG}
pull: false
golang:
runtime: ${PRIVATE_REGISTRY_URL}/fabric-baseos:${BASEOS_TAG}
dynamicLink: false
java:
runtime: $(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
node:
runtime: $(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
externalBuilders: []
# - path: /path/to/directory
# name: descriptive-builder-name
# propagateEnvironment:
# - ENVVAR_NAME_TO_PROPAGATE_FROM_PEER
# - GOPROXY
3.2 compose 中Peer环境变量配置
以supervisor组织的Peer0为例,完整docker-compose 文件看后续章节。
peer0supervisor:
image: "${PRIVATE_REGISTRY_URL}/fabric-peer:${FABRIC_TAG}"
hostname: peer0.supervisor.freerent.cn
environment:
# Peer 基础 部分
- CORE_PEER_ID=peer0.supervisor.freerent.cn
- CORE_PEER_ADDRESS=peer0.supervisor.freerent.cn:7051
- CORE_PEER_LISTENADDRESS=0.0.0.0:7051
- CORE_PEER_CHAINCODEADDRESS=peer0.supervisor.freerent.cn:7052
- CORE_PEER_CHAINCODELISTENADDRESS=0.0.0.0:7052
- CORE_PEER_NETWORKID=rentnet
- CORE_PEER_LOCALMSPID=SupervisorMSP
- CORE_PEER_PROFILE_ENABLED=false
# Peer TLS 部分
- CORE_PEER_TLS_ENABLED=true
- CORE_PEER_TLS_CERT_FILE=/etc/hyperledger/fabric/tls/server.crt # TLS服务器的 X.509 证书
- CORE_PEER_TLS_KEY_FILE=/etc/hyperledger/fabric/tls/server.key # TLS 服务器的私钥
- CORE_PEER_TLS_ROOTCERT_FILE=/etc/hyperledger/fabric/tls/ca.crt #组织TLS CA 根证书
# Peer Gossip部分
- CORE_PEER_GOSSIP_USELEADERELECTION=true # 动态选取
- CORE_PEER_GOSSIP_ORGLEADER=false
- CORE_PEER_GOSSIP_BOOTSTRAP=peer1.supervisor.freerent.cn:7051
- CORE_PEER_GOSSIP_ENDPOINT=peer0.supervisor.freerent.cn:7051
- CORE_PEER_GOSSIP_EXTERNALENDPOINT=peer0.supervisor.freerent.cn:7051
# VM部分
- CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock
- CORE_VM_DOCKER_HOSTCONFIG_NETWORKMODE=rentnet
- FABRIC_LOGGING_SPEC=INFO
- FABRIC_CFG_PATH=/etc/hyperledger/fabric
# Chaincode部分
# Ledger 部分
- CORE_LEDGER_STATE_STATEDATABASE=CouchDB
- CORE_LEDGER_STATE_COUCHDBCONFIG_COUCHDBADDRESS=couchdb0supervisor:5984
- CORE_LEDGER_STATE_COUCHDBCONFIG_USERNAME=freerent
- CORE_LEDGER_STATE_COUCHDBCONFIG_PASSWORD=freerent@2022
# operations部分
- CORE_OPERATIONS_LISTENADDRESS=0.0.0.0:9443
# metrics部分
- CORE_METRICS_PROVIDER=prometheus