You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何向运行中的Hyperledger Fabric网络添加更多Orderer节点

给运行中的Hyperledger Fabric生产网络添加Orderer节点

嘿,我来帮你一步步搞定这个事儿——给已运行的Fabric生产网络加Orderer节点是很常见的扩缩容操作,不用太担心,跟着下面的步骤来就行:

前置准备

  • 先把当前网络的最新配置文件都备齐:包括configtx.yaml、crypto-config.yaml,还有Orderer组织的MSP证书目录,别拿旧版本的,不然容易出问题
  • 确认现有单Orderer节点状态健康:通道交易能正常处理,日志里没报错,这点是基础
  • 新Orderer节点的环境要和现有节点完全匹配:Fabric版本一模一样,操作系统、依赖包也尽量对齐,版本不兼容真的会坑死人

步骤1:生成新Orderer节点的加密材料

如果用cryptogen工具(生产环境更推荐CA,但如果之前用的是cryptogen)

  • 打开crypto-config.yaml,找到Orderer组织的Template字段,把Count改成你想要的总节点数(比如原来1个,现在要3个就改成3)
  • 重新生成加密材料:
    cryptogen generate --config=./crypto-config.yaml
    
  • 把新生成的Orderer节点证书目录(比如crypto-config/ordererOrganizations/example.com/orderers/orderer2.example.com)复制到新节点服务器的对应路径,比如/opt/fabric/crypto/orderer

如果用Fabric CA(生产环境推荐)

  • 先给新Orderer节点注册身份,再签发证书:
    # 注册身份
    fabric-ca-client register --id.name orderer2.example.com --id.type orderer --id.affiliation orderer --id.secret yourOrderer2Password
    # 拉取证书
    fabric-ca-client enroll -u http://orderer2.example.com:yourOrderer2Password@ca-orderer.example.com:7054 -M /opt/fabric/crypto/orderer/msp
    
  • 把CA的根证书、中间证书复制到新节点的MSP目录下,确保结构和现有Orderer节点完全一致(比如msp/cacerts、msp/tlscacerts这些目录都要有对应的文件)

步骤2:更新通道配置(最关键的一步)

要把新Orderer节点加入到通道的配置里,这步必须做:

  1. 从现有Orderer节点拉取通道的最新配置区块:
    peer channel fetch config config_block.pb -o orderer.example.com:7050 -c yourChannelName --tls --cafile /opt/fabric/crypto/orderer/tls/ca.crt
    
  2. 把配置区块转成JSON格式方便编辑:
    configtxlator proto_decode --input config_block.pb --type common.Block --output config_block.json
    jq .data.data[0].payload.data.config config_block.json > config.json
    
  3. 创建修改后的配置文件,添加新Orderer节点:
    • 复制config.json为modified_config.json
    • 在modified_config.json里找到channel_group.groups.Orderer.values.OrdererAddresses.config.addresses,把新Orderer的地址加进去(比如"orderer2.example.com:7050")
    • 用configtxlator计算配置差异并打包:
      # 转成proto格式
      configtxlator proto_encode --input config.json --type common.Config --output config.pb
      configtxlator proto_encode --input modified_config.json --type common.Config --output modified_config.pb
      # 计算更新
      configtxlator compute_update --channel_id yourChannelName --original config.pb --updated modified_config.pb --output config_update.pb
      # 转回JSON
      configtxlator proto_decode --input config_update.pb --type common.ConfigUpdate --output config_update.json
      # 打包成信封格式
      echo '{"payload":{"header":{"channel_header":{"channel_id":"yourChannelName", "type":2}},"data":{"config_update":'$(cat config_update.json)'}}}' | jq . > config_update_in_envelope.json
      configtxlator proto_encode --input config_update_in_envelope.json --type common.Envelope --output config_update_in_envelope.pb
      
  4. 签名并提交配置更新:
    • 用Orderer组织的管理员身份签名(必须符合通道的签名策略):
      peer channel signconfigtx -f config_update_in_envelope.pb
      
    • 提交到现有Orderer节点:
      peer channel update -f config_update_in_envelope.pb -c yourChannelName -o orderer.example.com:7050 --tls --cafile /opt/fabric/crypto/orderer/tls/ca.crt
      

步骤3:启动新Orderer节点

  1. 准备启动配置(以Docker部署为例,裸金属部署类似):
    编写docker-compose-orderer2.yaml,关键配置要和现有节点对齐:
    version: '2'
    services:
      orderer2.example.com:
        image: hyperledger/fabric-orderer:${FABRIC_VERSION}
        environment:
          - ORDERER_GENERAL_LISTENADDRESS=0.0.0.0
          - ORDERER_GENERAL_LISTENPORT=7050
          - ORDERER_GENERAL_LOCALMSPID=OrdererMSP
          - ORDERER_GENERAL_LOCALMSPDIR=/var/hyperledger/orderer/msp
          # TLS配置(生产环境必须开)
          - ORDERER_GENERAL_TLS_ENABLED=true
          - ORDERER_GENERAL_TLS_CERTIFICATE=/var/hyperledger/orderer/tls/server.crt
          - ORDERER_GENERAL_TLS_PRIVATEKEY=/var/hyperledger/orderer/tls/server.key
          - ORDERER_GENERAL_TLS_ROOTCAS=[/var/hyperledger/orderer/tls/ca.crt]
          # 用创世区块启动
          - ORDERER_GENERAL_BOOTSTRAPMETHOD=file
          - ORDERER_GENERAL_BOOTSTRAPFILE=/var/hyperledger/orderer/genesis.block
        volumes:
          - ./crypto/orderer/msp:/var/hyperledger/orderer/msp
          - ./crypto/orderer/tls:/var/hyperledger/orderer/tls
          - ./genesis.block:/var/hyperledger/orderer/genesis.block
        ports:
          - "7052:7050"
    
  2. 启动新节点:
    docker-compose -f docker-compose-orderer2.yaml up -d
    
  3. 验证节点状态:
    • 看日志有没有报错:docker logs -f orderer2.example.com
    • 检查Raft集群状态(如果用的是Raft共识):日志里会显示节点加入集群,同步数据,最终成为follower/leader
    • 发个测试交易,确认新节点能正常参与共识

必看注意事项

  • 生产环境必须开启TLS,所有节点的证书要由同一个CA签发,不然节点之间连不上
  • 配置更新必须满足通道的签名策略,比如需要Orderer组织管理员签名,不然提交会失败
  • 新节点启动后,Raft共识会自动同步区块数据,不用手动复制
  • 添加完节点后,一定要监控所有Orderer的状态,确保共识正常运行,比如看每个节点的日志,用Prometheus+Grafana监控指标

内容的提问来源于stack exchange,提问作者Rohit Khatri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:48:49