Hyperledger Fabric Peer 配置解析

文中使用的 fabric 版本为 2.4.1

在 Fabric 网络中,用户可以设定 Peer 节点、排序节点、CA 节点的行为,以及管理通道、组织身份等多种资源,这都涉及网络内配置。

Fabric 节点在启动时可通过加载本地配置文件或环境变量等方式获取配置信息,同时结合少量命令行参数。

通常用户需要提前编写配置文件,供服务启动时使用;也可以仅在配置文件中指定部分默认值,使用环境变量动态指定可以实现更灵活的配置加载。

默认情况下,Fabric 节点的主配置路径为 FABRIC_CFG_PATH 环境变量所指向路径(默认为 /etc/hyperledger/fabric)。在不显式指定配置路径时,会尝试从主配置路径下查找相关的配置文件。

节点默认配置文件路径主要功能
Peer 节点$FABRIC_CFG_PATH/core.yaml指定 peer 节点运行时参数
Orderer$FABRIC_CFG_PATH/orderer.yaml指定 orderer 节点运行时参数
CA 节点$FABRIC_CA_SERVER_HOME/fabric-ca-server-config.yaml指定 CA 节点运行时参数

除了各节点配置文件,Fabric 还在每个通道内通过配置区块来维护通道范围的配置信息,通道配置可由 configtx.yaml 文件设定。

这些配置需要使用特定工具进行管理,这些工具包括 cryptogenconfigtxgenconfigtxlator

工具默认配置文件路径主要功能
cryptogen命令行参数 --config 指定负责生成网络中组织结构和身份文件
configtxgen命令行参数 --configPath 指定利用 configtx.yaml 文件生成通道初始配置;创建配置更新交易
configtxlatorN/A将通道配置在二进制和 JSON 格式之间进行转换,并计算配置更新量

Peer 配置剖析

<mark> 当 Peer 节点启动时,会按照优先级从高到低的顺序依次尝试从命令行参数、环境变量和配置文件中读取配置信息。</mark>

<mark> 当从环境变量中读入配置信息时候,除了日志使用单独的 FABRIC_LOGGING_SPEC 环境变量进行指定,其他都需要以 CORE_前缀开头。例如,配置文件中的 peer.id 项,对应环境变量 CORE_PEER_ID。> 当从环境变量中读入配置信息时候,除了日志使用单独的 FABRIC_LOGGING_SPEC 环境变量进行指定,其他都需要以 CORE_前缀开头。例如,配置文件中的 peer.id 项,对应环境变量 CORE_PEER_ID。</mark>

<mark>Peer 节点默认的配置文件读取路径为 $FABRIC_CFG_PATH/core.yaml;如果没找到,则尝试查找当前目录下的./core.yaml 文件;如果还没有找到,则尝试查找默认的 /etc/hyperledger/fabric/core.yaml 文件。</mark>

<mark> 在结构上,core.yaml 文件中包括 peer、vm、chaincode、ledger、operations、metrics 六大部分。</mark>


peer 部分

peer 部分包括与服务直接相关的核心配置,内容比较多。除了一些常规配置,还包括 keepalive、Gossip、TLS、BCCSP、handler、discover 等多个配置部分。

