区块链Fabric 主要配置文件细讲

  • Peer 配置剖析

        本例子是拿fabric-samples 来说的,【如果是 fabric 的话,在 fabric/的根目录下有一个 core.yaml 】在 fabric-samples/config 目录下有一个 core.yaml 文件 该文件就是 peer 节点的各项配置,其中主要包含了:logging (日志)、 peer (节点)、 vm (链码运行环境)、chaincode (链码相关)、ledger (账本) 等 5 大部分

文件内容及各项说明如下所示:

 
 
  1.  
  2. logging: ## 日志级别有: critical error warning notice info debug 级别由大到小, 级别越小输出越详细
  3. level: info ## 全局的默认日志级别
  4.  
  5. ## 各个模块日志级别, 覆盖全局配置
  6. cauthdsl: warning ##
  7. gossip: warning
  8. grpc: error
  9. ledger: info
  10. msp: warning
  11. policies: warning
  12. peer:
  13. gossip: warning
  14.  
  15. # 日志的输出格式
  16. format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
  17.  
  18. ###############################################################################
  19. #
  20. # Peer section peer部分
  21. #
  22. ###############################################################################
  23. peer:
  24. id: jdoe ## Peer节点ID
  25. networkId: dev ## 网络ID
  26. listenAddress: 0.0.0.0:7051 ## 节点监听的本地网络接口地址
  27. chaincodeAddress: 0.0.0.0:7052 ## 链码容器连接时的监听地址 如未指定, 则使用listenAddressIP地址和7052端口
  28. address: 0.0.0.0:7051 ## 节点对外的服务地址 (对外的地址)【还有人说是 与同组织内其他peer通信的地址; 配置在cli节点上表示peer与其通信的地址 ??】
  29. addressAutoDetect: false ## 是否自动探测服务地址 (默认 关闭, 如果启用TLS时,最好关闭)
  30. gomaxprocs: -1 ## Go的进程限制数 runtime.GOMAXPROCS(n) 默认 -1
  31. keepalive: ## 客户端和peer间的网络心跳连接配置
  32.  
  33. minInterval: 60s ## 最小的心跳间隔时间
  34. client: ## 该节点和客户端 的交互配置
  35. interval: 60s ## 和客户端 的心跳间隔 必须 interval >= minInterval
  36. timeout: 20s ## 和客户端 间的网络连接超时时间
  37. deliveryClient: ## 交付客户端用于与订购节点通信的心跳
  38. interval: 60s
  39. timeout: 20s
  40. gossip: ## 节点间通信的gossip 协议的P2P通信 【主要包含了 启动 连接】
  41. bootstrap: 127.0.0.1:7051 ## 启动节点后 向哪些节点发起gossip连接,以加入网络,且节点相互间都是同一个组织的
  42. useLeaderElection: true ## 是否启动动态选举 组织的Leader 节点 orgLeader 互斥
  43. orgLeader: false ## 是否指定本节点为 组织Leader 节点 useLeaderElection 互斥
  44. endpoint: ## 本节点在组织内的gossip id
  45. maxBlockCountToStore: 100 ## 保存到内存的区块个数上限
  46. maxPropagationBurstLatency: 10ms ## 保存消息的最大时间,超过则触发转发给其他节点
  47. maxPropagationBurstSize: 10 ## 保存的最大消息个数,超过则触发转发给其他节点
  48. propagateIterations: 1 ## 消息转发的次数
  49. propagatePeerNum: 3 ## 推送消息给指定个数的节点
  50. pullInterval: 4s ## 拉取消息的时间间隔 (unit: second) 必须大于 digestWaitTime + responseWaitTime
  51. pullPeerNum: 3 ## 从指定个数的节点拉取消息
  52. requestStateInfoInterval: 4s ## 从节点拉取状态信息(StateInfo) 消息间隔 (unit: second)
  53. publishStateInfoInterval: 4s ## 向其他节点推动状态信息消息的间隔 (unit: second)
  54. stateInfoRetentionInterval: ## 状态信息消息的超时时间 (unit: second)
  55. publishCertPeriod: 10s ## 启动后在心跳消息中包括证书的等待时间
  56. skipBlockVerification: false ## 是否不对区块消息进行校验,默认为false
  57. dialTimeout: 3s ## gRPC 连接拨号的超时 (unit: second)
  58. connTimeout: 2s ## 建立连接的超时 (unit: second)
  59. recvBuffSize: 20 ## 收取消息的缓冲大小
  60. sendBuffSize: 200 ## 发送消息的缓冲大小
  61. digestWaitTime: 1s ## 处理摘要数据的等待时间 (unit: second) 可以大于 requestWaitTime
  62. requestWaitTime: 1500ms ## 处理nonce 数据的等待时间 (unit: milliseconds) 可以大于 digestWaitTime
  63. responseWaitTime: 2s ## 终止拉取数据处理的等待时间 (unit: second)
  64. aliveTimeInterval: 5s ## 定期发送Alive 心跳消息的时间间隔 (unit: second)
  65. aliveExpirationTimeout: 25s ## Alive 心跳消息的超时时间 (unit: second)
  66. reconnectInterval: 25s ## 断线后重连的时间间隔 (unit: second)
  67. externalEndpoint: ## 节点被组织外节点感知时的地址,公布给其他组织的地址和端口, 如果不指定, 其他组织将无法知道本peer的存在
  68. election: ## Leader 节点的选举配置
  69. startupGracePeriod: 15s ## leader节点选举等待的时间 (unit: second)
  70. membershipSampleInterval: 1s ## 测试peer稳定性的时间间隔 (unit: second)
  71. leaderAliveThreshold: 10s ## pear 尝试进行选举的等待超时 (unit: second)
  72. leaderElectionDuration: 5s ## pear 宣布自己为Leader节点的等待时间 (unit: second)
  73.  
  74. pvtData: ## 这个我还真不知道干嘛的?谁知道告诉我
  75. pullRetryThreshold: 60s
  76. transientstoreMaxBlockRetention: 1000
  77. pushAckTimeout: 3s
  78. btlPullMargin: 10
  79.  
  80.  
  81. events: ## 事件配置
  82. address: 0.0.0.0:7053 ## 本地服务监听地址 (默认在所有网络接口上进心监听,端口 7053)
  83. buffersize: 100 ## 最大缓冲消息数,超过则向缓冲中发送事件消息会被阻塞
  84. timeout: 10ms ## 事件发送超时时间, 如果事件缓存已满, timeout < 0, 事件被丢弃; timeout > 0, 阻塞直到超时丢弃, timeout = 0, 阻塞直到发送出去
  85. timewindow: 15m ## 允许peer 客户端 时间不一致的最大时间差
  86.  
  87. keepalive: ## 客户端到peer间的事件心跳
  88. minInterval: 60s
  89. sendTimeout: 60s ## GRPC流上向客户端发送事件的超时时间
  90.  
  91.  
  92. tls: ## tls配置
  93.  
  94. enabled: false ## 是否开启 TLS,默认不开启TLS
  95. clientAuthRequired: false ## 客户端连接到peer是否需要使用加密
  96.  
  97. cert: ## 证书密钥的位置, peer应该填写各自相应的路径
  98. file: tls/server.crt ## 本服务的身份验证证书,公开可见,访问者通过该证书进行验证
  99. key:
  100. file: tls/server.key ## 本服务的签名私钥
  101. rootcert:
  102. file: tls/ca.crt ## 信任的根CA整数位置
  103.  
  104. clientRootCAs: ## 用于验证客户端证书的根证书颁发机构的集合
  105. files:
  106. - tls/ca.crt
  107. clientKey: ## TLS密钥用于制作客户端连接。如果不设置,将使用而不是peer.tls.key.file
  108. file:
  109. clientCert: ## 在进行客户端连接时用于TLSX.509证书。 如果未设置,将使用peer.tls.cert.file
  110. file:
  111.  
  112. serverhostoverride: ## 是否制定进行TLS握手时的主机名称
  113.  
  114. authentication: ## 身份验证包含与验证客户端消息相关的配置参数
  115.  
  116. timewindow: 15m ## 客户端请求消息中指定的当前服务器时间与客户端时间之间的可接受差异
  117.  
  118. fileSystemPath: /var/hyperledger/production ## peer数据存储位置(包括账本,状态数据库等)
  119.  
  120.  
  121. BCCSP: ## 加密库配置 Orderer 配置一样
  122. Default: SW ## 使用软件加密方式 (默认 SW)
  123. SW:
  124. Hash: SHA2 ## Hash 算法类型,目前仅支持SHA2
  125. Security: 256
  126.  
  127. FileKeyStore: ## 本地私钥文件路径,默认指向 <mapConfigPath>/keystore
  128. KeyStore:
  129. # Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11)
  130. PKCS11: ## 设置 PKCS#11 加密算法 (默认PKCS11)
  131. Library: ## 本地PKCS11依赖库
  132.  
  133. Label: ## token的标识
  134. Pin: ## 使用Pin
  135. Hash:
  136. Security:
  137. FileKeyStore:
  138. KeyStore:
  139.  
  140. mspConfigPath: msp ## msp 的本地路径
  141.  
  142. localMspId: SampleOrg ## Peer 所关联的MSP ID
  143.  
  144. client: ## cli 公共客户端配置选项
  145. connTimeout: 3s ## 连接超时时间
  146.  
  147.  
  148. deliveryclient: ## 交付服务配置
  149. reconnectTotalTimeThreshold: 3600s ## 交付服务交付失败后尝试重连的时间
  150. connTimeout: 3s ## 交付服务和 orderer节点的连接超时时间
  151. reConnectBackoffThreshold: 3600s ## 设置连续重试之间的最大延迟
  152.  
  153. localMspType: bccsp ## 本地MSP类型 (默认为 BCCSP
  154.  
  155. profile: ## 是否启用Go自带的profiling 支持进行调试
  156. enabled: false
  157. listenAddress: 0.0.0.0:6060
  158.  
  159. adminService: ## admin服务用于管理操作,例如控制日志模块严重性等。只有对等管理员才能使用该服务
  160.  
  161. handlers:
  162. authFilters:
  163. -
  164. name: DefaultAuth
  165. -
  166. name: ExpirationCheck ## 此筛选器检查身份x509证书过期
  167. decorators:
  168. -
  169. name: DefaultDecorator
  170. endorsers:
  171. escc:
  172. name: DefaultEndorsement
  173. library:
  174. validators:
  175. vscc:
  176. name: DefaultValidation
  177. library:
  178. validatorPoolSize: ## 处理交易验证的并发数, 默认是CPU的核数
  179.  
  180. discovery: ## 客户端使用发现服务来查询有关peers的信息,例如 - 哪些peer已加入某个channel,最新的channel配置是什么,最重要的是 - 给定chaincodechannel,哪些可能的peer满足认可 policy
  181. enabled: true
  182. authCacheEnabled: true
  183. authCacheMaxSize: 1000
  184. authCachePurgeRetentionRatio: 0.75
  185. orgMembersAllowedAccess: false
  186. ###############################################################################
  187. #
  188. # VM section 链码运行环境配置 目前主要支持 Docker容器
  189. #
  190. ###############################################################################
  191. vm:
  192.  
  193. endpoint: unix:///var/run/docker.sock ## Docker Daemon 地址,默认是本地 套接字
  194.  
  195. docker:
  196. tls: ## Docker Daemon 启用TLS时的相关证书配置, 包括信任的根CA证书、服务身份证书、签名私钥等等
  197. enabled: false
  198. ca:
  199. file: docker/ca.crt
  200. cert:
  201. file: docker/tls.crt
  202. key:
  203. file: docker/tls.key
  204.  
  205. attachStdout: false ## 是否启用绑定到标准输出,启用后 链码容器 的输出消息会绑定到标准输出,方便进行调试
  206.  
  207. hostConfig: ## Docker 相关的主机配置,包括网络配置、日志、内存等等,这些配置在启动链码容器时进行使用
  208. NetworkMode: host
  209. Dns:
  210. # - 192.168.0.1
  211. LogConfig:
  212. Type: json-file
  213. Config:
  214. max-size: "50m"
  215. max-file: "5"
  216. Memory: 2147483648
  217.  
  218. ###############################################################################
  219. #
  220. # Chaincode section 链码相关配置
  221. #
  222. ###############################################################################
  223. chaincode:
  224.  
  225. id: ## 记录链码相关信息,包括路径、名称、版本等等,该信息会以标签形式写到链码容器
  226. path:
  227. name:
  228.  
  229. builder: $(DOCKER_NS)/fabric-ccenv:latest ## 通用的本地编译环境,是一个Docker 镜像
  230. pull: false ##
  231. golang: ## Go语言的链码部署生成镜像的基础Docker镜像
  232. runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
  233. dynamicLink: false
  234. car: ## car格式的链码部署生成镜像的基础Docker 镜像
  235. runtime: $(BASE_DOCKER_NS)/fabric-baseos:$(ARCH)-$(BASE_VERSION)
  236. java: ## java语言的基础镜像
  237. Dockerfile: |
  238. from $(DOCKER_NS)/fabric-javaenv:$(ARCH)-1.1.0
  239. node: ## node.js的基础镜像
  240. runtime: $(BASE_DOCKER_NS)/fabric-baseimage:$(ARCH)-$(BASE_VERSION)
  241.  
  242. startuptimeout: 300s ## 启动链码容器超时,等待超时时间后还没收到链码段的注册消息,则认为启动失败
  243.  
  244. executetimeout: 30s ## invoke initialize 命令执行超时时间
  245.  
  246. deploytimeout: ## 部署链码的命令执行超时时间
  247. mode: net ## 执行链码的模式,dev: 允许本地直接运行链码,方便调试; net: 意味着在容器中运行链码
  248. keepalive: 0 ## Peer 和链码之间的心跳超市时间, <= 0 意味着关闭
  249. system: ## 系统链码的相关配置 (系统链码白名单 ??)
  250. cscc: enable
  251. lscc: enable
  252. escc: enable
  253. vscc: enable
  254. qscc: enable
  255. systemPlugins: ## 系统链码插件
  256. logging: ## 链码容器日志相关配置
  257. level: info
  258. shim: warning
  259. format: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
  260.  
  261. ###############################################################################
  262. #
  263. # Ledger section - ledger configuration encompases both the blockchain
  264. # and the state 账本相关配置
  265. #
  266. ###############################################################################
  267. ledger:
  268. blockchain: ## 设置系统区块链的整体配置,【后面会被丢弃】
  269. state: ## 状态DB的相关配置(包括 golevelDBcouchDB)DN连接、查询最大返回记录数等
  270. stateDatabase: goleveldb ## stateDB的底层DB配置 (默认golevelDB)
  271. couchDBConfig: ## 如果启用couchdb,配置连接信息 (goleveldb 不需要配置这些)
  272. couchDBAddress: 127.0.0.1:5984
  273. username:
  274. o prevent unintended users from discovering the password.
  275. password:
  276. maxRetries: 3 ## 运行时出错重试数
  277. maxRetriesOnStartup: 10 ## 启动时出错的重试数
  278. requestTimeout: 35s ## 请求超时时间
  279. queryLimit: 10000 ## 每个查询最大返回数
  280. maxBatchUpdateSize: 1000 ## 批量更新最大记录数
  281. warmIndexesAfterNBlocks: 1
  282. history:
  283. enableHistoryDatabase: true ## 是否启用历史数据库,默认开启
  284.  
  285. ###############################################################################
  286. #
  287. # Metrics section 服务度量监控配置
  288. #
  289. #
  290. ###############################################################################
  291. metrics:
  292. enabled: false ## 是否开启监控服务
  293. reporter: statsd
  294. interval: 1s
  295. statsdReporter:
  296. address: 0.0.0.0:8125
  297. flushInterval: 2s
  298. flushBytes: 1432
  299. promReporter: ## prometheus 普罗米修斯服务监听地址
  300. listenAddress: 0.0.0.0:8080
  • Orderer 配置剖析

            在 fabric-samples/config 目录下有一个 orderer.yaml 文件 该文件就是 Orderer 节点的各项配置,其中主要包含了:General(日志)、 FileLedger(节点)、 RAMLedger(链码运行环境)、Kafka(链码相关) 等 4 大部分

