Hyperledger Fabric 1.0 多机部署

Hyperledger Fabric 1.0 多机部署

环境搭建

在进行多机部署前,需要确保每一台服务器单机部署成功,可以运行官方示例fabric/examples/e2e_cli
具体搭建过程可以参考[https://blog.csdn.net/mellymengyan/article/details/77529390]

节点选择

笔者用3台服务器搭建5个节点,其中1个orderer节点,4个peer节点。

服务器 节点
192.168.2.2 peer0.org1.example.com
peer1.org1.example.com
client
192.168.2.3 peer0.org2.example.com
peer1.org2.example.com
192.168.2.4 orderer.example.com

读者可以根据服务器数量分配节点。

生成公私钥、证书等

1.选择任意一台服务器,在fabric/examples/e2e_cli目录下执行
bash generateArtifacts.sh mychannel
此时会在此目录下生成两个文件channel-artifactscrypto-config
channel-artifacts用于orderer创建channel。
crypto-config用于确保节点间的安全通信。

2.将这两个文件复制到其他服务器的相同目录下,若之前已存在,则需删除后替换。

设置peer0.org1和peer1.org1的配置文件

192.168.2.2

参考e2e_cli目录下的docker-compose-cli.yaml编写配置文件,可以将此文件复制一份,在原来的基础上修改。

1.在e2e_cli目录下执行
cp docker-compopose-cli.yaml docker-compose-peer.yaml
然后打开docker-compose-peer.yaml文件进行编辑。
笔者在此服务器上分配了org1的两个peer节点和cli,因此只需保留文件中的两个peer和cli部分配置信息,其余可以删除。

2.每个peer节点还需要配置好orderer节点的域名-IP映射,添加:

extra_hosts:
  - "orderer.example.com:192.168.2.4"

3.对于cli的配置信息,去掉无效的depend,只保留org1的两个peer,并且需要添加各个节点的域名-IP映射:

extra_hosts:
  - "peer0.org1.example.com:192.168.2.2"
  - "peer1.org1.example.com:192.168.2.2"
  - "peer0.org2.example.com:192.168.2.3"
  - "peer1.org2.example.com:192.168.2.3"
  - "orderer.example.com:192.168.2.4"

4.最后的配置信息如下:


services:

  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:192.168.2.4"

  peer1.org1.example.com:
    container_name: peer1.org1.example.com
    extends:
      file:  base/docker-compose-base.yaml
      service: peer1.org1.example.com
    extra_hosts:
      - "orderer.example.com:192.168.2.4"

  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_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/[email protected]/msp
    working_dir: /opt/gopath/src/github.com/hyperledger/fabric/peer
    command: /bin/bash -c './scripts/script.sh ${
    
    CHANNEL_NAME}; sleep $TIMEOUT'
    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
      - peer1.org1.example.com
    extra_hosts:
      - "peer0.org1.example.com:192.168.2.2"
      - "peer1.org1.example.com:192.168.2.2"
      - "peer0.org2.example.com:192.168.2.3"
      - "peer1.org2.example.com:192.168.2.3"
      - "orderer.example.com:192.168.2.4"

设置peer0.org2和peer1.org2的配置文件

192.168.2.3

步骤基本与上文相似,只是笔者没有选择此服务器作为一个cli节点,因此不需要配置cli部分,只需关注org2的两个peer。

设置orderer的配置文件

192.168.2.4

也是类似的步骤,在e2e_cli目录下复制docker-compose-cli.yaml文件,执行:
cp docker-compose-cli.yaml docker-compose-orderer.yaml
只保留orderer部分,不需要添加extra_hosts
配置信息为:

services:

  orderer.example.com:
    extends:
      file:   base/docker-compose-base.yaml
      service: orderer.example.com
    container_name: orderer.example.com

设置base目录的配置文件

以上的配置信息都extends了fabric/examples/e2e_cli/base目录下的docker-compose-base.yaml,这个文件中配置了各节点的端口号。

由于示例是单机运行,此文件中对端口进行了映射。根据笔者的节点分配情况,peer0.org1和peer0.org2在同一台服务器,因此不需要修改端口映射。peer0.org2和peer1.org2在另一台服务器上,因此需要修改端口映射:
把原来的

    ports:
      - 9051:7051
      - 9052:7052
      - 9053:7053

改为

    ports:
      - 7051:7051
      - 7052:7052
      - 7053:7053

原来的

    ports:
      - 10051:7051
      - 10052:7052
      - 10053:7053

改为

    ports:
      - 8051:7051
      - 8052:7052
      - 8053:7053

记得每台服务器都需修改!

启动各节点

1.启动peer0.org1、peer1.org1和cli

192.168.2.2

在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps命令查看,若生成并运行了cli和两个peer容器,就说明节点启动成功。

2.启动peer0.org2、peer1.org2

192.168.2.3

在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps命令查看,若生成并运行了两个peer容器,就说明节点启动成功。

3.启动orderer

192.168.2.4

在e2e_cli目录下执行:
docker-compose -f docker-compose-peer.yaml up -d
此时用docker ps命令查看,若生成并运行了orderer容器,就说明节点启动成功。

修改scripts/script.sh

(写在前面:笔者在参考其他多机部署的资料中时并没有看到这一步,于是遇到了peer1.org1无法加入通道的问题,经过分析修改了script.sh便可以运行了。至于为什么他们没有修改也能运行,笔者现在也没搞懂,希望有大佬知道的话可以指点一下,谢谢!)

返回cli所在的服务器
192.168.2.2
在运行网络之前,需要修改e2e_cli目录下的scripts/script.sh

在setGlobals()方法中,环境变量CORE_PEER_ADDRESS需要说明节点的端口号。我们在base/docker-compose-base.yaml中进行了端口映射,所以需要修改此环境变量中的端口号:

peer1.org1.example.com:7051

修改为

peer1.org1.example.com:8051

peer1.org2.example.com:7051

修改为

peer1.org2.example.com:8051

(当然读者也可以尝试不用脚本,手动去创建通道、选择anchor节点、peer加入通道、安装链码、实例化链码等一系列操作,只是比较麻烦。)

启动网络

192.168.2.2

1.在e2e_cli目录下执行:
docker exec -it cli bash进入cli容器

2.在cli容器中执行脚本:
./scripts/script.sh mychannel

最后出现All GOOD, End-2-End execution completed ,就说明网络运行成功。

猜你喜欢

转载自blog.csdn.net/weixin_42332067/article/details/115006099