Closed ZoomQuiet closed 1 year ago
创建通道并使组织加入的一个经典流程为:
configtx.yaml
*.tx
configtx.yaml
中配置有权限组织的 peer
节点的 peer channel create
命令创建通道并生成通道创世区块文件 *.block
peer channel join
加入通道相关命令的使用可以参考实验 2_FabricNetworkUpdate 中的 3_Configtxgen.sh 文件内容:
@wefantasy 多谢指引, 综合考虑, 对应改写 6_ContractGatewayAndSDK 中的指令比较吻合当前规划, 但是报错:
$ peer channel create -o orderer1.council.ifantasy.net:7052 -c testchannel -f $LOCAL_ROOT_PATH/data/testchannel.tx --outputBlock $LOCAL_ROOT_PATH/data/testchannel.block --tls --cafile $ORDERER_CA Error: failed to create deliver client for orderer: orderer client failed to connect to orderer1.council.ifantasy.net:7052: failed to create new connection: context deadline exceeded
无法访问对应容器服务?
已经按照 3_Configtxgen.sh 中先导指令逐一运行成功, 当前 容器:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
212aebbff966 hyperledger/fabric-orderer:arm64-2.1 "orderer" 58 minutes ago Up 58 minutes 7050/tcp, 0.0.0.0:7057->7057/tcp, :::7057->7057/tcp, 0.0.0.0:7058->8888/tcp, :::7058->8888/tcp, 0.0.0.0:7059->9999/tcp, :::7059->9999/tcp orderer3.council.ifantasy.net
3b1d1ac1cdd3 hyperledger/fabric-orderer:arm64-2.1 "orderer" 58 minutes ago Up 58 minutes 7050/tcp, 0.0.0.0:7054->7054/tcp, :::7054->7054/tcp, 0.0.0.0:7055->8888/tcp, :::7055->8888/tcp, 0.0.0.0:7056->9999/tcp, :::7056->9999/tcp orderer2.council.ifantasy.net
4e0e38e57fed hyperledger/fabric-orderer:arm64-2.1 "orderer" 58 minutes ago Up 58 minutes 7050/tcp, 0.0.0.0:7051->7051/tcp, :::7051->7051/tcp, 0.0.0.0:7052->8888/tcp, :::7052->8888/tcp, 0.0.0.0:7053->9999/tcp, :::7053->9999/tcp orderer1.council.ifantasy.net
1dc33ac8f32b hyperledger/fabric-peer:arm64-2.1 "peer node start" 59 minutes ago Up 58 minutes 7051/tcp, 0.0.0.0:7351->7351/tcp, :::7351->7351/tcp peer1.web.ifantasy.net
7a3012c7701d hyperledger/fabric-peer:arm64-2.1 "peer node start" 59 minutes ago Up 58 minutes 7051/tcp, 0.0.0.0:7451->7451/tcp, :::7451->7451/tcp peer1.hard.ifantasy.net
117682b158c4 hyperledger/fabric-peer:arm64-2.1 "peer node start" 59 minutes ago Up 58 minutes 7051/tcp, 0.0.0.0:7251->7251/tcp, :::7251->7251/tcp peer1.soft.ifantasy.net
174cca6321ea hyperledger/fabric-ca:arm64-1.4.3 "sh -c 'fabric-ca-se…" 18 hours ago Up 18 hours 7054/tcp, 0.0.0.0:7250->7050/tcp, :::7250->7050/tcp soft.ifantasy.net
c5d01f4000e3 hyperledger/fabric-ca:arm64-1.4.3 "sh -c 'fabric-ca-se…" 18 hours ago Up 18 hours 7054/tcp, 0.0.0.0:7350->7050/tcp, :::7350->7050/tcp web.ifantasy.net
d53b661fc70a hyperledger/fabric-ca:arm64-1.4.3 "sh -c 'fabric-ca-se…" 18 hours ago Up 18 hours 7054/tcp, 0.0.0.0:7450->7050/tcp, :::7450->7050/tcp hard.ifantasy.net
6ace1f61d68d hyperledger/fabric-ca:arm64-1.4.3 "sh -c 'fabric-ca-se…" 18 hours ago Up 18 hours 0.0.0.0:7050->7050/tcp, :::7050->7050/tcp, 7054/tcp council.ifantasy.net
当前 系统环境: $ env | grep ORD
ORDERER_ADMIN_TLS_SIGN_CERT=/home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/orgs/council.ifantasy.net/registers/orderer1/tls-msp/signcerts/cert.pem
ORDERER_CA=/home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/orgs/soft.ifantasy.net/assets/tls-ca-cert.pem
ORDERER_ADMIN_TLS_PRIVATE_KEY=/home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/orgs/council.ifantasy.net/registers/orderer1/tls-msp/keystore/key.pem
当前参数: $ echo $ORDERER_CA /home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/orgs/soft.ifantasy.net/assets/tls-ca-cert.pem
$ ls $LOCAL_ROOT_PATH/data/testchannel.tx /home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/data/testchannel.tx
ls $LOCAL_ROOT_PATH/data/testchannel.block /home/zoomq/go/src/github.com/hyperledger/k8s2hlf/FabricLearn/6_ContractGatewayAndSDK/data/testchannel.block
$ peer version peer: Version: 2.1.0 Commit SHA: f293f92b4 Go version: go1.14.1 OS/Arch: linux/arm64 Chaincode: Base Docker Label: org.hyperledger.fabric Docker Namespace: hyperledger
当前端口: $ sudo netstat -nltp
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:7050 0.0.0.0:* LISTEN 31699/docker-proxy
tcp 0 0 0.0.0.0:7051 0.0.0.0:* LISTEN 6624/docker-proxy
tcp 0 0 127.0.0.1:44491 0.0.0.0:* LISTEN 1175/containerd
tcp 0 0 0.0.0.0:7052 0.0.0.0:* LISTEN 6563/docker-proxy
tcp 0 0 0.0.0.0:7053 0.0.0.0:* LISTEN 6530/docker-proxy
tcp 0 0 0.0.0.0:7054 0.0.0.0:* LISTEN 6745/docker-proxy
tcp 0 0 0.0.0.0:7055 0.0.0.0:* LISTEN 6646/docker-proxy
tcp 0 0 0.0.0.0:7056 0.0.0.0:* LISTEN 6582/docker-proxy
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1247/nginx: master
tcp 0 0 0.0.0.0:7057 0.0.0.0:* LISTEN 6787/docker-proxy
tcp 0 0 0.0.0.0:7058 0.0.0.0:* LISTEN 6692/docker-proxy
tcp 0 0 0.0.0.0:7250 0.0.0.0:* LISTEN 31763/docker-proxy
tcp 0 0 0.0.0.0:7059 0.0.0.0:* LISTEN 6603/docker-proxy
tcp 0 0 0.0.0.0:7251 0.0.0.0:* LISTEN 6069/docker-proxy
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 722/systemd-resolve
tcp 0 0 0.0.0.0:7350 0.0.0.0:* LISTEN 31570/docker-proxy
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 2806/sshd
tcp 0 0 0.0.0.0:7351 0.0.0.0:* LISTEN 6100/docker-proxy
tcp 0 0 0.0.0.0:5432 0.0.0.0:* LISTEN 1138/postgres
tcp 0 0 0.0.0.0:7450 0.0.0.0:* LISTEN 31601/docker-proxy
tcp 0 0 0.0.0.0:7451 0.0.0.0:* LISTEN 6134/docker-proxy
tcp 0 0 0.0.0.0:1022 0.0.0.0:* LISTEN 5264/sshd
tcp6 0 0 :::7050 :::* LISTEN 31708/docker-proxy
tcp6 0 0 :::7051 :::* LISTEN 6630/docker-proxy
tcp6 0 0 :::7052 :::* LISTEN 6570/docker-proxy
tcp6 0 0 :::7053 :::* LISTEN 6538/docker-proxy
tcp6 0 0 :::7054 :::* LISTEN 6752/docker-proxy
tcp6 0 0 :::7055 :::* LISTEN 6668/docker-proxy
tcp6 0 0 :::7056 :::* LISTEN 6590/docker-proxy
tcp6 0 0 :::80 :::* LISTEN 1247/nginx: master
tcp6 0 0 :::7057 :::* LISTEN 6799/docker-proxy
tcp6 0 0 :::7058 :::* LISTEN 6715/docker-proxy
tcp6 0 0 :::7250 :::* LISTEN 31787/docker-proxy
tcp6 0 0 :::7059 :::* LISTEN 6611/docker-proxy
tcp6 0 0 :::7251 :::* LISTEN 6075/docker-proxy
tcp6 0 0 :::7350 :::* LISTEN 31576/docker-proxy
tcp6 0 0 :::22 :::* LISTEN 2806/sshd
tcp6 0 0 :::7351 :::* LISTEN 6107/docker-proxy
tcp6 0 0 :::5432 :::* LISTEN 1138/postgres
tcp6 0 0 :::7450 :::* LISTEN 31608/docker-proxy
tcp6 0 0 :::7451 :::* LISTEN 6173/docker-proxy
tcp6 0 0 :::1022 :::* LISTEN 5264/sshd
当前域名: $ cat /etc/hosts
127.0.0.1 localhost
...
127.0.0.1 council.ifantasy.net
127.0.0.1 soft.ifantasy.net
127.0.0.1 web.ifantasy.net
127.0.0.1 hard.ifantasy.net
127.0.0.1 orderer1.council.ifantasy.net
127.0.0.1 orderer2.council.ifantasy.net
127.0.0.1 orderer3.council.ifantasy.net
127.0.0.1 peer1.soft.ifantasy.net
127.0.0.1 peer1.web.ifantasy.net
127.0.0.1 peer1.hard.ifantasy.net
进入对应 orderer1 探查: $ docker exec -it 4e0e38e57fed sh
/ # ps
PID USER TIME COMMAND
1 root 0:00 orderer
23 root 0:00 sh
29 root 0:00 ps
/ # orderer version
orderer:
Version: 2.1.0
Commit SHA: f7f505b
Go version: go1.14.1
OS/Arch: linux/arm64
/ # netstat -nltp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.11:42849 0.0.0.0:* LISTEN -
tcp 0 0 :::7051 :::* LISTEN 1/orderer
tcp 0 0 :::9999 :::* LISTEN 1/orderer
看起来都正常, 为什么无法完成通道创建?
以及, 既然规划是 3org, 但是, 都加入同一通道, 以便完成数据互通, 可为什么要给3个orderer 分别创建不同通道呢?
@wefantasy
根据端口观察尝试修改为 orderer1.council.ifantasy.net:7053 也一样 error:
Error: failed to create deliver client for orderer: orderer client failed to connect to orderer1.council.ifantasy.net:7053: failed to create new connection: context deadline exceeded
如果修订为 :7051 则是无系统通道的错误:
2022-08-14 15:42:50.570 CST [channelCmd] InitCmdFactory -> INFO 001 Endorser and orderer connections initialized Error: got unexpected status: BAD_REQUEST -- channel creation request not allowed because the orderer system channel is not yet defined
@ZoomQuiet 这里主要需要清楚 osnadmin
和 peer channel create
的差异:osnadmin
用来管理 orderer
节点,使用时对接的端口为 admin
的专属端口,如 orderer1
的 7052 端口,目前主要在无系统通道启动网络中用到;peer
用来管理 peer
节点,使用时对接的 peer
通用端口,如 peer1.soft 的 7251 , peer channel create
主要在有系统通道启动网络中用到;
这里尝试基于实验 6_ContractGatewayAndSDK 修改网络,而该实验的总体配置是无系统通道启动,所以便无法直接将 osnadmin
命令替换成 peer channel create
命令,因为与之对应的其它文件也需要修改。一个可能的修改是将 docker-base.yaml 文件中的相关注释取消(除此之外可能其它配置文件也需要修改):
orderer-base:
image: hyperledger/fabric-orderer:${FABRIC_BASE_VERSION}
environment:
- ORDERER_GENERAL_GENESISMETHOD=file
- ORDERER_GENERAL_GENESISFILE=${DOCKER_CA_PATH}/orderer/genesis.block
如果以上修改仍然无法成功运行的话,建议先运行以有系统通道启动的实验案例,比如 1_3Org2Peer1Orderer1TLS 或 2_FabricNetworkUpdate
既然规划是 3org, 但是, 都加入同一通道, 以便完成数据互通, 可为什么要给3个orderer 分别创建不同通道呢?
@ZoomQuiet 在各个实验中并没有将3个orderer分别创建不同通道——它们都属于同一个组织并且都加入了(必须)相同的通道 testchannel 。只是在实验 Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、多组织共同运行维护Orderer 中尝试了让3个 orderer 由不同组织维护,但最终发现这样不合理。
既然规划是 3org, 但是, 都加入同一通道, 以便完成数据互通, 可为什么要给3个orderer 分别创建不同通道呢?
@ZoomQuiet 在各个实验中并没有将3个orderer分别创建不同通道——它们都属于同一个组织并且都加入了(必须)相同的通道 testchannel 。只是在实验 Hyperledger Fabric无排序组织以Raft协议启动多个Orderer服务、多组织共同运行维护Orderer 中尝试了让3个 orderer 由不同组织维护,但最终发现这样不合理。
怪不得, 那就明白了, 这样可以对应修改网络结构;
所以, 这里从 0 到 6 正如文章所言, 都是一组设想的检验, 并不能作为生产用网络配置过程来使用, 但是, 理解后对应修订才可以真正完成一个可用 HLF 网络的创建..
其实现在主要的问题在: configtxgen configtxlator cryptogen discover idemixgen orderer osnadmin peer fabric-ca-client fabric-ca-server
这组工具, 都必须通过 官方仓库 clone 到本地来编译; 前8从要从 fabric , 但是, 反复检验发现: 只能在 v2.3.3 tag 中可以正确编译出(不包含osnadmin); 其它分支都有各种问题;
而后两个只能从 fabric-ca 仓库中编译, 而反复检验, 又只能从 v1.5.2 分支中正常编译出, 其它分支都有各种问题;
而从其它类似案例中可下载到 arm64 版本的工具也都有问题, 比如: busan15/fabric-binaries-pi: AArch64/ARM64 binaries of Hyperledger Fabric for use with the Raspberry Pi 2/3/4. 中的 fabric-ca-* 不可用; chinyati/Hyperledger-Fabric-ARM64-images: These are Hyperledger Fabric arm64 images and binaries for use on Raspberry Pi 4+ running Raspbian OS 64 Bit. 中的也一样...
抱歉,由于条件限制,我只在 x86 机器上完成了所有实验,且所用工具皆为官方编译后的工具,所以可能无法在类似的不同架构编译问题上提供建议
background
无法在 arm64 环境中启动 CA 容器
降级为 Fabric 2.1.0 网络, 所以, 没有 osnadmin 指令配套
goal
继续, 完成网络配置, 以及基本 golang 版本 chaincode 检验, 和 gateway 测试
ask
osnadmin 加入通道指令 的对应 peer channel 指令 是如何的?