文件内容及各项说明如下所示:

 
 
  1. ################################################################################
  2. #
  3. # Orderer Configuration orderer的配置
  4. #
  5. # - This controls the type and configuration of the orderer.
  6. #
  7. ################################################################################
  8. General:
  9. LedgerType: file ## 账本类型,支持ramjsonfile 三种类型【建议用file】,其中ram保存在内存中;jsonfile保存在本地文件中 (通常为 /var/hyperledger/production/orderer )
  10. ListenAddress: 127.0.0.1 ## 服务监听地址,一般需要制定为服务的特定网络接口地址 或者全网(0.0.0.0)
  11. ListenPort: 7050 ## 服务监听端口 默认7050
  12.  
  13.  
  14. TLS: ## 启用TLS 时的相关配置 (grpc 传输)
  15. Enabled: false
  16. PrivateKey: tls/server.key ## Orderer 签名私钥
  17. Certificate: tls/server.crt ## Orderer 身份证书
  18. RootCAs:
  19. - tls/ca.crt ## 根证书
  20. ClientAuthRequired: false ## 是否对客户端也进行认证
  21. ClientRootCAs:
  22.  
  23. Keepalive: ## 设置GRPC 服务心跳检查
  24. ServerMinInterval: 60s ## 客户端和 orderer 最小心跳间隔
  25. ServerInterval: 7200s ## 客户端和 orderer 的心跳间隔时间
  26. ServerTimeout: 20s ## 客户端和 Orderer 的超时时间
  27.  
  28. LogLevel: info ## 日志等级
  29.  
  30. ## 日志输出格式
  31. LogFormat: '%{color}%{time:2006-01-02 15:04:05.000 MST} [%{module}] %{shortfunc} -> %{level:.4s} %{id:03x}%{color:reset} %{message}'
  32.  
  33. GenesisMethod: provisional ## 创世块的提供方式 (系统通道初始区块的提供方式,支持 provisional 或者 file;前者根据GenesisProfile 指定默认的 $FABRIC_CFG_PATH/config.yaml 文件中的profile生成;后者使用GenesisFile 指定现成的初始区块文件)
  34.  
  35. GenesisProfile: SampleInsecureSolo ## 创世块使用的ProfileGenesisMethod: provisional 才有效
  36.  
  37. GenesisFile: genesisblock ## 使用现成创世块文件时,文件的路径 [创世块的位置] GenesisMethod: file 才有效
  38.  
  39. LocalMSPDir: msp ## 本地MSP文件的路径 orderer节点所需的安全认证文件的位置】
  40. LocalMSPID: SampleOrg ## Orderer所关联的MSPID MSP管理器用于注册安全认证文件的ID, ID必须与配置系统通道和创世区块时(configtx.yamlOrdererGenesis部分)指定的组织中的某一个组织的ID一致
  41.  
  42. Profile: ## Go pprof性能优化工具启用一个HTTP服务以便作性能分析(https://golang.org/pkg/net/http/pprof)
  43. Enabled: false ## 不启用
  44. Address: 0.0.0.0:6060 ## Go pprofHTTP服务监听的地址和端口
  45.  
  46. BCCSP: ## 加密库配置 具体参照Peer 配置
  47. Default: SW
  48. SW:
  49. Hash: SHA2
  50. Security: 256
  51. FileKeyStore:
  52. KeyStore:
  53. Authentication:
  54. TimeWindow: 15m
  55.  
  56. ################################################################################
  57. #
  58. # SECTION: File Ledger 基于文件账本 配置 (filejson两种类型)
  59. #
  60. # - This section applies to the configuration of the file or json ledgers.
  61. #
  62. ################################################################################
  63. FileLedger:
  64. Location: /var/hyperledger/production/orderer ## 指定存放文件的位置,一般为 /var/hyperledger/production/orderer, 该目录下的 chains目录存放各个chain的区块,index目录存放 索引文件 (如果这项不指定, 每次节点重启都将使用一个新的临时位置)
  65. Prefix: hyperledger-fabric-ordererledger ## 如果不指定Location,则在临时目录下创建账本时目录的名称
  66.  
  67. ################################################################################
  68. #
  69. # SECTION: RAM Ledger 基于内存账本 配置
  70. #
  71. # - This section applies to the configuration of the RAM ledger.
  72. #
  73. ################################################################################
  74. RAMLedger:
  75. HistorySize: 1000 ## 内存账本所支持存储的区块的数量, 如果内存中存储的区块达到上限, 继续追加区块会导致最旧的区块被丢弃
  76.  
  77. ################################################################################
  78. #
  79. # SECTION: Kafka kafka 集群配置
  80. #
  81. # - This section applies to the configuration of the Kafka-based orderer, and
  82. # its interaction with the Kafka cluster.
  83. #
  84. ################################################################################
  85. Kafka:
  86. # kafka是一种基于发布/订阅模式的分布式消息系统
  87. # fabric网络中, orderer节点集群组成kafka集群, 客户端是kafka集群的Producer(消息生产者), peerkafka集群的Consumer(消息消费者)
  88. # kafka集群使用ZooKeeper(分布式应用协调服务)管理集群节点, 选举leader.
  89. Retry: ## 连接时的充实操作 kafka 会利用 sarama 客户端为chennel创建一个producer 负责向kafka 写数据,一个comsumer负责kafka读数据
  90. ShortInterval: 5s ## 操作失败后的快速重试间隔时间
  91. ShortTotal: 10m ## 快速重试阶段最对重试多久
  92. LongInterval: 5m ## 快速充实阶段仍然失败后进入 慢重试阶段,慢重试的时间间隔
  93. LongTotal: 12h ## 慢重试最多重试多久
  94.  
  95. # https://godoc.org/github.com/Shopify/sarama#Config
  96. NetworkTimeouts: ## Sarama 网络超时时间
  97. DialTimeout: 10s
  98. ReadTimeout: 10s
  99. WriteTimeout: 10s
  100. Metadata: ## kafka集群leader 选举中的metadata 请求参数
  101. RetryBackoff: 250ms ## leader选举过程中元数据请求失败的重试间隔
  102. RetryMax: 3 ## 最大重试次数
  103. Producer: ## 发送消息到kafka集群时的超时
  104. RetryBackoff: 100ms ## kafka集群发送消息失败后的重试间隔
  105. RetryMax: 3 ## 最大重试次数
  106. Consumer: ## kafka集群接收消息时的超时
  107. RetryBackoff: 2s ## kafka集群拉取消息失败后的重试间隔
  108. Verbose: false ## 是否开启kafka的客户端的调试日志 (ordererkafka集群交互是否生成日)
  109.  
  110. TLS: ## kafka集群的连接启用TLS时的相关配置
  111. Enabled: false ## 是否开启TLS,默认不开启
  112. PrivateKey: ## Orderer 身份签名私钥
  113. # File: ## 私钥文件路径
  114. Certificate: ## kafka的身份证书
  115. # File: ## 证书文件路径
  116. RootCAs: ## 验证kafka证书时的根证书
  117. # File: ## 根证书文件路径
  118. Version: ## kafka的版本,默认为 0.9.0.1
  119.  
  120. ################################################################################
  121. #
  122. # Debug Configuration orderer节点的调试参数
  123. #
  124. # - This controls the debugging options for the orderer
  125. #
  126. ################################################################################
  127. Debug:
  128. BroadcastTraceDir: ## orderer节点的广播服务请求保存的位置
  129. DeliverTraceDir: ## orderer节点的传递服务请求保存的位置

         我们在【我的区块链之路】- Hyperledger fabric的简单入门(二)中已经知道,在启动网络前,我们需要做一些准备工作,例如: 先使用cryptogen工具及 crypto-config.yaml 配置文件,生成整个fabric网络的组织架构及对应的身份证书;在crypto-config.yaml 文件中我们定义了 整个fabric网络的组织结构,然后工具会根据定义的配置生成对应的组织结构及把对应的身份证书放置对应的目录下以便区分使用;

