Hyperledger Fabric添加Orderer至通道失败:请求体过大
Hyperledger Fabric 执行
osnadmin channel join时请求体过大错误 问题场景
已成功生成通道创世块,但执行Orderer加入通道命令时,收到请求体过大的错误提示,调整GRPC_MAX_RECV_MSG_SIZE参数、升级Fabric版本均未解决问题。
执行命令
生成通道创世块
configtxgen \ -profile ${CHANNEL_PROFILE} \ -configPath ./artifacts/config \ -outputBlock artifacts/channels/${CHANNEL_NAME}/${CHANNEL_NAME}.block \ -channelID ${CHANNEL_NAME}
加入通道命令
osnadmin channel join \ --channelID=telemetry \ --config-block ./artifacts/channels/telemetry/telemetry.block \ -o localhost:7055 \ --ca-file ${CA_FILE} \ --client-cert ${CLIENT_CERT} \ --client-key ${CLIENT_KEY}
错误响应
Status: 400 { "error": "cannot read form from request body: multipart: NextPart: http: request body too large" }
配置文件
configtx.yaml
Organizations: - &faa Name: faa SkipAsForeign: false ID: faaMSP MSPDir: ../../artifacts/crypto/faa.uam.nasa.gov/msp Policies: Readers: Type: Signature Rule: "OR('faaMSP.admin', 'faaMSP.peer', 'faaMSP.client')" Writers: Type: Signature Rule: "OR('faaMSP.admin', 'faaMSP.peer', 'faaMSP.client')" Admins: Type: Signature Rule: "OR('faaMSP.admin')" Endorsement: Type: Signature Rule: "OR('faaMSP.peer')" OrdererEndpoints: - orderer0.faa.uam.nasa.gov:7050 AnchorPeers: - Host: peer0.faa.uam.nasa.gov Port: 7051 - &air-taxi-service Name: air-taxi-service SkipAsForeign: false ID: air-taxi-serviceMSP MSPDir: ../../artifacts/crypto/air-taxi-service.uam.nasa.gov/msp Policies: Readers: Type: Signature Rule: "OR('air-taxi-serviceMSP.admin', 'air-taxi-serviceMSP.peer', 'air-taxi-serviceMSP.client')" Writers: Type: Signature Rule: "OR('air-taxi-serviceMSP.admin', 'air-taxi-serviceMSP.peer', 'air-taxi-serviceMSP.client')" Admins: Type: Signature Rule: "OR('air-taxi-serviceMSP.admin')" Endorsement: Type: Signature Rule: "OR('air-taxi-serviceMSP.peer')" OrdererEndpoints: - orderer0.faa.uam.nasa.gov:7050 AnchorPeers: - Host: peer0.air-taxi-service.uam.nasa.gov Port: 8051 Capabilities: Channel: &ChannelCapabilities V2_0: true Orderer: &OrdererCapabilities V2_0: true Application: &ApplicationCapabilities V2_0: true Application: &ApplicationDefaults Organizations: Policies: Readers: Type: ImplicitMeta Rule: "ANY Readers" Writers: Type: ImplicitMeta Rule: "ANY Writers" Admins: Type: ImplicitMeta Rule: "ANY Admins" LifecycleEndorsement: Type: ImplicitMeta Rule: "MAJORITY Endorsement" Endorsement: Type: ImplicitMeta Rule: "MAJORITY Endorsement" Capabilities: <<: *ApplicationCapabilities Orderer: &OrdererDefaults OrdererType: etcdraft EtcdRaft: Consenters: - Host: orderer0.faa.uam.nasa.gov Port: 7050 ClientTLSCert: ../../artifacts/crypto/faa.uam.nasa.gov/peers/orderer0.faa.uam.nasa.gov/tls/server.crt ServerTLSCert: ../../artifacts/crypto/faa.uam.nasa.gov/peers/orderer0.faa.uam.nasa.gov/tls/server.crt BatchTimeout: 2s BatchSize: MaxMessageCount: 20 AbsoluteMaxBytes: 99 MB PreferredMaxBytes: 512 KB Organizations: Policies: Readers: Type: ImplicitMeta Rule: "ANY Readers" Writers: Type: ImplicitMeta Rule: "ANY Writers" Admins: Type: ImplicitMeta Rule: "MAJORITY Admins" BlockValidation: Type: ImplicitMeta Rule: "ANY Writers" Channel: &ChannelDefaults Policies: Readers: Type: ImplicitMeta Rule: "ANY Readers" Writers: Type: ImplicitMeta Rule: "ANY Writers" Admins: Type: ImplicitMeta Rule: "MAJORITY Admins" Capabilities: <<: *ChannelCapabilities Profiles: UAMProfile: <<: *ChannelDefaults Application: <<: *ApplicationDefaults Organizations: - *faa - *air-taxi-service Capabilities: <<: *ApplicationCapabilities Orderer: <<: *OrdererDefaults Organizations: - *faa Capabilities: <<: *OrdererCapabilities
orderer.yaml
--- General: ListenAddress: 0.0.0.0 ListenPort: 7050 TLS: Enabled: true PrivateKey: /var/hyperledger/orderer/tls/server.key Certificate: /var/hyperledger/orderer/tls/server.crt RootCAs: ClientAuthRequired: false ClientRootCAs: Keepalive: ServerMinInterval: 60s ServerInterval: 7200s ServerTimeout: 20s Cluster: SendBufferSize: 50 ClientCertificate: # ClientPrivateKey governs the file location of the private key of the client TLS certificate. ClientPrivateKey: ListenPort: ListenAddress: ServerCertificate: ServerPrivateKey: BootstrapMethod: none BootstrapFile: LocalMSPDir: /var/hyperledger/orderer/msp LocalMSPID: faaMSP Profile: Enabled: false Address: 0.0.0.0:6060 BCCSP: Default: SW SW: Hash: SHA2 Security: 256 FileKeyStore: KeyStore: PKCS11: Library: Label: Pin: Hash: Security: FileKeyStore: KeyStore: Authentication: TimeWindow: 15m FileLedger: Location: /var/hyperledger/production/orderer Prefix: hyperledger-fabric-ordererledger Kafka: Retry: ShortInterval: 5s ShortTotal: 10m LongInterval: 5m LongTotal: 12h NetworkTimeouts: DialTimeout: 10s ReadTimeout: 10s WriteTimeout: 10s Metadata: RetryBackoff: 250ms RetryMax: 3 Producer: RetryBackoff: 100ms RetryMax: 3 Consumer: RetryBackoff: 2s Topic: ReplicationFactor: 3 Verbose: false TLS: Enabled: false PrivateKey: #File: path/to/PrivateKey Certificate: #File: path/to/Certificate RootCAs: #File: path/to/RootCAs SASLPlain: Enabled: false User: Password: Version: Debug: BroadcastTraceDir: DeliverTraceDir: Operations: ListenAddress: 127.0.0.1:8443 TLS: Enabled: false Certificate: PrivateKey: ClientAuthRequired: false ClientRootCAs: [] Metrics: Provider: disabled Statsd: Network: udp Address: 127.0.0.1:8125 WriteInterval: 30s Prefix: Consensus: WALDir: /var/hyperledger/production/orderer/etcdraft/wal SnapDir: /var/hyperledger/production/orderer/etcdraft/snapshot Admin: ListenAddress: 0.0.0.0:7055 TLS: Enabled: true PrivateKey: /var/hyperledger/orderer/tls/server.key Certificate: /var/hyperledger/orderer/tls/server.crt ClientAuthRequired: true ClientRootCAs: /var/hyperledger/orderer/users/admin0@faa.uam.nasa.gov/msp/cacerts/localhost-7054-ca-faa.uam.nasa.gov.pem ChannelParticipation: Enabled: true
orderer-docker-compose.yaml
version: "2" networks: uam.nasa.gov: services: orderer0.faa.uam.nasa.gov: container_name: orderer0.faa.uam.nasa.gov image: hyperledger/fabric-orderer:2.3 dns_search: . environment: - ORDERER_GENERAL_LOGLEVEL=INFO - FABRIC_LOGGING_SPEC=INFO - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0 # - ORDERER_GENERAL_GENESISMETHOD=file # - ORDERER_GENERAL_BOOTSTRAPFILE=/var/hyperledger/orderer/genesis.block - ORDERER_GENERAL_LOCALMSPID=faaMSP - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp - 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] - ORDERER_GENERAL_LISTENPORT=7050 - ORDERER_GENERAL_BOOTSTRAPMETHOD=none - ORDERER_ADMIN_LISTENADDRESS=0.0.0.0:7055 - ORDERER_ADMIN_TLS_ENABLED=true - ORDERER_ADMIN_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key - ORDERER_ADMIN_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt - ORDERER_ADMIN_TLS_CLIENTAUTHREQUIRED=true - ORDERER_ADMIN_TLS_CLIENTROOTCAS=[/var/hyperledger/orderer/admin/tls/ca.crt] - FABRIC_CFG_PATH=/var/hyperledger/config - ORDERER_CHANNELPARTICIPATION_ENABLED=true working_dir: /opt/gopath/src/github.com/hyperledger/fabric/orderers command: orderer start volumes: - ../../crypto/faa.uam.nasa.gov/peers/orderer0.faa.uam.nasa.gov/msp:/var/hyperledger/orderer/msp - ../../crypto/faa.uam.nasa.gov/peers/orderer0.faa.uam.nasa.gov/tls:/var/hyperledger/orderer/tls - ../../crypto/faa.uam.nasa.gov/users:/var/hyperledger/orderer/users - ../../crypto/faa.uam.nasa.gov/users/admin0@faa.uam.nasa.gov:/var/hyperledger/orderer/admin - ./:/var/hyperledger/config ports: - 7050:7050 - 7055:7055 networks: - uam.nasa.gov
已尝试操作
- 调大
GRPC_MAX_RECV_MSG_SIZE参数 - 升级Hyperledger Fabric至最新版本
解决方案
错误根源是Orderer的Admin API服务默认请求体大小限制过小,无法容纳通道创世块文件,需修改配置扩大限制:
- 修改orderer.yaml配置
在Admin节点下添加MaxRequestBodySize配置,设置足够大的字节数(示例为100MB):
Admin: ListenAddress: 0.0.0.0:7055 TLS: Enabled: true PrivateKey: /var/hyperledger/orderer/tls/server.key Certificate: /var/hyperledger/orderer/tls/server.crt ClientAuthRequired: true ClientRootCAs: /var/hyperledger/orderer/users/admin0@faa.uam.nasa.gov/msp/cacerts/localhost-7054-ca-faa.uam.nasa.gov.pem MaxRequestBodySize: 104857600 # 100MB
- Docker环境下添加环境变量
如果使用docker-compose部署,在Orderer的环境变量中添加:
- ORDERER_ADMIN_MAXREQUESTBODYSIZE=104857600
- 重启Orderer服务,重新执行
osnadmin channel join命令即可。
注意:配置的MaxRequestBodySize需大于通道创世块的实际大小,同时建议与configtx.yaml中BatchSize.AbsoluteMaxBytes的数值保持匹配,避免后续出现其他大小限制问题。
内容的提问来源于stack exchange,提问作者jbean223
相关产品推荐
相关产品推荐

