当前位置: 代码迷 >> 综合 >> hyperledger fabric 测试(八) 1.18 服务器多机部署
  详细解决方案

hyperledger fabric 测试(八) 1.18 服务器多机部署

热度:63   发布时间:2023-12-10 18:15:00.0

环境:腾讯云服务器三台:一台提供Order服务,另外两台为两个组织单节点,资金有限,全部测试都在solo环境,而且测试一台服务器多节点是失败,是不支持吗?不太确定

服务器配置:

  • 操作系统   Ubuntu Server 16.04.1 LTS 64位

  • CPU  2 核

  • 内存  4 GB

  • 公网带宽  5 Mbps

环境安装如单机单节点

设置/etc/hosts文件:sudo vim /etc/hosts

编辑文件:

172.27.0.7 orderer.example.com

172.27.0.10 peer0.org1.example.com

172.27.0.17 peer0.org2.example.com

关闭当前网络:cd scripts/fabricSample/first-network

              ./byfn.sh –m down

进入e2ecli文件夹:cd ~/go/src/github.com/hyperledger/fabric/examples/e2e_cli/

运行启动一键脚本:./network_setup.sh up

测试成功后关闭一键脚本:./network_setup.sh down

一键脚本生成fabric公私钥、证书、创世区块文件:./generateArtifacts.sh mychannel

复制文件生成peer容器配置文件:cp docker-compose-cli.yaml docker-compose-peer.yaml

复制文件生成order容器配置文件:cp docker-compose-cli.yaml docker-compose-orderer.yaml

编辑文件docker-compose-peer.yaml:

peer0.org1.example.com:

    container_name: peer0.org1.example.com

    extends:

      file:  base/docker-compose-base.yaml

      service: peer0.org1.example.com

    extra_hosts:

    - "orderer.example.com:172.27.0.7"

  

  cli:

    container_name: cli

    image: hyperledger/fabric-tools

    tty: true

    environment:

      - GOPATH=/opt/gopath

      - CORE_VM_ENDPOINT=unix:///host/var/run/docker.sock

      - CORE_LOGGING_LEVEL=DEBUG

      - CORE_PEER_ID=cli

      - CORE_PEER_ADDRESS=peer0.org1.example.com:7051

      - CORE_PEER_LOCALMSPID=Org1MSP

      - CORE_PEER_LOCALMSPTYPE=bccsp

      - CORE_PEER_TLS_ENABLED=true

      - CORE_PEER_TLS_CERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.crt

      - CORE_PEER_TLS_KEY_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/server.key

      - CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt

      - CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp

    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer

    volumes:

        - /var/run/:/host/var/run/

        - ../chaincode/go/:/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go

        - ./crypto-config:/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/

        - ./scripts:/opt/gopath/src/github.com/hyperledger/fabric/peer/scripts/

        - ./channel-artifacts:/opt/gopath/src/github.com/hyperledger/fabric/peer/channel-artifacts

    depends_on:

      - peer0.org1.example.com

    extra_hosts:

    - "orderer.example.com:172.27.0.7"

    - "peer0.org1.example.com:172.27.0.10"

- "peer0.org2.example.com:172.27.0.17"

编辑docker-compose-orderer.yaml:

    orderer.example.com:

    extends:

      file:   base/docker-compose-base.yaml

      service: orderer.example.com

    container_name: orderer.example.com

    depends_on:

      - zookeeper0

      - zookeeper1

      - zookeeper2

      - kafka0

      - kafka1

      - kafka2

      - kafka3

将服务器镜像备份,其他服务器安装设置好服务器的镜像。 //腾讯云测试过可以

移除e2e_cli文件夹:rm –rf e2e_cli

退出到examples目录:cd ..

通过Linux文件分发命令分发文件:scp -r e2e_cli ubuntu@172.27.0.7:/home/ubuntu/go/src/github.com/hyperledger/fabric/examples/  //e2e为要分发的文件Ubuntu为要访问的账户名,172为要访问的内网IP,路径为文件复制到的路径

分发到组织2:scp -r e2e_cli ubuntu@172.27.0.17:/home/ubuntu/go/src/github.com/hyperledger/fabric/examples/

Order主机:

进入e2e_cli文件夹:cd e2e_cli/

构建排序容器:docker-compose -f docker-compose-orderer.yaml up –d

组织1服务器:

构建节点0容器服务:docker-compose -f docker-compose-peer.yaml up –d

进入节点容器:docker exec -it cli bash

组织2服务器:

构建节点0容器服务:docker-compose -f docker-compose-peer.yaml up –d

进入节点容器:docker exec -it cli bash

以下两节点同步执行:

组织1:引入名字环境变量:export CHANNEL_NAME=mychannel

生成通道配置区块:peer channel create -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/channel.tx --tls --cafile /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 join -b mychannel.block

将通道配置文件上传至组织2 //下载mychannel.block文件,使用winscp上传至/opt/gopath/src/github.com/hyperledger/fabric/peer

组织2执行:引入名字环境变量:export CHANNEL_NAME=mychannel

节点加入通道:peer channel join -b mychannel.block

组织1设置锚节点:CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/users/Admin@org1.example.com/msp CORE_PEER_ADDRESS=peer0.org1.example.com:7051 CORE_PEER_LOCALMSPID="Org1MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org1.example.com/peers/peer0.org1.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org1MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

组织2设置锚节点:CORE_PEER_MSPCONFIGPATH=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/users/Admin@org2.example.com/msp CORE_PEER_ADDRESS=peer0.org2.example.com:7051 CORE_PEER_LOCALMSPID="Org2MSP" CORE_PEER_TLS_ROOTCERT_FILE=/opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/peerOrganizations/org2.example.com/peers/peer0.org2.example.com/tls/ca.crt peer channel update -o orderer.example.com:7050 -c $CHANNEL_NAME -f ./channel-artifacts/Org2MSPanchors.tx --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem

组织1和组织2都使用winscp上传智能合约至新建test文件夹,/opt/gopath/src/github.com/hyperledger/fabric/examples/chaincode/go/test

组织1和组织2安装链码:peer chaincode install -n mycc -v 1.0 -p github.com/hyperledger/fabric/examples/chaincode/go/test

实例化链码(好像是一个实例化就可以了):peer chaincode instantiate -o orderer.example.com:7050 --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem -C $CHANNEL_NAME -n mycc -v 1.0 -c '{"Args":["init","a", "100", "b","200"]}' -P "OR ('Org1MSP.peer','Org2MSP.peer')" //需要指定export CHANNEL_NAME=mychannel

测试:组织1和组织2分别查询当前a数量:peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'  //常理都是100

组织1执行转账操作:peer chaincode invoke -o orderer.example.com:7050  --tls --cafile /opt/gopath/src/github.com/hyperledger/fabric/peer/crypto/ordererOrganizations/example.com/orderers/orderer.example.com/msp/tlscacerts/tlsca.example.com-cert.pem  -C $CHANNEL_NAME -n mycc -c '{"Args":["invoke","a","b","10"]}'

组织1和组织2分别查询当前a数量:peer chaincode query -C $CHANNEL_NAME -n mycc -c '{"Args":["query","a"]}'  //常理都是90

注意:每次启动容器都要重新设置通道环境变量export CHANNEL_NAME=mychannel

  相关解决方案