具体的 crypto-config.yaml 文件内容如下所示:

 
 
  1. OrdererOrgs: ## 定义Orderer组织结构
  2. - Name: Orderer ## Orderer的名称
  3. Domain: example.com ## 组织的命名域
  4. # ---------------------------------------------------------------------------
  5. # "Specs" - 有关完整说明,请参阅下面的PeerOrgs
  6. # ---------------------------------------------------------------------------
  7. Specs:
  8. - Hostname: orderer
  9. # ---------------------------------------------------------------------------
  10. # "PeerOrgs" - 管理Peer节点的组织的定义
  11. # ---------------------------------------------------------------------------
  12. PeerOrgs:
  13. - Name: Org1 ## 组织名称 组织 1
  14. Domain: org1.example.com ## 组织域
  15. EnableNodeOUs: true ## 如果设置了EnableNodeOUs,就在msp下生成config.yaml文件
  16. Template: ## 允许定义从模板顺序创建的1个或多个主机。 默认情况下,这看起来像是从0Count-1“peer” 您可以覆盖节点数(Count),起始索引(Start)或用于构造名称的模板(Hostname)。
  17. Count: 2 ## 表示生成几个Peer
  18. # Start: 5
  19. # Hostname: {{.Prefix}}{{.Index}} # default
  20. # ---------------------------------------------------------------------------
  21. # "Users"
  22. # ---------------------------------------------------------------------------
  23. # Count: Admin之外的用户帐户数量
  24. # ---------------------------------------------------------------------------
  25. Users:
  26. Count: 1 ## 表示生成几个 普通User
  27. # ---------------------------------------------------------------------------
  28. # Org2: 参照 组织 1
  29. # ---------------------------------------------------------------------------
  30. - Name: Org2
  31. Domain: org2.example.com
  32. EnableNodeOUs: true
  33. Template:
  34. Count: 2
  35. Users:
  36. Count: 1