配置项类型作用默认值
id常规配置Peer 在网络中的 ID 信息,用于辨识不同的节点N/A
networkId常规配置网络自身的 ID,逻辑上可以通过 ID 指定多个隔离的网络N/A
listenAddress常规配置服务监听的本地地址,本地有多个网络接口时可指定仅监听某个接口0.0.0.0:7051
address常规配置对同组织内其他节点的监听连接地址。当服务在 NAT 设备上运行时,该配置可以指定服务对外宣称的可访问地址。如果是客户端,则作为其连接的 Peer 服务地址0.0.0.0:7051
addressAutoDetect常规配置是否自动探测服务地址。当 Peer 服务运行环境的地址是动态时,该配置可以进行自动探测,探测将内部地址作为服务地址。默认情况下关闭。注意启用 TLS 时候最好关闭,以免与指定的域名冲突造成认证失败false
fileSystemPath常规配置本地数据存放路径,包括账本、链码等/var/hyperledger/production
mspConfigPath常规配置MSP 目录所在的路径,可以为绝对路径,或相对配置目录的路径,一般建议为 /etc/hyperledger/fabric/mspmsp
localMspId常规配置Peer 所关联的 MSP ID,一般为所属组织名称,需要与通道配置内名称一致SampleOrg
deliveryclient常规配置到排序服务连接的配置。值得注意的是 addressOverrides 域。当 Peer 加入通道时会从初始区块提取排序服务信息,此时排序节点地址或证书可能已经发生变化。使用此处配置可以映射到新版本排序服务,避免出现无法加入通道的情况N/A
limits常规配置对访问频率进行限制,可以限定 endorserService , deliverService , gatewayService 服务处理的并发数endorserService=2500 , deliverService=2500 , gatewayService=2500
keepalive.interval保活消息如果服务端发现客户端在指定时间内未有任何消息,则主动发送 gRPC Ping 进行探测7200s
keepalive.timeout保活消息服务端发送 Ping 消息后,如果客户端在指定时间内未响应,则断开连接20s
keepalive.minInterval保活消息允许其他人发送保活消息的最小时间间隔,太快的消息会导致连接中断,以避免 DoS 攻击60s
keepalive.client保活消息作为客户端连接其他 Peer 节点时发送消息的间隔和超时时间interval: 60s , timeout: 20s
keepalive.deliveryClient保活消息作为客户端连接排序节点时发送消息的间隔和超时时间interval: 60s , timeout: 20s
gossip.bootstrap启动和连接节点启动后向组织内指定节点发起 Gossip 连接,以加入网络。bootstrap 节点会答复自己所知的邻居信息127.0.0.1:7051
gossip.endpoint启动和连接本节点在同一组织内的 gossip idpeer.address
gossip.maxBlockCountToStore启动和连接保存到内存中的区块个数上限,超过则丢弃10
gossip.skipBlockVerification启动和连接是否对区块消息进行校验false
gossip.dialTimeout启动和连接gRPC 连接拨号的超时时间3s
gossip.connTimeout启动和连接建立连接的超时时间2s
gossip.aliveTimeInterval启动和连接定期发送 Alive 心跳消息的时间间隔5s
gossip.aliveExpirationTimeout启动和连接Alive 心跳消息的超时时间25s
gossip.reconnectInterval启动和连接断线后重连的时间间隔25s
gossip.externalEndpoint启动和连接节点向组织外节点公开的服务地址,默认为空,代表不被其他组织所感知N/A
gossip.membershipTrackerInterval邻居发现定期探测当前邻居状态是否变更的时间间隔5s
gossip.maxPropagationBurstLatency邻居发现保存消息的最大时间,超过则转发给其他节点10ms
gossip.maxPropagationBurstSize邻居发现保存的最大消息个数,超过则转发给其他节点
gossip.propagateIterations邻居发现消息转发的次数1
gossip.propagatePeerNum邻居发现推送消息给指定个数的节点3
gossip.pullInterval邻居发现触发拉取消息的时间间隔,发送 Hello 消息收到对方摘要,更新摘要字典后发送拉取请求等待对方响应,应该比 digestWaitTime+requestWaitTime 长4s
gossip.pullPeerNum邻居发现从指定个数的节点拉取消息3
gossip.requestStateInfoInterval邻居发现从节点拉取状态信息(StateInfo)消息的时间间隔4s
gossip.publishStateInfoInterval邻居发现向其他节点推动状态信息消息的时间间隔4s
gossip.stateInfoRetentionInterval邻居发现状态信息消息的超时时间N/A
gossip.publishCertPeriod邻居发现启动后在心跳消息中包括证书的等待时间10s
gossip.recvBuffSize邻居发现收取消息的缓冲大小20
gossip.sendBuffSize邻居发现发送消息的缓冲大小200
gossip.digestWaitTime邻居发现拉取消息方发送 Hello 消息后等待对方返回摘要(开始更新摘要字典)的时间,之后发送 Req 消息1s
gossip.requestWaitTime邻居发现被拉取方收到 Hello 消息,发送摘要,等待接收拉取请求的超时1500ms
gossip.responseWaitTime邻居发现拉取方发送拉取请求后等待收到响应的超时2s
gossip.nonBlockingCommitMode邻居发现是否启用非阻塞模式提交区块到本地,默认关闭。是隐藏参数N/A
gossip.useLeaderElection选举是否允许节点之间动态进行组织的代表(leader)节点选举,通常情况下推荐开启false
gossip.orgLeader选举本节点是否指定为组织的代表节点。与 useLeaderElection 不能同时指定为 truetrue
gossip.election.startupGracePeriod选举代表成员选举等待的时间15s
gossip.election.membershipSampleInterval选举查成员稳定性的采样间隔1s
gossip.election.leaderAliveThreshold选举Peer 尝试进行选举的等待超时10s
gossip.election.leaderElectionDuration选举Peer 宣布自己为代表节点的等待时间5s
gossip.pvtData.pullRetryThreshold私有数据拉取区块相关私密数据的最长等待时间,超过则忽略而直接提交区块60s
gossip.pvtData.transientstoreMaxBlockRetention私有数据私密数据临时保存在本地临时数据库,在清除前等待的最大新区块个数。超过则会被从本地临时数据库删除。默认为 1000,意味着每当 1000 的整数倍区块提交时,与当前区块差异超过 1000 的旧区块关联的私密数据将从临时数据库删除1000
gossip.pvtData.pushAckTimeout私有数据背书环节中推送消息到其他 Peer 的等待响应时间3s
gossip.pvtData.btlPullMargin私有数据只获取在给定的区块数内不超时的私密数据10
gossip.pvtData.reconcileBatchSize私有数据协同时单次拉取的最多私密数据个数10
gossip.pvtData.reconcileSleepInterval私有数据协同的间隔1m
gossip.pvtData.reconciliationEnabled私有数据启用协同true
gossip.pvtData.skipPullingInvalidTransactionsDuringCommit私有数据在本地提交时,跳过对非法交易私密数据的获取false
gossip.pvtData.implicitCollectionDisseminationPolicy私有数据指定对等体自己的隐式集合的传播策略。当对等端认可一个写到它自己的隐式集合的提议时,下面的值将覆盖用于传播私有数据的默认值。注意,它适用于对等体已加入的所有通道。这意味着 requiredPeerCount 必须小于来自组织的对等体数量最低的通道中的对等体数量requiredPeerCount: 0 , maxPeerCount: 1
gossip.state.enabled状态转移是否开启允许通过状态传递(state transfer)快速追踪到最新区块false
gossip.state.checkInterval状态转移检查是否触发状态传递的时间间隔10s
gossip.state.responseTimeout状态转移回复的等待超时3s
gossip.state.batchSize状态转移通过状态传递获得的区块数10
gossip.state.blockBufferSize状态转移Peer 缓存收到的待排序区块的个数,最大不超过配置的两倍20
gossip.state.maxRetries状态转移状态传递请求的重试次数3
gossip.state.channelSize状态转移为每个通道缓冲的状态请求消息个数,超过指定阈值则忽略,是隐藏参数N/A
tls.enabledTLS 配置开启 server 端 TLS 检查false
tls.clientAuthRequiredTLS 配置要求入站连接的客户端证书 / 相互 TLSfalse
tls.cert.fileTLS 配置server 端使用的 TLS 证书路径tls/server.crt
tls.key.fileTLS 配置server 端使用的 TLS 私钥路径tls/server.key
tls.rootcert.fileTLS 配置server 端使用的根 CA 的证书,签发服务端的 TLS 证书tls/ca.crt
tls.clientRootCAs.filesTLS 配置用于校验客户端身份时,所使用的根 CA 证书列表tls/ca.crt
tls.clientKey.fileTLS 配置作为客户端连接其他服务时所用的 TLS 私钥,如果不指定,默认使用 tls.keytls.key
tls.clientCert.fileTLS 配置作为客户端连接其他服务时所用的 TLS 证书,如果不指定,默认使用 tls.keytls.cert
BCCSPBSSCP负责抽象密码库相关处理,配置算法类型、文件路径等SW
BCCSP.SW.HashBSSCPHash 算法类型,目前仅支持 SHA2SHA2
BCCSP.SW.FileKeyStore.KeyStoreBSSCP本地私钥文件路径,默认指向 mspConfigPath/keystoremspConfigPath/keystore
BCCSP.PKCS11BSSCPPKCS11 相关配置N/A
handlers.authFiltershandlers自定义的权限过滤插件,对消息权限进行校验DefaultAuth , ExpirationCheck
handlers.decoratorshandlers自定义修饰插件 ,对发给链码的数据添加额外处理DefaultDecorator
handlers.endorsershandlers自定义背书插件,负责背书过程处理DefaultEndorsement
handlers.validatorshandlers自定义验证插件,提交前进行验证DefaultValidation
discovery.enabled服务发现开启服务发现,服务发现功能为客户端提供了快速查询网络中拓扑、节点相关信息的功能true
discovery.authCacheEnabled服务发现是否启用对认证的缓存机制true
discovery.authCacheMaxSize服务发现最大缓存个数1000
discovery.authCachePurgeRetentionRatio服务发现缓存清理后保存的比列0.75
discovery.orgMembersAllowedAccess服务发现是否允许普通成员进行通道范围之外的信息查询,默认仅限 Adminfalse

