《Hyperledger Fabric菜鸟进阶攻略》 —2.3 Hyperledger Fabric核心配置文件详解

举报
华章计算机 发表于 2020/02/16 20:03:35 2020/02/16
【摘要】 本节书摘来自华章计算机《Hyperledger Fabric菜鸟进阶攻略》 一书中第2章,第2.3.1节,作者是黎跃春 韩小东 付金亮  。

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服务器监听地址


【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。