紧接着我们就可以使用命令来生成我们的组织结构及对应目录下的身份证书了:

cryptogen generate --config=./crypto-config.yaml

上述命令默认会在当前目录生成一个名叫  crypto-config 目录,当然也可以在命令中添加  --output 选项来指定输出的目录;在这个目录下就会根据Orderer 和Peer 各自生成两个 文件夹: ordererOrganizations 和 peerOrganizations 分别代表着Orderer 和Peer的组织及对应目录下的证书文件;每个组织树下都有ca、msp、orderers(或者Peers)、users 等4个目录;下面我们来详细的说明下这两个组织下都是些什么:

 
 
  1. . ## Orderer 组织配置
  2. ├── ordererOrganizations
  3.    └── example.com
  4.    ├── ca ## 存放组织根证书 私钥 (采用EC算法) 证书为【自签名】,组织内的实体将给予该根证书作为证书根
  5.       ├── 56d9c0c46acdda38a174a5ba3ffc44726a2c027e16bb22b460413acbcb9b3a90_sk
  6.       └── ca.example.com-cert.pem
  7.    ├── msp ## 存放该组织身份信息
  8.       ├── admincerts ## 组织管理员 身份验证证书,【被根证书签名】
  9.          └── Admin@example.com-cert.pem
  10.       ├── cacerts ## 组织的根证书 【和CA目录 里面一致】
  11.          └── ca.example.com-cert.pem
  12.       └── tlscacerts ## 用于TLSCA证书, 【自签名】
  13.       └── tlsca.example.com-cert.pem
  14.    ├── orderers ## 存放所有 Orderer 的身份信息
  15.       └── orderer.example.com ## 第一个 Orderer 的信息 msp tls
  16.       ├── msp
  17.        
  18.          ├── admincerts ## 组织管理员的身份验证证书。Peer将给予这些证书来确认交易签名是否为管理员签名 【和MSP.admincerts 一致】
  19.          
  20.             └── Admin@example.com-cert.pem
  21.        
  22.          ├── cacerts
  23.          
  24.             └── ca.example.com-cert.pem ## 存放组织根证书,【和CA目录 里面一致】
  25.        
  26.          ├── keystore ## 本节点的身份私钥,用来签名
  27.          
  28.             └── 2ec1193fe048848eaa8e20666e26c527b791c4fb127d69cae65095bd31b6c80e_sk
  29.        
  30.          ├── signcerts ## 验证本节点签名的证书,【被根证书签名】
  31.          
  32.             └── orderer.example.com-cert.pem
  33.        
  34.          └── tlscacerts ## TLS连接用的身份证书, 【和msp.tlscacerts 一致】
  35.        
  36.          └── tlsca.example.com-cert.pem
  37.      
  38.       └── tls ## tls 的相关信息
  39.       ├── ca.crt ## 【组织的根证书】
  40.       ├── server.crt ## 验证本节点签名的证书, 【被根证书签名】
  41.       └── server.key ## 本节点的身份私钥,用来签名
  42.    
  43.    ├── tlsca ## 存放tls相关的证书和私钥
  44.      
  45.       ├── 2d66be83c519da67bb36b0972256a3b24357fa7f5b3a61f11405bc8b1f4d7c53_sk
  46.      
  47.       └── tlsca.example.com-cert.pem
  48.    
  49.    └── users ## 存放属于该组织的用户的实体
  50.    
  51.    └── Admin@example.com ## 管理员用户的信息,其中包括msp证书和tls证书两类
  52.    
  53.    ├── msp
  54.      
  55.       ├── admincerts ## 组织根证书作为管理员身份验证证书,【和MSP.admincerts 一致】
  56.        
  57.          └── Admin@example.com-cert.pem
  58.      
  59.       ├── cacerts ## 存放组织的根证书,【和CA目录 里面一致】
  60.        
  61.          └── ca.example.com-cert.pem
  62.      
  63.       ├── keystore ## 本用户的身份私钥,用来签名
  64.        
  65.          └── a3c1d7e1bc464faf2e3a205cb76ea231bd3ee7010655d3cd31dc6cb78726c4d0_sk
  66.      
  67.       ├── signcerts ## 管理员用户的身份验证证书,被组织根证书签名。要被某个Orderer认可,则必须放到该 Orderer msp/admincerts目录下
  68.        
  69.          └── Admin@example.com-cert.pem
  70.      
  71.       └── tlscacerts ## TLS连接用的身份证书,即组织TLS证书,【和msp.tlscacerts 一致】
  72.      
  73.       └── tlsca.example.com-cert.pem
  74.    
  75.    
  76.    └── tls ## tls 的相关信息
  77.    ├── ca.crt
  78.    ├── client.crt ## 管理员的身份验证证书,【被 组织根证书签名】
  79.    └── client.key ## 管理员的身份私钥,用来签名
  80.  
  81.  
  82.  
  83.   ## Peer 组织配置
  84. └── peerOrganizations
  85.  
  86. ├── org1.example.com ## 第一个组织的所有身份证书
  87.    
  88.    ├── ca ## 存放组织根证书及私钥 (采用EC算法) 证书为【自签名】,组织内的实体将给予该根证书作为证书根
  89.      
  90.       ├── 496d6a41ae5f66bf120df3eab3a9d2dc4d268b2ab9a22af891d33d323bbdb5c8_sk
  91.      
  92.       └── ca.org1.example.com-cert.pem
  93.    
  94.    ├── msp ## 存放该组织身份信息
  95.      
  96.       ├── admincerts ## 组织管理员 身份验证证书,【被根证书签名】
  97.        
  98.          └── Admin@org1.example.com-cert.pem
  99.      
  100.       ├── cacerts ## 组织的根证书 【和CA目录 里面一致】
  101.        
  102.          └── ca.org1.example.com-cert.pem
  103.      
  104.       ├── config.yaml ## 记录 OrganizationalUnitIdentitifiers 信息,包括 根证书位置 ID信息 (主要是 crypto-config.yaml peer配置中配了 EnableNodeOUs: true 如果设置了EnableNodeOUs,就在msp下生成config.yaml文件)
  105.      
  106.       └── tlscacerts ## 用于TLSCA证书, 【自签名】
  107.      
  108.       └── tlsca.org1.example.com-cert.pem
  109.    
  110.    
  111.    ├── peers ## 存放所有 Peer 的身份信息
  112.      
  113.       ├── peer0.org1.example.com ## 第一个Peer的信息 msp tls
  114.        
  115.          ├── msp
  116.          
  117.             ├── admincerts ## 组织管理员的身份验证证书。Peer将给予这些证书来确认交易签名是否为管理员签名 【和MSP.admincerts 一致】
  118.            
  119.                └── Admin@org1.example.com-cert.pem
  120.          
  121.             ├── cacerts ## 存放组织根证书,【和CA目录 里面一致】
  122.            
  123.                └── ca.org1.example.com-cert.pem
  124.          
  125.             ├── config.yaml
  126.          
  127.             ├── keystore ## 本节点的身份私钥,用来签名
  128.            
  129.                └── 0f0c2e1835086161f6a10c4bb38c2d89b2cee4e1128cee0fcda4433feb6eb6f8_sk
  130.          
  131.          
  132.             ├── signcerts ## 验证本节点签名的证书,【被根证书签名】
  133.            
  134.                └── peer0.org1.example.com-cert.pem
  135.          
  136.             └── tlscacerts ## TLS连接用的身份证书, 【和msp.tlscacerts 一致】
  137.          
  138.             └── tlsca.org1.example.com-cert.pem
  139.        
  140.        
  141.          └──tls ## tls 的相关信息
  142.          ├── ca.crt ## 【组织的根证书】
  143.          ├── server.crt ## 验证本节点签名的证书, 【被根证书签名】
  144.          └── server.key ## 本节点的身份私钥,用来签名
  145.      
  146.      
  147.       └── peer1.org1.example.com
  148.   
  149.   
  150.   
  151.      
  152.    ├── tlsca ## 存放tls相关的证书和私钥
  153.      
  154.       ├── 3d39ea82dd5343c261b0480bc13d645a3cee13b7e7aa8c54fd2b5162f709671f_sk
  155.       └── tlsca.org1.example.com-cert.pem
  156.   
  157.   
  158.    
  159.    └── users ## 存放属于该组织的用户的实体
  160.    
  161.    ├── Admin@org1.example.com ## 管理员用户的信息,其中包括msp证书和tls证书两类
  162.      
  163.       ├── msp
  164.        
  165.          ├── admincerts ## 组织根证书作为管理员身份验证证书,【和MSP.admincerts 一致】
  166.          
  167.             └── Admin@org1.example.com-cert.pem
  168.        
  169.          ├── cacerts ## 存放组织的根证书,【和CA目录 里面一致】
  170.          
  171.             └── ca.org1.example.com-cert.pem
  172.        
  173.          ├── keystore ## 本用户的身份私钥,用来签名
  174.          
  175.             └── 2b933c0740d857284be98ff218bf279261e55eff2b89d973e0a1f435f7c7d28b_sk
  176.        
  177.          ├── signcerts ## 管理员用户的身份验证证书,被组织根证书签名。要被某个Peer认可,则必须放到该Peermsp/admincerts目录下
  178.          
  179.             └── Admin@org1.example.com-cert.pem
  180.        
  181.          └── tlscacerts ## TLS连接用的身份证书,即组织TLS证书,【和msp.tlscacerts 一致】
  182.        
  183.          └── tlsca.org1.example.com-cert.pem
  184.      
  185.       └── tls ## tls 的相关信息
  186.       ├── ca.crt
  187.       ├── client.crt ## 管理员的身份验证证书,【被 组织根证书签名】
  188.       └── client.key ## 管理员的身份私钥,用来签名
  189.   
  190.   
  191.    └── User1@org1.example.com
  192.    ├── msp
  193.       ├── admincerts ## 组织根证书作为管理员身份验证证书
  194.          └── User1@org1.example.com-cert.pem
  195.       ├── cacerts ## 存放组织的根证书,【和CA目录 里面一致】
  196.          └── ca.org1.example.com-cert.pem
  197.       ├── keystore ## 【参考admin
  198.          └── 11ebc5afac42348f84a8882f329d18beee079efd4fd5d9b30389dc82053fc0c9_sk
  199.       ├── signcerts ## 【参考admin
  200.          └── User1@org1.example.com-cert.pem
  201.       └── tlscacerts ## 【参考admin
  202.       └── tlsca.org1.example.com-cert.pem
  203.    └── tls ## 【参考admin
  204.    ├── ca.crt
  205.    ├── client.crt
  206.    └── client.key
  207. └── org2.example.com

