Fabric1.1 solo多机部署那点事

1 多机部署主机、网络配置

  1. 虚拟机及系统:
    准备5台虚拟机,CentOS7系统,内核4.x,内存1G左右(虚拟机分配为最大内存,内存分配大小视宿主机物理内存大小而定,我的宿主机内存为16GB)。虚拟机搭载的节点全部启动后,宿主机内存使用情况:
    Fabric1.1 solo多机部署那点事_第1张图片
    剩余可用内存5GB左右,虚拟机内存不能分配过大,不然全部启动后可能会造成蓝屏。

    在一台虚拟机上配置好环境,并且运行e2e_cli没问题,将network down掉,并且克隆另外4台虚拟机。

  2. 主机IP及主机名hostname配置
    修改所有主机的hostname配置,具体名称对应于启动容器的yaml配置文件

虚拟机IP地址 虚拟机hostname
192.168.126.136 orderer.example.com
192.168.126.132 peer0.org1.example.com
192.168.126.133 peer1.org1.example.com
192.168.126.134 peer0.org2.example.com
192.168.126.135 peer1.org2.example.com

solo多机结构:
Fabric1.1 solo多机部署那点事_第2张图片
4个peer节点均依赖于orderer节点。
每个节点分别对应一台服务器,每个peer节点会启动一个peerx.orgx.example.com容器和一个cli容器。
peerx.orgx.example.com容器依赖于orderer容器。
cli容器依赖于peerx.orgx.example.com容器和orderer容器。
peerx.orgx.example.com容器通过宿主机IP地址及基于SSH协议的默认端口22与orderer容器通信。
cli容器通过宿主机IP地址及基于SSH协议的默认端口22与orderer容器通信,通过基于TCP协议的7050-7053端口与peerx.orgx.example.com容器通信。

2 solo多机部署

  1. 多机部署的名词概念和基本流程参考:

    327-fabric之msp和锚节点

  2. 多机部署实战参考:

    HyperLedger Fabric solo 模式多服务器部署

    (本人根据这个教程可以跑成功)

3 盘点一下多机部署的坑

主要填坑参考:

在阿里云进行Fabric的多机部署需要注意的几个坑

坑1:

由于每台服务器的cli容器依赖于peerx.orgx.example.com容器的7050-7053/tcp端口,但是防火墙默认不开放这些端口。导致出现报错

peer channel join -b mychannel.block 
2020-07-06 08:46:35.424 UTC [msp] GetLocalMSP -> DEBU 001 Returning existing local MSP
2020-07-06 08:46:35.424 UTC [msp] GetDefaultSigningIdentity -> DEBU 002 Obtaining default signing identity
2020-07-06 08:46:36.439 UTC [grpc] Printf -> DEBU 003 grpc: addrConn.resetTransport failed to create client transport: connection error: desc = "transport: Error while dialing dial tcp 192.168.126.132:7051: getsockopt: no route to host"; Reconnecting to {peer0.org1.example.com:7051 <nil>}
solution:

查看防火墙已开放端口(可能返回空列表)

firewall-cmd --list-ports

开放端口设置:

firewall-cmd --zone=public --add-port=7050/tcp --permanent
firewall-cmd --zone=public --add-port=7051/tcp --permanent
firewall-cmd --zone=public --add-port=7052/tcp --permanent
firewall-cmd --zone=public --add-port=7053/tcp --permanent

重启防火墙:

firewall-cmd --reload

再次查看开放端口,可以看到7050-7053端口列表。

坑2:

如果出现报错

Error: Got unexpected status: BAD_REQUEST

则通道已经创建,但是节点的签名可能有问题,加入通道失败。遇到这种情况,需要删除channel,并且重新建立channel。最好是重新生成创世区块,并重新部署一遍。

注意在重新部署前,需要停止、删除启动的容器、网络、卷等。同时,由于创建channel时启动容器需要镜像支持,故在docker images中还可以看见支持通道容器启动的相关镜像,需要手动删除该镜像,保证之前建立的channel被删除。

坑3:

我在部署并且测试成功之后,将vmare进行了挂机。再次启动时发现报错

Error:endorser client failed to connect to peer0.org1.example.com:7051: failed to create new connection: context deadline exceeded

并且我在挂机之前,是没有停止docker容器的。
我检查了一下防火墙的端口,发现端口7050-7053/tcp都是开放的。
原因可能是:每次连接上虚拟机,主机ip会动态分配,而docker容器的docker-proxy(http代理)的port ID并没有跟着主机ip而改变,所以会出现无法连接docker容器实际监听端口的情况。下面这张图是挂机后再开机的网络状态。
Fabric1.1 solo多机部署那点事_第3张图片

solution:
systemctl restart docker

然后再次启动所有容器。
操作完后发现docker-proxy的PID发生了改变。
Fabric1.1 solo多机部署那点事_第4张图片
restart了docker以后,再测试,就没有连不上peer的报错了。

你可能感兴趣的:(Fabric1.1 solo多机部署那点事)