fabric 可靠性实验

Posted by Charlie Lin on May 25, 2020

fabric 可靠性实验

fabric 网络部署说明

longzhou-orderer: 排序服务所在服务器 longzhou-org1: peer0.org1 peer1.org1 peer2.org1 所在机器 longzhou-org2: peer0.org2 peer1.org2 peer2.org2 所在机器 longzhou-org3: peer0.org3 peer1.org3 所在机器 其中,anchor peer: peer0.org1.nd.com.cn peer0.org2.nd.com.cn

实验一

现在依次重启运行各个节点的服务器,观察各个节点状态是否正常。

1. 重启 org3 节点所在的机器

机器重启后,重新启动容器,执行peer channel list 命令,一切正常

2. 重启 longzhou-orderer

机器重启后,重新启动容器,执行peer channel list 命令,一切正常

实验二

将 org2 的三个 peer 节点停掉一个,观察执行 chaincode 程序的情况

1. 关闭 peer2.org2.nd.com.cn 节点

docker stop peer2.org2.nd.com.cn

运行客户端,发行票据

java -cp commercial-paper-0.0.1-SNAPSHOT.jar org.magnetocorp.Issue

发行成功:

观察各个节点的 couchdb 数据:

peer0.org2.nd.com.cnpeer1.org2.nd.com.cn

peer2.org2.nd.com.cn 与它们不同

接着把 peer2.org2.nd.com.cn 拉起来

docker start peer2.org2.nd.com.cn

可以观察到启动日志 此时 peer2.org2.nd.com.cn 的 couchdb 已经与其他两个 peer 节点同步

2. 关闭 peer1.org2.nd.com.cn 节点

docker stop peer2.org2.nd.com.cn

运行客户端,发行票据

java -cp commercial-paper-0.0.1-SNAPSHOT.jar org.magnetocorp.Issue

发行成功:

观察 peer0 与 peer1 的 couchdb 数据 观察 peer1 的数据

peer1 节点由于被关闭,couchdb 数据不同步。

重新启动 peer1.org2.nd.com.cn 后,couchdb 的数据也同步更新

关闭 peer0.org2.nd.com.cn(Anchor)节点

docker stop peer2.org2.nd.com.cn

运行客户端,发行票据

java -cp commercial-paper-0.0.1-SNAPSHOT.jar org.magnetocorp.Issue

发行失败

实验三

在实验二的基础上,关闭两个 peer 节点,观察运行结果。

1. 关闭 org2 的 peer1 与 peer2 节点

docker stop peer1.org2.nd.com.cn
docker stop peer2.org2.nd.com.cn

运行客户端,发行票据

java -cp commercial-paper-0.0.1-SNAPSHOT.jar org.magnetocorp.Issue

与事先设想的不同,在关闭两个节点的情况下,也发行成功了 观察几个 couchdb 的值: peer0.org2.nd.com.cn peer1.org2.nd.com.cnpeer2.org2.nd.com.cn 可以看到只有 peer0.org2 的 couchdb 状态发生了变化

2. 关闭 org2 的 peer0 与 peer1

docker stop peer0.org2.nd.com.cn
docker stop peer1.org2.nd.com.cn

运行客户端,发行票据

java -cp commercial-paper-0.0.1-SNAPSHOT.jar org.magnetocorp.Issue

发行失败:

总结一

由实验二与实验三,可以得知,系统的可靠性与高可用性主要有 anchor 节点决定。只要 anchor 节点在,程序运行即可成功,当 anchor 节点宕机时,运行失败。

实验四

docker kill couchdb 后,chaincode 的执行也会报错,peer 节点也会关闭。