vm 部分

对链码运行环境的配置,目前仅支持 Docker 容器服务。

配置项作用默认值
endpointdocker daemon 地址unix:///var/run/docker.sock
docker.tlsdocker daemon 启用 TLS 时相关证书和密钥文件配置false
docker.attachStdout是否启用连接到标准输出false
docker.hostConfig.NetworkMode运行链码容器的网络模式host
docker.hostConfig.Dns容器使用的 DNS 服务器列表N/A
docker.hostConfig.LogConfig日志配置N/A
docker.hostConfig.Memory内存限制大小,-1 表示无限制2147483648

chaincode 部分

配置项作用默认值
id动态标记链码的信息,该信息会以环境变量标签形式传给链码容器N/A
builder通用 docker 镜像编译环境$(DOCKER_NS)/fabric-ccenv:$(TWO_DIGIT_VERSION)
pull实例化链码时是否从仓库拉取基础镜像false
golang.runtimego 语言链码部署生成镜像的基础 docker 镜像$(DOCKER_NS)/fabric-baseos:$(TWO_DIGIT_VERSION)
golang.dynamicLink链码编译过程是否进行动态链接false
javajava 语言链码部署生成镜像的基础 docker 镜像$(DOCKER_NS)/fabric-javaenv:$(TWO_DIGIT_VERSION)
nodenodejs 链码的运行容器$(DOCKER_NS)/fabric-nodeenv:$(TWO_DIGIT_VERSION)
externalBuilders指定外部的链码编译和运行插件的路径列表N/A
installTimeout等待链码编译和安装完成的超时时间300s
startuptimeout启动链码容器的超时时间300s
executetimeout调用链码执行超时时间30s
mode执行链码的模式net
keepalivepeer 和链码之间的心跳超时,小于或等于 0 意味着关闭0
system系统链码配置,所有启用的链码都必须在这里注册_lifecycle: enable , cscc: enable , lscc: enable , qscc: enable
logging链码容器日志相关配置N/A

