1. 简介
orderer.yaml主要是为Orderer服务提供一些配置定义,与Peer服务类似,当Orderer节点启动时,会先从命令行获取参数、环境变量、和Orderer.yaml读取配置信息。通过docker去搭建一个Orderer服务,命令行默认是不带参数的,主要通过docker-compose 文件和orderer.yaml 去定义配置信息。docker-compose相当于环境变量,其优先级比较高,用来更灵活和个性化配置Orderer服务的配置。
2. 官方orderer.yaml学习
core.yaml主要包括General、FileLedger、Kafka、Debug、Operation、Metrics和Consensus八大部分。
2.1 General部分
peer部分保护与服务直接相关的核心配置
General:
# 服务绑定的监听地址和端口
ListenAddress: 127.0.0.1
ListenPort: 7050
# TLS设置 相关文件路径可以是绝对路径,或者是相对配置目录的相对路路径
TLS:
Enabled: false
# 提供 TLS CA 为此节点生成的私钥的路径和文件名
PrivateKey: tls/server.key
# 提供 TLS CA 为该节点生成的公共证书(也称为签名证书)的路径和文件名
Certificate: tls/server.crt
# (应注释掉)此参数通常未设置以供正常使用。
# 它是附加根证书的路径列表,用于在出站连接期间验证其他排序节点的证书。
# 它可用于扩充每个通道配置的 MSP 中可用的 TLS CA 证书集。
# 可信任的根CA证书
RootCAs:
- tls/ca.crt
#入站连接需要客户端证书/双向TLS。
ClientAuthRequired: false
#如果启用了双向TLS,ClientRootCA将包含其他根证书列表用于验证客户端连接的证书。
#它不需要设置,但可以用于扩充TLS CA证书集可从每个信道配置的MSP获得。
ClientRootCAs:
# 服务的保活设置
Keepalive:
# 客户机ping之间的最小允许时间(除非通过测试确定有必要,否则不应覆盖默认值)
ServerMinInterval: 60s
# 连接到客户机的ping之间的时间
ServerInterval: 7200s
# 服务器等待响应的超时时间
ServerTimeout: 20s
#由于所有节点应保持一致,建议MaxRecvMsgSize和MaxSendMsgSize的默认值保持为100MB
#GRPC服务器和客户端可以接收的最大消息大小(字节)
MaxRecvMsgSize: 104857600
# Max message size in bytes the GRPC server and client can send
# GRPC服务器和客户端可以发送的最大消息大小(字节)
MaxSendMsgSize: 104857600
# Raft模式下相关配置
Cluster:
# SendBufferSize 是缓冲区中的最大消息数。
# 如果缓冲区已满,共识消息将被丢弃,交易消息就会被等待去释放。
SendBufferSize: 10
# 双向TLS认证时,作为客户端证书的文件路径
ClientCertificate:
# 双向TLS认证时,作为客户端私钥的文件路径
ClientPrivateKey:
# 以下4个属性要么一起设置,要么一起取消设置。
# 如果设置了它们,那么order节点将使用单独的侦听器进行集群内通信。
# 如果它们未设置,则使用常规Order侦听器。
# 如果希望在面向客户机的侦听器和集群内侦听器上使用不同的TLS服务器证书,这非常有用。
# 定义群集侦听连接的端口
ListenPort:
ListenAddress:
# 定义用于侦听集群内通信的IP
# 双向TLS时候,服务端的TLS证书的文件位置
ServerCertificate:
# 双向TLS时候,服务端的TLS密钥的文件位置
ServerPrivateKey:
# Bootstrap method: 指定获取引导块系统通道的方法。
# "file" - 包含文件块或系统通道的Config块的文件路径
# "none" - 允许订购器启动,而无需系统频道配置
# 无系统通道必须为none
BootstrapMethod: file
# 在版本2.3版本以上,启用无配置通道,不需要填写
BootstrapFile:
# 排序节点的本地 MSP 的路径,必须在部署之前创建
LocalMSPDir: msp
# MSPID
LocalMSPID: SampleOrg
# Enable an HTTP service for Go "pprof" profiling as documented at:
# https://golang.org/pkg/net/http/pprof
# 开启影响性能
Profile:
Enabled: false
Address: 0.0.0.0:6060
# BCCSP配置BlockChain Crypto服务提供商。 无需关注
BCCSP:
# - SW: a software based crypto provider SW: 一种基于软件加密提供程序
# - PKCS11: a CA hardware security module crypto provider. 硬件加密
Default: SW
# SW configures the software based blockchain crypto provider.
SW:
Hash: SHA2
Security: 256
FileKeyStore:
KeyStore:
# Settings for the PKCS#11 crypto provider (i.e. when DEFAULT: PKCS11)
PKCS11:
# Location of the PKCS11 module library
Library:
# Token Label
Label:
# User PIN
Pin:
Hash:
Security:
FileKeyStore:
KeyStore:
# 与客户端消息认证相关的配置
Authentication:
# 客户端和服务器时间差异范围
TimeWindow: 15m
2.2 FileLedger部分
指定使用基于文件的账本类型时的相关配置
FileLedger:
# 区块存储路径
Location: /var/hyperledger/production/orderer
2.3 Kafka部分
Kafka:
# Kafka未准备时,orderer的重试配置
Retry:
#创建新通道时,或重新加载现有通道时(对于刚刚重新启动的订购者),订购者将通过以下方式与Kafka集群交互:
#1.它为对应于频道的Kafka分区创建一个Kafka制作人(作家)。
#2.它使用该生产者向该分区发布no-op CONNECT消息
#3.它为该分区创建一个Kafka消费者(读取器)。如果这些步骤中的任何一个失败,将每隔
#<ShortInterval>总共<ShortTotal>,然后每隔
#<LongInterval>,总计<LongTotal>,直到成功。
#请注意,在成功完成上述所有步骤之前,订购者将无法写入或读取通道。
ShortInterval: 5s # 重试时间间隔
ShortTotal: 10m # 重试的总时间
LongInterval: 5m # 重试失败后再次发送重试的时间间隔
LongTotal: 12h # 重试的最长总时间
# https://godoc.org/github.com/Shopify/sarama#Config
# sarama网络超时设置
NetworkTimeouts:
DialTimeout: 10s
ReadTimeout: 10s
WriteTimeout: 10s
# https://godoc.org/github.com/Shopify/sarama#Config
# kafka leader 选取配置
Metadata:
RetryBackoff: 250ms
RetryMax: 3
# https://godoc.org/github.com/Shopify/sarama#Config
# 向kafka发送消息的设置
Producer:
RetryBackoff: 100ms
RetryMax: 3
# https://godoc.org/github.com/Shopify/sarama#Config
# 从kafka读取消息的设置
Consumer:
RetryBackoff: 2s
Topic:
# 备份数量
ReplicationFactor: 3
# 与kafka 交互 日志是否启用
Verbose: false
# Orderer连接到Kafka集群的TLS设置
TLS:
Enabled: false
# orderer证明身份用的签名密钥
PrivateKey:
# As an alternative to specifying the PrivateKey here, uncomment the
# following "File" key and specify the file name from which to load the
# value of PrivateKey.
#File: path/to/PrivateKey
# kafka 身份证书
Certificate:
# As an alternative to specifying the Certificate here, uncomment the
# following "File" key and specify the file name from which to load the
# value of Certificate.
#File: path/to/Certificate
# 验证kafaka侧证书时的根CA证书
RootCAs:
# As an alternative to specifying the RootCAs here, uncomment the
# following "File" key and specify the file name from which to load the
# value of RootCAs.
#File: path/to/RootCAs
# 采用SASL/Plain 协议进行认证的相关配置
SASLPlain:
Enabled: false
User:
Password:
# kafka版本号 defaults to 0.10.2.0
Version:
2.4 Debug部分
Debug:
# 广播请求的追踪路径 日志路径
BroadcastTraceDir:
# 交付请求的追踪路径 日志路径
DeliverTraceDir:
2.5 operations部分
该部分主要设置运行时对外的RESTful管理服务。
Operations:
# RESTful管理服务的监听地址,需要指定为特定网口地址
ListenAddress: 127.0.0.1:8443
# 接口的TLS相关设置
TLS:
# TLS enabled
Enabled: false
# 服务端使用证书文件路径
Certificate:
# 服务端使用私钥文件路径
PrivateKey:
# 是否开始客户端验证
ClientAuthRequired: false
# 信任的客户端根证书列表
ClientRootCAs: []
2.6 metrics部分
metrics部分负责配置统计服务,和Peer类似。
metrics:
# metrics provider is one of statsd, prometheus, or disabled
# metrics provider是 statsd(推送模式)、prometheus(拉取模式) 或 disabled 之一
provider: disabled
statsd:
# 网络类型:tcp 或 udp
network: udp
# 修改为外部statsd的服务地址
address: 127.0.0.1:8125
# 地缓存的计数器和仪表被推送到 statsd 的时间间隔
writeInterval: 10s
# 统计推送的前缀
prefix:
2.7 Admin部分
Admin 为orderer配置管理服务器端点
Admin:
# 可以使用的 orderer 管理服务器地址(主机和端口)
ListenAddress: 127.0.0.1:9443
TLS:
# TLS enabled
Enabled: false
# TLS CA 颁发的 orderer 签名证书的路径和文件名。
Certificate:
# TLS CA 发布的 orderer 私钥的路径和文件名。
PrivateKey:
# 此值必须设置为true。
# 请注意,虽然 ordererAdmin端点上的所有操作都需要双向 TLS,
# 但整个网络不需要使用双向 TLS。
ClientAuthRequired: true
# 管理客户端 TLS CA 根证书的路径和文件名
ClientRootCAs: []
2.8 ChannelParticipation部分
Admin 为orderer提供了通道参与API配置, 通道参与使用管理服务的ListenAddress和TLS设置。
ChannelParticipation:
# Channel participation API is enabled.
# 启用通道参与API
Enabled: false
# The maximum size of the request body when joining a channel.
# 加入通道时请求主体的最大大小
MaxRequestBodySize: 1 MB
2.9 Consensus部分
共识的日志存储配置
Consensus:
#这里允许的键值对取决于共识插件。对于etcd/raft,我们使用以下选项:
# 预写日志的路径,每个通道独占一个同名的子目录
WALDir: /var/hyperledger/production/orderer/etcdraft/wal
# 快照文件的路径
SnapDir: /var/hyperledger/production/orderer/etcdraft/snapshot
3. freerent orderer.yaml配置
3.1 core.yaml
基础环境针对于官方示例配置,无任何修改,所有配置条目均在compose
3.2 compose中orderer环境变量配置
以orderer0 为例,完整docker-compose文件看后续章节
扫描二维码关注公众号,回复:
14650583 查看本文章
orderer0:
image: "${PRIVATE_REGISTRY_URL}/fabric-orderer:${FABRIC_TAG}"
hostname: orderer0.freerent.cn
environment:
- FABRIC_LOGGING_SPEC=INFO # DEBUG
# General 基础部分
- ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
- ORDERER_GENERAL_LISTENPORT=7050
- ORDERER_GENERAL_BOOTSTRAPMETHOD=none #无系统通道启动方式
- ORDERER_GENERAL_LOCALMSPID=OrdererMSP
- ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
# General TLS部分
- ORDERER_GENERAL_TLS_ENABLED=true
- ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
# General CLUSTER部分 Raft模式下相关配置
# 双向TLS认证时,作为客户端证书的文件路径
- ORDERER_GENERAL_CLUSTER_CLIENTCERTIFICATE=/var/hyperledger/orderer/tls/server.crt
# 双向TLS认证时,作为客户端私钥的文件路径
- ORDERER_GENERAL_CLUSTER_CLIENTPRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_GENERAL_CLUSTER_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
# FileLedger 部分
# Kafka 部分
# Debug 部分
# operations 部分
- ORDERER_OPERATIONS_LISTENADDRESS=0.0.0.0:8443
# metrics 部分
- ORDERER_METRICS_PROVIDER=prometheus
# Admin 部分
- ORDERER_ADMIN_TLS_ENABLED=true
- ORDERER_ADMIN_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
- ORDERER_ADMIN_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
- ORDERER_ADMIN_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
- ORDERER_ADMIN_TLS_CLIENTROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
- ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:7060
# ChannelParticipation 部分
- ORDERER_CHANNELPARTICIPATION_ENABLED=true
# Consensus 部分