今天凌晨交的POC,现在复现完组网过程就可以碎觉了,emm~
0.需求分析
有两台服务器,狗子哥说每台服务器一个节点。那么每台机子下一个机构生成一个节点,两个连一块,即:双机构双节点单群组。
这样就不能使用官方的一键螺旋快乐飞天脚本了:
使用generator运维部署工具,
于是就出现了问题(基地爆炸,问题不大)。
1.下载安装运维部署工具
这里假设机子上什么都没有,因为使用源码编译客户端的用户不用最后一步
下载
cd ~/ && git clone https://github.com/FISCO-BCOS/generator.git
Copy to clipboard
安装(此操作要求用户具有sudo权限)
cd ~/generator && bash ./scripts/install.sh
Copy to clipboard
检查是否安装成功,若成功,输出 usage: generator xxx
./generator -h
获取节点二进制
拉取最新fisco-bcos二进制文件到meta中
./generator --download_fisco ./meta
检查二进制版本
若成功,输出 FISCO-BCOS Version : x.x.x-x
./meta/fisco-bcos -v
这里遇到的问题是,二进制文件拉取贼慢。
然后我再本机把generator克隆下来,发现是:
工具类的download_fisco函数这里卡主了。没有cdn的朋友可以vim修改下这个url为:
https://xiaoyue-blog.oss-cn-hangzhou.aliyuncs.com/fisco-bcos.tar.gz
这是我的OSS,开放给大家使用轻点敲啊。
一秒不到就下完了。然后这个就是装好了:
2.联盟链初始化
来康康拓扑图:
因为官方教程是在一个机子上配的,是节点1,2。分起来的话实际上没有1,2之分的。因为是在两台机子上,也不会存在端口冲突的情况。如果端口没有打开可能会报错,这边建议把两台机子添加白名单就行了。详情可参考:FSICO BCOS多机部署之端口开放
机构 | 节点 | rpc端口 | channel端口 | p2p端口 |
---|---|---|---|---|
机构A | 节点1 | 8545 | 20200 | 30300 |
机构B | 节点2 | 8545 | 20200 | 30300 |
2.1 机构初始化
#初始化机构AB
cd ~/generator
cp -r ~/generator ~/generator-A
cp -r ~/generator ~/generator-B
2.2 链初始化
#生成链证书ca.crt&链私钥ca.key
./generator --generate_chain_certificate ./dir_chain_ca
链证书和链私钥在./dir_chain_ca
3.构建群组
3.1 初始化机构A
#生成机构A的证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
#证书授权机构将机构证书发送给机构,机构放到meta目录下面
cp ./dir_agency_ca/agencyA/* ~/generator-A/meta/
3.2 初始化机构B
#生成机构B的证书
./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB
#证书授权机构将机构证书发送给机构,机构放到meta目录下面
cp ./dir_agency_ca/agencyB/* ~/generator-B/meta/
3.3 机构A修改配置文件
#进入机构A修改node_deployment.ini节点配置文件、生成节点配置文件夹。
cd ~/generator-A
cat > ./conf/node_deployment.ini<<EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=you_ip
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please seehttps://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545
EOF
3.4 机构B修改配置文件
#进入机构B修改node_deployment.ini节点配置文件、生成节点配置文件夹。
cd ~/generator-B
cat > ./conf/node_deployment.ini<<EOF
[group]
group_id=1
[node0]
; host ip for the communication among peers.
; Please use your ssh login ip.
p2p_ip=you_ip_B
; listen ip for the communication between sdk clients.
; This ip is the same as p2p_ip for physical host.
; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
; You can check accessible addresses of your network card.
; Please seehttps://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
; for more instructions.
rpc_ip=0.0.0.0
channel_ip=0.0.0.0
p2p_listen_port=30300
channel_listen_port=20200
jsonrpc_listen_port=8545
EOF
3.5 机构A生成并发送节点信息
#生成机构A节点证书和P2P连接地址文件,根据上面修改的node_depoyment.ini生成
cd ~/generator-A
./generator --generate_all_certificates ./agencyA_node_info
#机构生成节点时需要指定其他节点的P2P连接地址,这里A机构把P2P连接机构发送给了B机构
cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt
3.6 机构B生成并发送节点信息
#生成机构A节点证书和P2P连接地址文件,根据上面修改的node_depoyment.ini生成
cd ~/generator-B
./generator --generate_all_certificates ./agencyB_node_info
#因为需要生成创世区块,规定此机构必须要节点证书。B机构除了要发送P2P连接地址之外还要发送节点证书。
cp ./agencyB_node_info/cert*.crt ~/generator-A/meta/
cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt
3.7 机构A生成群组1创世区块
#来生成创世区块。这里实际可以通过协商由那个机构生成,不一定是A。
cd ~/generator-A
cat > ./conf/group_genesis.ini<< EOF
[group]
group_id=1
;i am xiaoyue
;my blog-s cnmf.net.cn
;yea i love you~
[nodes]
node0=you_ip:30300
node1=you_ip_b:30300
EOF
./generator --create_group_genesis ./group
#把group1的创世区块发送给B机构
cp ./group/group.1.genesis ~/generator-B/meta
3.8 机构A生成所属节点
#生成机构A的节点
cd ~/generator-A
./generator --build_install_package ./meta/peersB.txt ./nodeA
#启动节点
bash ./nodeA/start_all.sh
上面有两个需要注意的地方:
1.在生产节点配置文件和创世区块配置文件时端口一致是没问题的,因为我不在一台机子上做测试,不会存在端口冲突的情况。但这样在复制B机构到B机子上的时候跑不起来就很尴尬。
2.rpc的ip默认是127.0.0.1,如果硬要开启的话会报警告:
如果非要开启rpc测试的话,也可以参照上面说的开启防火墙ip白名单。
4.B机构转移并生成节点
压缩:tar cvf B.tar generator-B
解压:tar xvf B.tar
然后上传下载操作
4.1 生成&启动节点:
./generator --build_install_package ./meta/peersA.txt ./nodeB
Copy to clipboard
机构B启动节点:
bash ./nodeB/start_all.sh
Z.查看共识状态
tail -f ./node*/node*/log/log* | grep +++
正确回显如下:
这里还有一个问题。就是上面说的对自己自信不进行测试,导致ip输错了导致共识失败,这时候是没有回显的。把后面的正则删掉就行了。能看到日志报错,通过报错去找不能共识的原因。
广告墙 :
参考:https://fisco-bcos-documentation.readthedocs.io/zh_CN/latest/docs/enterprise_tools/tutorial_detail_operation.html