ledger 部分

配置项作用默认值
blockchain暂未使用N/A
state.stateDatabase状态数据库类型(goleveldb , CouchDB)goleveldb
state.totalQueryLimit每次链码查询最大返回记录数100000
state.couchDBConfig.couchDBAddresscouchdb 连接地址127.0.0.1:5984
state.couchDBConfig.usernamecouchdb 用户名N/A
state.couchDBConfig.passwordcouchdb 密码N/A
state.couchDBConfig.maxRetries出错后重试次数3
state.couchDBConfig.maxRetriesOnStartup启动出错重试次数10
state.couchDBConfig.requestTimeout请求超时时间35s
state.couchDBConfig.internalQueryLimit链码内单个逻辑查询返回的最大记录数1000
state.couchDBConfig.maxBatchUpdateSize批量更新的最大记录数1000
state.couchDBConfig.createGlobalChangesDB是否创建 _global_changes 系统库,会追踪全局修改false
state.couchDBConfig.cacheSize最大分配的缓存大小,需要为 32MB 的整数倍64
history.enableHistoryDatabase是否启用历史数据库true
pvtdataStore.collElgProcMaxDbBatchSize提交一批私有数据的最大个数5000
pvtdataStore.collElgProcDbBatchesInterval提交一批私有数据的最短时间间隔,单位毫秒1000
pvtdataStore.deprioritizedDataReconcilerIntervalN/A1000
snapshots.rootDir存储分类账快照的文件系统上的路径/var/hyperledger/production/snapshots

