Fabric核心配置文件的理解

目标

  1. 了解Hyperledger Fabric对Peer节点的核心配置信息
  2. 了解Hyperledger Fabric对orderer节点的核心配置信息

任务实现

在Hyperledger Fabric中, 有两个示例配置文件,一个为Peer节点的示例配置文件,一个为Orderer节点的示例配置文件,理解这两个配置文件的内容对于我们而言,会更进一步的理解Hyperledger Fabric运行状况。

2.2.1 core.yaml详解

core.yaml配置文件是Peer节点的示例配置文件,具体路径在 fabric-samples/config 目录下;该core.yaml示例配置文件中共指定了六大部分内容,详见解释如下。

在Fabirc源码中的路径为:$GOPATH/src/github.com/hyperledger/fabric/sampleconfig/core.yaml

2.2.1.1 日志部分:

日志记录级别有六种:CRITICAL | ERROR | WARNING | NOTICE | INFO | DEBUG

使用 level 指定默认所有模块为 info 级别,然后单独指定 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.2.1.2 peer部分:

peer部分是 Peer 服务的核心配置内容,包括 Peer 的基础服务部分、gossip 部分、event、tls、BCCSP 等相关配置信息

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代表无限制

    # Peer服务与Client的设置
    keepalive:
        # 指定客户机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试图获取私有数据来自即将在接下来的N个块中被清除的对等节点
            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类型)

    # 仅在非生产环境中与Go分析工具一起使用。在生产中,它应该被禁用
    profile:
        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

2.2.1.3 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

2.2.1.4 chaincode部分:

与链码相关的配置

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}'

2.2.1.5 ledger部分:

分类帐的配置信息。

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        # 是否开启历史数据库

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

2.2.2 orderer.yaml详解

orderer.yaml 配置文件是 Orderer 节点的示例配置文件,具体路径在 fabric-samples/config 目录下;该 orderer.yaml 示例配置文件中共指定了五大部分内容,详细解释见如下内容。

在 Fabirc 源码中的路径为:$GOPATH/src/github.com/hyperledger/fabric/sampleconfig/orderer.yaml

orderer.yaml 示例配置文件中共指定了五大部分内容:

2.2.2.1 General部分:

General:
    LedgerType: file    # 指定账本类型(可选file、RAM、json三种)
    ListenAddress: 127.0.0.1    # 监听地址
    ListenPort: 7050    # 监听端口号

    TLS:    # GRPC服务器的TLS设置
        Enabled: false    # 默认不启用
        PrivateKey: tls/server.key    # 签名的私钥文件
        Certificate: tls/server.crt    # 证书文件
        RootCAs:    # 可信任的根CA证书
          - tls/ca.crt
        ClientAuthRequired: false
        ClientRootCAs:

    Keepalive:    # GRPC服务器的激活设置
        ServerMinInterval: 60s    # 客户机ping之间的最小允许时间
        ServerInterval: 7200s    # 连接到客户机的ping之间的时间
        ServerTimeout: 20s    # 服务器等待响应的超时时间

    LogLevel: info

    LogFormat: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'

    GenesisMethod: provisional    # 生成初始区块的提供方式(可选provisional、file两种)
    GenesisProfile: SampleInsecureSolo    # 用于动态生成初始区块的概要
    GenesisFile: genesisblock    # 生成初始区块的配置文件 

    LocalMSPDir: msp    # 本地MSP目录 
    LocalMSPID: SampleOrg    # MSP ID

    Profile:    # 是否为Go“profiling”配置启用HTTP服务
        Enabled: false
        Address: 0.0.0.0:6060

    BCCSP:    # 区块链加密实现
        Default: SW    # 默认使用SW
        SW:
            Hash: SHA2
            Security: 256
            FileKeyStore:
                KeyStore:

    Authentication:    # 与身份验证相关的配置
        TimeWindow: 15m    # # 当前服务器时间与客户端请求消息中指定的客户端时间差异

2.2.2.2 FileLedger部分:

文件账本配置信息

FileLedger:
    Location: /var/hyperledger/production/orderer    # 区块存储路径
    Prefix: hyperledger-fabric-ordererledger    # 在临时空间中生成分类目录时使用的前缀

2.2.2.3 RAMLedger部分:

内存账本配置信息

RAMLedger:
    HistorySize: 1000    # 如果设置为保存在内存中,分类帐最大保留的块的数量

2.2.2.4 Kafka部分:

Kafka 集群的配置信息

Kafka:
    Retry:    # 无法建立到Kafka集群的连接时的重试请求    
        ShortInterval: 5s    # 重试时间间隔
        ShortTotal: 10m        # 重试的总时间
        LongInterval: 5m    # 重试失败后再次发送重试的时间间隔
        LongTotal: 12h        # 重试的最长总时间
        NetworkTimeouts:    # 网络超时设置
            DialTimeout: 10s
            ReadTimeout: 10s
            WriteTimeout: 10s
        Metadata:    # 请求领导人选举时影响元数据的设置
            RetryBackoff: 250ms    # 指定重试的最大时间
            RetryMax: 3    # 重试的最大次数
        Producer:    # 向Kafka集群发送消息失败的设置
            RetryBackoff: 100ms    # 指定重试的最大时间
            RetryMax: 3    # 重试的最大次数
        Consumer:    # 向Kafka集群读取消息失败的设置
            RetryBackoff: 2s    # 指定重试的最大时间

    Verbose: false    # 是否为与Kafka集群的交互启用日志记录

    TLS:    # Orderer连接到Kafka集群的TLS设置
      Enabled: false    # 连接到Kafka集群时是否使用TLS
      PrivateKey:      
      Certificate:       
      RootCAs:

    Version:    # Kafka版本(未指定默认值为0.10.2.0)

2.2.2.5 Debug部分:

调试配置信息

Debug:
    BroadcastTraceDir:    # 对广播服务的每个请求写入此目录中的文件
    DeliverTraceDir:    # 对交付服务的每个请求写入此目录中的文件

FAQ

  1. 这些配置文件的内容需要全部都记下吗?

    不需要死记硬背,重要的是理解这些配置信息都指定的什么重要内容。

你可能感兴趣的:(Fabric核心配置文件的理解)