我们可以知道 cryptogen 工具无非就是在各个资源下生成 组织 和 私钥、证书等等,其中最关键的就是 各个资源下的MSP 目录内容:

  1.  admincerts: 管理员的身份证书文件
  2. cacerts:        信任的根证书文件
  3. keystore:      节点的签名私钥文件
  4. signcerts:     节点的签名身份证书文件
  5. tlscacerts:    TLS连接用的证书

等等 5 种文件

  • 通道及锚节点的配置  configtx.yaml 配置剖析

         在上一篇文章中我们知道在启动网络之前我们需要做一些准备工作,上面我们已经使用 cryptogen 工具生成了 组织的结构及对应的 身份证书等等。现在我们需要使用 configtxgen 这个工具并使用 在 fabric-samples/config 目录下的 configtx.yaml 这个核心配置文件用来做三件事:【1】生成启动 Orderer 需要的创世块;【2】创建应用通道的 配置交易文件;【3】生成组织锚节点更新配置交易文件  ;在 configtx.yaml 配置中主要包括:Profiles、Organizations、Orderer、Application 等等 4 部分;

具体的 configtx.yaml 内容如下所示:

 
 
  1. ## 一些列组织的定义,【被其他 部分引用】
  2. ##
  3. ## 【注意】:本文件中 &KEY 均为 *KEY 所引用; xx&KEY 均为 <<: *KEY 所引用
  4. ##
  5. Organizations:
  6.  
  7. ## 定义Orderer组织 &OrdererOrg 这类语法类似 Go的中的指针及对象地址, 此处是被Profiles 中的 - *OrdererOrg 所引用,以下均为类似做法】
  8. - &OrdererOrg
  9.  
  10. Name: OrdererOrg ## Orderer的组织的名称
  11.  
  12. ID: OrdererMSP ## Orderer 组织的ID ID是引用组织的关键)
  13.  
  14. MSPDir: crypto-config/ordererOrganizations/example.com/msp ## Orderer MSP 证书目录路径
  15.  
  16. AdminPrincipal: Role.ADMIN ## 【可选项】 组织管理员所需要的身份,可选项: Role.ADMIN Role.MEMBER
  17.  
  18. ## 定义Peer组织 1
  19. - &Org1
  20. Name: Org1MSP ## 组织名称
  21.  
  22. ID: Org1MSP ## 组织ID
  23.  
  24. MSPDir: crypto-config/peerOrganizations/org1.example.com/msp ## PeerMSP 证书目录路径
  25.  
  26. AnchorPeers: ## 定义组织锚节点 用于跨组织 Gossip 通信
  27. - Host: peer0.org1.example.com ## 锚节点的主机名
  28. Port: 7051 ## 锚节点的端口号
  29.  
  30. ## 定义Peer组织 2
  31. - &Org2
  32. Name: Org2MSP
  33. ID: Org2MSP
  34. MSPDir: crypto-config/peerOrganizations/org2.example.com/msp
  35. AnchorPeers:
  36. - Host: peer0.org2.example.com
  37. Port: 7051
  38.  
  39. ################################################################################
  40. #
  41. # SECTION: Capabilities 【注意】: 该部分是 V1.1.0 版本提出来的, 不可以在更早的版本中使用
  42. #
  43. # - 本节定义了 fabric 网络的功能. 这是v1.1.0中的一个新概念,不应在v1.0.xpeerorderers中使用.
  44. # Capabilities 定义了存在于结构二进制文件中的功能,以便该二进制文件安全地参与结构网络.
  45. # 例如,如果添加了新的MSP类型,则较新的二进制文件可能会识别并验证此类型的签名,而没有此支持的旧二进制文件将无法验证这些事务.
  46. # 这可能导致具有不同世界状态的不同版本的结构二进制文件。 相反,为通道定义功能会通知那些没有此功能的二进制文件,
  47. # 它们必须在升级之前停止处理事务. 对于v1.0.x,如果定义了任何功能(包括关闭所有功能的配置),那么v1.0.xpeer 会主动崩溃.
  48. #
  49. ################################################################################
  50. Capabilities:
  51. ## 通道功能适用于orderers and the peers,并且必须得到两者的支持。 将功能的值设置为true.
  52. Global: &ChannelCapabilities
  53. ## V1.1 Global是一个行为标记,已被确定为运行v1.0.x的所有ordererspeers的行为,但其修改会导致不兼容。 用户应将此标志设置为true.
  54. V1_1: true
  55.  
  56. ## Orderer功能仅适用于orderers,可以安全地操纵,而无需担心升级peers 将功能的值设置为true
  57. Orderer: &OrdererCapabilities
  58. ## Orderer V1.1是行为的一个标记,已经确定为运行v1.0.x的所有orderers 都需要,但其修改会导致不兼容。 用户应将此标志设置为true
  59. V1_1: true
  60.  
  61. ## 应用程序功能仅适用于Peer 网络,可以安全地操作,而无需担心升级或更新orderers 将功能的值设置为true
  62. Application: &ApplicationCapabilities
  63. ## V1.2 for Application是一个行为标记,已被确定为运行v1.0.x的所有peers所需的行为,但其修改会导致不兼容。 用户应将此标志设置为true
  64. V1_2: true
  65.  
  66.  
  67.  
  68.  
  69.  
  70.  
  71.  
  72. ################################################################################
  73. #
  74. # SECTION: Application
  75. #
  76. # - 应用通道相关配置,主要包括 参与应用网络的可用组织信息
  77. #
  78. ################################################################################
  79. Application: &ApplicationDefaults ## 自定义被引用的地址
  80.  
  81. Organizations: ## 加入通道的组织信息
  82.  
  83.  
  84.  
  85.  
  86. ################################################################################
  87. #
  88. # SECTION: Orderer
  89. #
  90. # - Orderer 系统通道相关配置,包括 Orderer 服务配置和参与Orderer 服务的可用组织
  91. #
  92. # Orderer 默认是 solo 且不包含任何组织 【主要被 Profiles 部分引用】
  93. ################################################################################
  94. Orderer: &OrdererDefaults ## 自定义被引用的地址
  95.  
  96. OrdererType: solo ## Orderer 类型,包含 solo kafka 集群
  97.  
  98. Addresses: ## 服务地址
  99. - orderer.example.com:7050
  100.  
  101. BatchTimeout: 2s ## 区块打包的最大超时时间 (到了该时间就打包区块)
  102.  
  103. BatchSize: ## 区块打包的最大包含交易数
  104.  
  105. MaxMessageCount: 10 ## 一个区块里最大的交易数
  106. AbsoluteMaxBytes: 99 MB ## 一个区块的最大字节数, 任何时候都不能超过
  107. PreferredMaxBytes: 512 KB ## 一个区块的建议字节数,如果一个交易消息的大小超过了这个值, 就会被放入另外一个更大的区块中
  108.  
  109. MaxChannels: 0 ## 【可选项】 表示Orderer 允许的最大通道数, 默认 0 表示没有最大通道数
  110.  
  111. Kafka:
  112. Brokers: ## kafka brokens 服务地址 允许有多个
  113. - 127.0.0.1:9092
  114.  
  115. Organizations: ## 参与维护 Orderer 的组织,默认为空
  116.  
  117.  
  118.  
  119.  
  120.  
  121.  
  122.  
  123. ################################################################################
  124. #
  125. # Profile
  126. #
  127. # - 一系列通道配置模板,包括Orderer 系统通道模板 应用通道类型模板
  128. #
  129. ################################################################################
  130. Profiles:
  131.  
  132. ## Orderer 系统通道模板 必须包括 Orderer Consortiums 两部分
  133. TwoOrgsOrdererGenesis: ## Orderer 系统的通道及创世块配置。通道为默认配置,添加一个OrdererOrg 组织, 联盟为默认的 SampleConsortium 联盟,添加了两个组织 【该名称可以自定义 ??】
  134. Capabilities:
  135. <<: *ChannelCapabilities
  136.  
  137. Orderer: ## 指定Orderer系统通道自身的配置信息
  138. <<: *OrdererDefaults ## 引用 Orderer 部分的配置 &OrdererDefaults
  139. Organizations:
  140. - *OrdererOrg ## 属于Orderer 的通道组织 该处引用了 &OrdererOrg 】位置内容
  141. Capabilities:
  142. <<: *OrdererCapabilities
  143.  
  144. Consortiums: ## Orderer 所服务的联盟列表
  145. SampleConsortium: ## 创建更多应用通道时的联盟 引用 TwoOrgsChannel 所示
  146. Organizations:
  147. - *Org1
  148. - *Org2
  149.  
  150. ## 应用通道模板 必须包括 Application Consortium 两部分
  151. TwoOrgsChannel: ## 应用通道配置。默认配置的应用通道,添加了两个组织。联盟为SampleConsortium
  152. Consortium: SampleConsortium ## 通道所关联的联盟名称
  153. Application: ## 指定属于某应用通道的信息,主要包括 属于通道的组织信息
  154. <<: *ApplicationDefaults
  155. Organizations: ## 初始 加入应用通道的组织
  156. - *Org1
  157. - *Org2
  158. Capabilities:
  159. <<: *ApplicationCapabilities

写的是真的累了;好了,到这里我们大致上对Fabric网络的几个主要配置做了讲解,后续我们还会讲解Fabric-CA及往正在运行的fabric网络动态添加新的组织及通道的操作哈~

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值