深度学习
当Peer节点作为服务端启动时,会按照优先级从高到低的顺序依次尝试从命令行参数、环境变量或配置文件中读取配置信息。
当从环境变量中读入配置时,需要以CORE_前缀开头,例如配置文件中的peer.id项,对应到环境变量CORE_PEER_ID。
Peer节点默认的配置文件读取路径为$FABRIC_CFG_PATH/core.yaml;如果没找到,则尝试查找当前目录下的./core.yaml文件;如果还没有找到,则尝试查找默认的/etc/hyperledger/fabric/core.yaml文件。
Fabric代码中提供了一些示例的core.yaml配置文件(如sampleconfig/core.yaml),可以作为参考。
在结构上,core.yaml文件中一般包括logging、peer、vm、chaincode、ledger五大部分,下面分别予以讲解。
10.2.1 logging部分
该部分主要定义Peer服务的日志记录级别和输出日志消息的格式。
支持日志级别包括critical、error、warning、notice、info、debug等。一般情况下,级别越低,则输出的调试信息越丰富。
除了可以设置全局的默认值为info外,还可以细致指定一些模块(cauthdsl、gossip、ledger、msp、policies、grpc)的输出日志级别。
具体各个配置项的功能也可以参看下面示例的注释部分:
logging:
peer: info # 全局的默认日志级别
# 模块的日志级别,覆盖全局配置
cauthdsl: warning
gossip: warning
ledger: info
msp: warning
policies: warning
grpc: error
# 输出日志的格式
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{short-func}
-> %{level:.4s} %{id:03x}%{color:reset} %{message}'
10.2.2 peer部分
peer部分包括了许多跟服务直接相关的核心配置,内容也比较多,包括通用配置、gossip、events、tls等多个配置部分,下面分别介绍。
1.通用配置
这里包括一些比较重要的配置信息,主要包括:
·id:Peer在网络中的ID信息,用于识别不同的节点;
·networkId:网络自身的ID,逻辑上可以通过ID指定多个隔离的网络;
·listenAddress:服务监听的本地地址,当本地有多个网络接口时候可以通过该配置指定仅监听在某接口上,默认为在本地所有的网络接口(0.0.0.0)上进行监听,服务端口为7051;
·chaincodeListenAddress:链码容器连接的监听地址,不指定的话则采用listenAddress;由于链码容器连接目前不支持双向TLS认证,生产环境中建议指定为不同地址;
·address:服务对外的地址。特别是当服务运行在NAT设备后时,该配置可以指定服务对外宣称的可访问地址;
·addressAutoDetect:是否自动探测服务地址,当Peer服务运行环境的地址是动态时,该配置可以进行自动探测,探测将内部地址作为服务地址;默认情况下是关闭,注意启用TLS时最好关闭,以免跟指定的域名冲突造成认证失败;
·gomaxprocs:配置运行该Go应用的最大进程数(runtime.GOMAXPROCS(n)),默认-1表示使用系统配置,不进行修改;
·fileSystemPath:本地数据存放路径,包括账本、链码等,一般指定为/var/hyperledger/production;
·BCCSP:密码库相关配置,包括算法、文件路径等;
·mspConfigPath:MSP目录所在的路径,可以为绝对路径,或相对配置目录的路径,一般建议为/etc/hyperledger/fabric/msp;
·localMspId:Peer所关联的MSP的ID,一般为组织单位名称,需要与联盟配置中的名称一致;
·profile:是否启用Go自带的profiling支持进行调试,生产环境下建议关闭。
具体各个配置项的功能也可以参看下面示例的注释部分:
peer:
id: peer0 # 节点ID
networkId: business # 网络的ID
listenAddress: 0.0.0.0:7051 # 节点在监听的本地网络接口地址
chaincodeListenAddress: 0.0.0.0:7052 #链码容器连接时的监听地址
address: 0.0.0.0:7051 # 节点对外的服务地址
addressAutoDetect: false # 是否自动探测对外服务地址
gomaxprocs: -1 # Go进程数限制
fileSystemPath: /var/hyperledger/production # 本地数据存放路径
BCCSP: # 加密库的配置
Default: SW
SW:
Hash: SHA2 # Hash算法类型,目前仅支持SHA2
Security: 256
FileKeyStore: # 本地私钥文件路径,默认指向<mspConfigPath>/keystore
KeyStore:
mspConfigPath: msp # MSP的本地路径
localMspId: DEFAULT # Peer所关联的MSP的ID
profile: # 是否启用Go自带的profiling支持进行调试
enabled: false
listenAddress: 0.0.0.0:6060
2.gossip配置
gossip配置主要是负责节点之间通过gossip消息进行P2P通信。主要包括如下几部分的配置项。
(1)启动和连接参数
启动和连接参数如下:
·bootstrap:启动节点后向哪些节点发起gossip连接,以加入网络。这些节点与本地节点需要属于同一组织;
·endpoint:本节点在同一组织内的gossip id,默认为peer.address;
·maxBlockCountToStore:保存到内存中的区块个数上限,超过则丢弃;
·skipBlockVerification:是否不对区块消息进行校验,默认为false;
·dialTimeout:gRPC连接拨号的超时;
·connTimeout:建立连接的超时;
·aliveTimeInterval:定期发送Alive心跳消息的时间间隔;
·aliveExpirationTimeout:Alive心跳消息的超时时间;
·reconnectInterval:断线后重连的时间间隔;
·externalEndpoint:节点被组织外节点感知时的地址,默认为空,代表不被其他组织所感知。
(2)消息相关
主要包括跟Gossip消息相关的配置,如下所示:
·maxPropagationBurstLatency:保存消息的最大时间,超过则触发转发给其他节点;
·maxPropagationBurstSize:保存的最大消息个数,超过则触发转发给其他节点;
·propagateIterations:消息转发的次数;
·propagatePeerNum:推送消息给指定个数的节点;
·pullInterval:拉取消息的时间间隔;
·pullPeerNum:从指定个数的节点拉取消息;
·requestStateInfoInterval:从节点拉取状态信息(StateInfo)消息的间隔;
·publishStateInfoInterval:向其他节点推动状态信息消息的间隔;
·stateInfoRetentionInterval:状态信息消息的超时时间;
·publishCertPeriod:启动后,在心跳消息中嵌入证书的等待时间;
·recvBuffSize:收取消息的缓冲大小;
·sendBuffSize:发送消息的缓冲大小;
·digestWaitTime:处理摘要数据的等待时间;
·requestWaitTime:处理nonce数据的等待时间;
·responseWaitTime:终止拉取数据处理的等待时间。
(3)选举相关
主要包括Leader节点选举相关的配置,如下所示:
·useLeaderElection:是否允许节点之间动态进行代表(leader)节点的选举,默认为禁止;
·orgLeader:本节点是否指定为组织的代表节点。与useLeaderElection不能同时指定为true;
·election.startupGracePeriod:代表成员选举等待的时间;
·election.membershipSampleInterval:检查成员稳定性的采样间隔;
·election.leaderAliveThreshold:Peer尝试进行选举的等待超时;
·election.leaderElectionDuration:Peer宣布自己为代表节点的等待时间。
完整的peer.gossip配置如下所示:
peer:
gossip:
bootstrap: 127.0.0.1:7051 # 启动节点后所进行gossip连接的初始节点
useLeaderElection: false # 是否动态选举代表节点
orgLeader: true # 是否指定本节点为组织代表节点
endpoint: # 本节点在组织内的gossip id
maxBlockCountToStore: 100 # 保存到内存中的区块个数上限
maxPropagationBurstLatency: 10ms # 保存消息的最大时间,超过则触发转发给其
他节点
maxPropagationBurstSize: 10 # 保存的最大消息个数,超过则触发转发给其他节点
propagateIterations: 1 # 消息转发的次数
propagatePeerNum: 3 # 推送消息给指定个数的节点
pullInterval: 4s # 拉取消息的时间间隔
pullPeerNum: 3 # 从指定个数的节点拉取消息
requestStateInfoInterval: 4s # 从节点拉取状态信息(StateInfo)消息的间隔
publishStateInfoInterval: 4s # 向其他节点推动状态信息消息的间隔
stateInfoRetentionInterval: # 状态信息消息的超时时间
publishCertPeriod: 10s # 启动后在心跳消息中包括证书的等待时间
skipBlockVerification: false # 是否不对区块消息进行校验,默认为false
dialTimeout: 3s # gRPC 连接拨号的超时
connTimeout: 2s # 建立连接的超时
recvBuffSize: 20 # 收取消息的缓冲大小
sendBuffSize: 200 # 发送消息的缓冲大小
digestWaitTime: 1s # 处理摘要数据的等待时间
requestWaitTime: 1s # 处理nonce数据的等待时间
responseWaitTime: 2s # 终止拉取数据处理的等待时间
aliveTimeInterval: 5s # 定期发送Alive心跳消息的时间间隔
aliveExpirationTimeout: 25s # Alive心跳消息的超时时间
reconnectInterval: 25s # 断线后重连的时间间隔
externalEndpoint: # 节点被组织外节点感知时的地址
election:
startupGracePeriod: 15s # 代表成员选举等待的时间
membershipSampleInterval: 1s # 检查成员稳定性的采样间隔
leaderAliveThreshold: 10s # Peer尝试进行选举的等待超时
leaderElectionDuration: 5s # Peer宣布自己为代表节点的等待时间
3.events配置
events服务配置主要包括如下配置项:
·address:本地监听的地址,默认在所有网络接口上进行监听,服务端口为7053;
·buffersize:最大进行缓冲的消息数,超过则向缓冲中发送事件消息会被阻塞;
·timeout:当缓冲已满情况下,往缓冲中发送消息的超时。小于0的值,表示直接丢弃消息;0值表示阻塞直到发出;大于0的值表示阻塞尝试直到超时,超时后还不能发出则丢弃。
示例配置如下所示:
peer:
events:
address: 0.0.0.0:7053 # 本地服务监听地址
buffersize: 100
timeout: 10ms
4.tls配置
tls部分配置相对简单,当tls检查启用时,指定身份验证证书、签名私钥、信任的根CA证书,以及校验的主机名。
具体各个配置项的功能也可以参见下面示例的注释部分:
peer:
tls:
enabled: false # 默认不开启TLS验证
cert:
file: tls/server.crt # 本服务的身份验证证书,公开可见,访问者通过该证书进
行验证
key:
file: tls/server.key # 本服务的签名私钥
rootcert:
file: tls/ca.crt # 信任的根CA的证书
serverhostoverride: # 是否指定进行TLS握手时的主机名称
10.2.3 vm部分
对链码运行环境的配置,目前主要支持Docker容器。主要包括如下配置项:
·endpoint:Docker Daemon地址,默认是本地套接字;
·docker.tls:Docker Daemon启用TLS时的相关证书配置,包括信任的根CA证书、服务身份证书、签名私钥等;
·docker.attachStdout:是否启用绑定到标准输出,启用后链码容器的输出消息会绑定到标准输出,方便进行调试使用;
·docker.hostConfig:Docker相关的主机配置,包括网络配置、日志、内存等。这些配置会在启动链码容器时候进行使用。更多Docker配置可以查看Docker相关的技术文档。
具体各个配置项的功能也可以参见下面示例的注释部分:
vm:
endpoint: unix:///var/run/docker.sock # Docker Daemon地址
docker:
tls: # Docker Daemon启用TLS时相关证书配置
enabled: false
ca:
file: docker/ca.crt
cert:
file: docker/tls.crt
key:
file: docker/tls.key
attachStdout: false # 是否启用连接到标准输出
hostConfig: # Docker相关的主机配置,包括网络配置、日志、内存等
NetworkMode: host # host意味着链码容器直接使用所在主机的网络命名空间
Dns:
# - 192.168.0.1
LogConfig:
Type: json-file
Config:
max-size: "50m"
max-file: "5"
Memory: 2147483648
10.2.4 chaincode部分
跟链码相关的配置选项主要包括如下这些:
·id:记录链码相关信息,包括路径、名称、版本等,该信息会以标签形式写到链码容器;
·builder:通用的本地编译环境,是一个Docker镜像;
·golang:Go语言的链码部署生成镜像的基础Docker镜像;
·car:car格式的链码部署生成镜像的基础Docker镜像;
·java:生成Java链码容器时候的基础镜像信息;
·startuptimeout:启动链码容器超时,等待超时时间后还没有收到链码端的注册消息,则认为启动失败;
·executetimeout:invoke和initialize命令执行超时;
·deploytimeout:部署链码的命令执行超时;
·mode:执行链码的模式。dev允许本地直接运行链码,方便调试;net意味着在容器中运行链码;
·keepalive:Peer和链码之间的心跳超时,小于或等于0意味着关闭;
·system:系统链码的相关配置;
·logging:链码容器日志相关配置。
具体各个配置项的功能也可以参见下面示例的注释部分:
chaincode:
id: # 动态标记链码的信息,该信息会以标签形式写到链码容器
path:
name:
# 通用的本地编译环境,是一个Docker镜像
builder: $(DOCKER_NS)/fabric-ccenv:$(ARCH)-$(PROJECT_VERSION)
golang: # Go语言的链码部署生成镜像的基础Docker镜像
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
car: # car格式的链码部署生成镜像的基础Docker镜像
runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
java: # 生成Java链码容器时候的基础镜像信息
Dockerfile: |
from $(DOCKER_NS)/fabric-javaenv:$(ARCH)-$(PROJECT_VERSION)
startuptimeout: 300s # 启动链码容器的超时
executetimeout: 30s # invoke和initialize命令执行超时
deploytimeout: 30s # 部署链码的命令执行超时
mode: net # 执行链码的模式
keepalive: 0 # Peer和链码之间的心跳超时,小于或等于0意味着关闭
system: # 系统链码的配置
cscc: enable
lscc: enable
escc: enable
vscc: enable
qscc: enable
logging: # 链码容器日志相关配置
level: info
shim: warning
format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{short-
func} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
10.2.5 ledger部分
账本相关的配置包括如下选项:
·blockchain:设置系统区块链的整体配置,后面可能会丢弃;
·state:状态数据库的相关配置信息,包括类型(目前支持goleveldb和couchdb,前者轻量级性能高,后者支持复杂格式的查询)、数据库连接信息、查询最大返回记录数等;
·history:是否用goleveldb来记录键值历史,默认开启。
具体各个配置项的功能也可以参见下面示例的注释部分:
ledger:
blockchain:
state: # 状态数据库配置
stateDatabase: goleveldb # 状态数据库类型
couchDBConfig: # 如果启用 couchdb 数据库,配置连接信息
couchDBAddress: 127.0.0.1:5984
username:
password:
maxRetries: 3 # 出错后重试次数
maxRetriesOnStartup: 10 # 启动出错的重试次数
requestTimeout: 35s # 请求超时
queryLimit: 10000 # 每个查询的最大返回记录数
history:
enableHistoryDatabase: true # 是否启用历史数据库
来源:我是码农,转载请保留出处和链接!
本文链接:http://www.54manong.com/?id=921
微信号:qq444848023 QQ号:444848023
加入【我是码农】QQ群:864689844(加群验证:我是码农)
全站首页 | 数据结构 | 区块链| 大数据 | 机器学习 | 物联网和云计算 | 面试笔试
var cnzz_protocol = (("https:" == document.location.protocol) ? "https://" : "http://");document.write(unescape("%3Cspan id='cnzz_stat_icon_1276413723'%3E%3C/span%3E%3Cscript src='" + cnzz_protocol + "s23.cnzz.com/z_stat.php%3Fid%3D1276413723%26show%3Dpic1' type='text/javascript'%3E%3C/script%3E"));本站资源大部分来自互联网,版权归原作者所有!
评论专区