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.cn
与 peer1.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.cn
与 peer2.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 节点也会关闭。