operations 部分

配置项作用默认值
listenAddressRESTful 管理服务的监听地址127.0.0.1:9443

metrics 部分

配置项作用默认值
provider统计服务类型,可以为 statsd (推送模式),prometheus (拉取模式),disableddisabled
statsd.network网络协议类型,tcp 或 udpudp
statsd.address修改为外部 statsd 的服务地址127.0.0.1:8125
statsd.writeInterval推送统计汇报到 statsd 的时间间隔10s
statsd.prefix为所有统计推送添加前缀N/A

注意 statsdprometheus 都是流行的开源监控数据收集软件。

fabricdockeryamlstatsd

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/608298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

智数融合|低代码入局,推动工业数字化转型走"深"向"实"

当下&#xff0c;“数字化、智能化”已经不再是新鲜词汇。事实上&#xff0c;早在几年前&#xff0c;就有企业开始大力推动数字化转型&#xff0c;并持续进行了一段时间。一些业内人士甚至认为&#xff0c;“如今的企业数字化已经走过了成熟期&#xff0c;进入了深水区。” 但事…

加密流量分析的过程

1. 流量收集 什么是流量收集 流量采集是指在计算机网络中收集和记录网络流量数据的过程。这一过程通常由网络管理员、安全专业人员、网络分析师或研究人员使用特定工具和技术来执行。流量采集对于理解网络性能、进行故障排除、进行安全监控和进行网络分析都非常重要。 流量收…

【算法Hot100系列】下一个排列

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学习,不断总结,共同进步,活到老学到老导航 檀越剑指大厂系列:全面总结 jav…

java字符串常用方法day02

