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

Hyperledger Fabric跨机器连接两个组织是否可行及步骤咨询

Hyperledger Fabric跨机器部署多组织方案

当然可以!Hyperledger Fabric的分布式架构天生支持将不同组织部署在独立机器上,这也是它作为联盟链的核心优势之一。下面是一套详细的实现步骤,我会尽量讲得通俗易懂:

一、前提准备

  • 两台目标机器(PC1、PC2)都要完成基础环境配置:安装Docker、Docker Compose,以及对应版本的Hyperledger Fabric二进制文件(peer、orderer、configtxgen等)和官方镜像,确保两台机器的Fabric版本完全一致(推荐用2.x系列稳定版)。
  • 两台机器需处于可互相访问的网络环境(同一局域网或公网连通),提前打通必要端口:Orderer节点默认7050,Peer节点默认7051(gRPC)、7052(事件服务),如果端口冲突可自行调整。
  • 提前规划好组织与节点信息:比如Org1的MSP ID为Org1MSP、域名为org1.example.com,Org2的MSP ID为Org2MSP、域名为org2.example.com,Orderer节点域名为orderer.example.com(这里假设Orderer部署在PC1上,也可以单独用第三台机器)。

二、步骤1:在PC1(部署Org1+Orderer)生成核心配置文件

  1. 创建工作目录并生成加密材料

    • 新建工作目录:mkdir -p fabric-multi-org && cd fabric-multi-org
    • 编写crypto-config.yaml,定义OrdererOrg、Org1、Org2的节点与用户信息,然后用cryptogen工具生成加密材料:
      cryptogen generate --config=./crypto-config.yaml
      
    • 生成的crypto-config目录里包含所有组织的MSP证书、密钥,后续要把Org2的相关文件复制到PC2。
  2. 生成创世区块与通道配置文件

    • 编写configtx.yaml,配置Orderer共识机制(比如Raft)、Org1和Org2的MSP信息、通道模板。
    • 生成创世区块(用于启动Orderer集群):
      configtxgen -profile TwoOrgsOrdererGenesis -outputBlock ./channel-artifacts/genesis.block
      
    • 生成通道创建交易文件:
      configtxgen -profile TwoOrgsChannel -outputCreateChannelTx ./channel-artifacts/channel.tx -channelID mychannel
      
    • 生成两个组织的锚节点更新文件:
      configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org1MSPanchors.tx -channelID mychannel -asOrg Org1MSP
      configtxgen -profile TwoOrgsChannel -outputAnchorPeersUpdate ./channel-artifacts/Org2MSPanchors.tx -channelID mychannel -asOrg Org2MSP
      
  3. 启动PC1上的Orderer与Org1 Peer节点

    • 编写docker-compose-org1.yaml,定义Orderer容器、Org1的Peer0容器、Org1的CLI容器。注意配置端口映射(比如Orderer的7050映射到PC1宿主机,Peer0的7051/7052映射到宿主机),并确保容器能被外部机器访问(可使用host网络模式,或配置正确的端口映射)。
    • 启动容器:
      docker-compose -f docker-compose-org1.yaml up -d
      

三、步骤2:在PC2(部署Org2)同步配置并启动节点

  1. 同步配置文件

    • 在PC2上创建相同的工作目录:mkdir -p fabric-multi-org && cd fabric-multi-org
    • 从PC1复制必要文件:
      • 复制加密材料里的Org2目录:scp -r user@PC1_IP:/path/to/fabric-multi-org/crypto-config/peerOrganizations/org2.example.com ./crypto-config/peerOrganizations/
      • 复制通道配置文件:scp -r user@PC1_IP:/path/to/fabric-multi-org/channel-artifacts ./
  2. 启动Org2 Peer节点

    • 编写docker-compose-org2.yaml,定义Org2的Peer0容器、Org2的CLI容器。注意端口要和PC1区分开(比如用9051/9052),并在配置中指定Orderer节点的地址为PC1的IP+端口。
    • 启动容器:
      docker-compose -f docker-compose-org2.yaml up -d
      

四、步骤3:创建通道并让两个组织的Peer加入

  1. 在PC1的Org1 CLI中创建通道

    • 进入Org1的CLI容器:
      docker exec -it cli.org1 bash
      
    • 设置环境变量:
      export CHANNEL_NAME=mychannel
      export CORE_PEER_LOCALMSPID="Org1MSP"
      export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp
      export CORE_PEER_ADDRESS=peer0.org1.example.com:7051
      export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
      
    • 创建通道:
      peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls true --cafile $ORDERER_CA
      
    • 把生成的mychannel.block从容器复制到PC1宿主机,再传到PC2:
      # 在PC1宿主机执行
      docker cp cli.org1:/opt/gopath/src/github.com/hyperledger/fabric/peer/mychannel.block ./
      scp mychannel.block user@PC2_IP:/path/to/fabric-multi-org/
      
  2. 让Org1和Org2的Peer加入通道

    • 在PC1的Org1 CLI中加入通道:
      peer channel join -b mychannel.block
      
    • 在PC2的Org2 CLI中加入通道:
      # 进入Org2 CLI容器
      docker exec -it cli.org2 bash
      # 设置环境变量
      export CHANNEL_NAME=mychannel
      export CORE_PEER_LOCALMSPID="Org2MSP"
      export CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp
      export CORE_PEER_ADDRESS=peer0.org2.example.com:9051
      export ORDERER_CA=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem
      # 复制通道块到容器内
      docker cp ./mychannel.block cli.org2:/opt/gopath/src/github.com/hyperledger/fabric/peer/
      # 加入通道
      peer channel join -b mychannel.block
      

五、步骤4:更新锚节点并测试链码

  1. 更新锚节点

    • 在PC1的Org1 CLI中更新Org1的锚节点:
      peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls true --cafile $ORDERER_CA
      
    • 在PC2的Org2 CLI中更新Org2的锚节点:
      peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls true --cafile $ORDERER_CA
      
  2. 链码部署与测试

    • 在PC1的Org1 CLI中安装链码:
      peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
      
    • 在PC2的Org2 CLI中安装相同链码:
      peer chaincode install -n mycc -v 1.0 -p github.com/chaincode/chaincode_example02/go/
      
    • 在PC1的Org1 CLI中实例化链码(指定背书策略为两个组织的Peer都需背书):
      peer chaincode instantiate -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a","100","b","200"]}' -P "AND ('Org1MSP.peer','Org2MSP.peer')"
      
    • 测试链码调用:
      • 在PC1的Org1 CLI中发起转账:
        peer chaincode invoke -o orderer.example.com:7050 --tls true --cafile $ORDERER_CA -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'
        
      • 在PC2的Org2 CLI中查询余额:
        peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'
        
      如果返回结果为90,说明跨组织部署成功!

关键注意事项

  • 两台机器的系统时间必须同步,否则会出现TLS证书验证失败或区块同步异常的问题。
  • 两台机器的/etc/hosts文件需添加域名映射,比如PC1和PC2都要添加:
    PC1_IP orderer.example.com peer0.org1.example.com
    PC2_IP peer0.org2.example.com
    
  • Docker容器的端口映射要确保外部可访问,避免防火墙或安全组拦截端口。
  • 所有配置文件中的MSP ID、域名必须保持一致,不能出现拼写错误。

内容的提问来源于stack exchange,提问作者S.M

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 07:11:22