StringBuilder类 由于String是不变对象,每次修改内容都要创建新对象,因此String不适合做频繁修改操作.为了解决这个问题,java提供了StringBuilder类. package string;/*** 频繁修改字符串带来的性能损耗.*/ public class StringDemo2 {public static void main(String[] args…

openGauss系新增市场份额达21.9%,跨越生态拐点

[中国&#xff0c;北京&#xff0c;2023年12月28日] 以“汇聚数据库创新力量&#xff0c;打造千行万业数据基石”为主题的openGauss Summit 2023在北京望京凯悦酒店举办。本次大会由国家工业信息安全发展研究中心软件所、中国软件行业协会、中国计算机学会数据库专业委员会指导…

DDL关于数据库和表操作的语法

1. DDL-数据库操作 &#xff08;1&#xff09;SHOW DATABASES ; (查看当前有哪些数据库 &#xff08;2&#xff09;CREATE DATABASES 数据库名; (创建数据库的语法 &#xff08;3&#xff09;USE 数据库名; (切换到某个数据库 &#xff08;4&#xff09;SEL…

safari缓存清理

safari缓存清理 点击顶端Safari浏览器–>点击偏好设置 点击隐私–>管理网站数据 全部移除

python系列教程218——生成器表达式

朋友们&#xff0c;如需转载请标明出处&#xff1a;https://blog.csdn.net/jiangjunshow 声明&#xff1a;在人工智能技术教学期间&#xff0c;不少学生向我提一些python相关的问题&#xff0c;所以为了让同学们掌握更多扩展知识更好地理解AI技术&#xff0c;我让助理负责分享…

python筛选数据库中表的数量

import pymysqldb pymysql.connect(host,port,user,password) cursor db.cursor()def get_table_list(in_db, in_table_name):"""获取数据库中的表数量"""sql fshow tables from {in_db};cursor.execute(sql)data cursor.fetchall()table_li…

C++qt-信号-信号槽

1、概念 信号和槽是两种函数&#xff0c;这是Qt在C基础上新增的特性&#xff0c;类似于其他技术中的回调的概念。 信号和槽通过程序员提前设定的“约定”&#xff0c;可以实现对象之间的通信&#xff0c;有两个先决的条件&#xff1a; 通信的对象必须都是从QObject类中派生出来…

3.C语言:函数与程序结构

Function 函数定义与声明外部变量与作用域头文件静态变量static寄存器变量程序块结构&#xff08;作用域&#xff09;初始化递归C预处理器 函数定义与声明 函数定义形式&#xff1a; 返回值类型函数明(参数声明表) {声明和语句 }函数定义中的各构成部分都可以省略。 不执行任…

数据库开发工具Navicat Premium 15 mac软件特色

Navicat Premium 15 mac版是一款数据库开发工具&#xff0c;Navicat Premium 15 Mac版可以让你以单一程序同時连接到 MySQL、MariaDB、SQL Server、SQLite、Oracle 和 PostgreSQL 数据库。 Navicat Premium mac软件特色 无缝数据迁移 数据传输&#xff0c;数据同步和结构同步…

婚恋/社交娱乐/同城相亲/红娘相亲交友软件开发小程序

需求分析&#xff1a;首先明确小程序的目标、功能和用户需求。确定小程序的主要功能&#xff0c;例如用户注册、登录、个人资料编辑、浏览其他用户资料、发送消息等。 技术选型&#xff1a;选择适合的开发框架和技术工具。在小程序开发中&#xff0c;可以使用微信小程序原生开…

电脑开启虚拟化如何查看自己的主机主板型号

问题描述 在使用virtualbox、vmware安装虚拟机的时候&#xff0c;需要本机电脑能够支持虚拟化。 但是不同厂家的主机&#xff08;主板&#xff09;幸好并不一致&#xff0c;所以需要先了解自己的电脑主板型号 操作方法 1、win r 键打开运行窗口&#xff0c;输入cmd并确定打开…

3D PDF查看器HOOPS Publish助力Smartscape拓展日本AEC市场!

​ 公司&#xff1a;Smartscape Co., Ltd. 行业&#xff1a;建筑、工程和施工(AEC) 软件&#xff1a;适用于AEC行业的3D PDF工具 软件开发工具包&#xff1a;Hoops Publish HOOPS_3D软件开发工具_HOOPS中文网慧都科技是HOOPS全套产品中国地区指定授权经销商&#xff0c;提供3D…

流畅芯视界 | 极海APM32F411 OLED驱动方案

随着技术的不断革新与进步&#xff0c;OLED显示技术以其在显示画质、设备厚度和能耗方面的显著表现&#xff0c;正在改变着人们的视觉体验。相较于传统液晶显示技术&#xff0c;OLED凭借更好的色彩表现力、更高对比度、以及能够实现更加轻薄的产品设计而日益受到消费者的青睐。…

zabbix部署

zabbix部署 部署zabbix服务被监测主机部署zabbix-agent2 使用版本 组件版本centos7.9zabbix5.0php7.2.24MariaDB5.5.68 部署zabbix服务 关闭防火墙和selinux [rootnode ~]# systemctl status firewalld ● firewalld.service - firewalld - dynamic firewall daemonLoaded: …

Vue-8、Vue事件处理

1、点击事件 <!DOCTYPE html> <html lang"en" xmlns:v-model"http://www.w3.org/1999/xhtml" xmlns:v-bind"http://www.w3.org/1999/xhtml"xmlns:v-on"http://www.w3.org/1999/xhtml"> <head><meta charset&quo…

0108作业

#include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {this->setWindowTitle("腾讯会议");this->resize(470,800);//设置界面大小this->setFixedSize(470,800);//锁定界面大小this->setStyleSheet("background-color:w…

信息系统安全——基于 AFL 的模糊测试

实验 3 基于 AFL 的模糊测试 3.1 实验名称 《基于 AFL 的模糊测试》 3.2 实验目 1 、熟悉模糊测试方法 2 、熟悉模糊测试工具 AFL 的使用 3.3 实验步骤及内容 1 、 安装 AFL 2 、 任意选择一个有源代码的样本 这里采用教材上一个包含栈溢出漏洞的样本。 3 、 结合源代码分析用 …