机构A、B构建群组1
初始化机构A
教程中为了简化操作直接生成了机构证书和私钥,实际应用时应该由机构本地生成私钥agency.key
,再生成证书请求文件,向证书签发机构获取机构证书agency.crt
。
在证书生成机构目录下操作:
- cd ~/generator
生成机构A证书:
- ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA
查看机构证书及私钥:
- ls dir_agency_ca/agencyA/
- # 上述命令解释
- # 从左至右分别为机构证书、机构私钥、链证书签发机构证书中间文件、链证书、证书配置文件
- agency.crt agency.key ca-agency.crt ca.crt cert.cnf
发送链证书、机构证书、机构私钥至机构A,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下
- cp ./dir_chain_ca/ca.crt ./dir_agency_ca/agencyA/agency.crt ./dir_agency_ca/agencyA/agency.key ~/generator-A/meta/
初始化机构B
在证书生成机构目录下操作:
- cd ~/generator
生成机构B证书:
- ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB
发送链证书、机构证书、机构私钥至机构B,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下
- cp ./dir_chain_ca/ca.crt ./dir_agency_ca/agencyB/agency.crt ./dir_agency_ca/agencyB/agency.key ~/generator-B/meta/
重要
一条联盟链中只能用到一个根证书ca.crt,多服务器部署时不要生成多个根证书和私钥。一个群组只能有一个群组创世区块group.x.genesis
机构A修改配置文件
node_deployment.ini为节点配置文件,企业级部署工具会根据node_deployment.ini
下的配置生成相关节点证书,及生成节点配置文件夹等。
机构A修改conf文件夹下的node_deployment.ini
如下图所示:
在~/generator-A目录下执行下述命令
- 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=127.0.0.1
- ; 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 see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
- ; for more instructions.
- rpc_ip=127.0.0.1
- p2p_listen_port=30300
- channel_listen_port=20200
- jsonrpc_listen_port=8545
- [node1]
- p2p_ip=127.0.0.1
- rpc_ip=127.0.0.1
- p2p_listen_port=30301
- channel_listen_port=20201
- jsonrpc_listen_port=8546
- EOF
机构B修改配置文件
机构B修改conf文件夹下的node_deployment.ini
如下图所示:
在~/generator-B目录下执行下述命令
- 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=127.0.0.1
- ; 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 see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
- ; for more instructions.
- rpc_ip=127.0.0.1
- p2p_listen_port=30302
- channel_listen_port=20202
- jsonrpc_listen_port=8547
- [node1]
- p2p_ip=127.0.0.1
- rpc_ip=127.0.0.1
- p2p_listen_port=30303
- channel_listen_port=20203
- jsonrpc_listen_port=8548
- EOF
机构A生成并发送节点信息
在~/generator-A目录下执行下述命令
- cd ~/generator-A
机构A生成节点证书及P2P连接信息文件,此步需要用到上述配置的node_deployment.ini
,及机构meta文件夹下的机构证书与私钥,机构A生成节点证书及P2P连接信息文件
- ./generator --generate_all_certificates ./agencyA_node_info
查看生成文件:
- ls ./agencyA_node_info
- # 上述命令解释
- # 从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
- cert_127.0.0.1_30300.crt cert_127.0.0.1_30301.crt peers.txt
机构生成节点时需要指定其他节点的节点P2P连接地址,因此,A机构需将节点P2P连接地址文件发送至机构B
- cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt
机构B生成并发送节点信息
在~/generator-B目录下执行下述命令
- cd ~/generator-B
机构B生成节点证书及P2P连接信息文件:
- ./generator --generate_all_certificates ./agencyB_node_info
生成创世区块的机构需要节点证书,示例中由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A
发送证书
- cp ./agencyB_node_info/cert*.crt ~/generator-A/meta/
发送节点P2P连接地址文件
- cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt
机构A生成群组1创世区块
在~/generator-A目录下执行下述命令
- cd ~/generator-A
机构A修改conf文件夹下的group_genesis.ini
,配置项可参考手册。:
- cat > ./conf/group_genesis.ini << EOF
- [group]
- group_id=1
- [nodes]
- node0=127.0.0.1:30300
- node1=127.0.0.1:30301
- node2=127.0.0.1:30302
- node3=127.0.0.1:30303
- EOF
命令执行之后会修改./conf/group_genesis.ini文件:
- ;命令解释
- [group]
- ;群组id
- group_id=1
- [nodes]
- ;机构A节点p2p地址
- node0=127.0.0.1:30300
- ;机构A节点p2p地址
- node1=127.0.0.1:30301
- ;机构B节点p2p地址
- node2=127.0.0.1:30302
- ;机构B节点p2p地址
- node3=127.0.0.1:30303
教程中选择机构A生成群组创世区块,实际生产中可以通过联盟链委员会协商选择。
此步会根据机构A的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块,教程中需要机构A的meta下有名为cert_127.0.0.1_30300.crt
,cert_127.0.0.1_30301.crt
,cert_127.0.0.1_30302.crt
,cert_127.0.0.1_30303.crt
的节点证书,此步需要用到机构B的节点证书。
- ./generator --create_group_genesis ./group
分发群组1创世区块至机构B:
- cp ./group/group.1.genesis ~/generator-B/meta
机构A生成所属节点
在~/generator-A目录下执行下述命令
- cd ~/generator-A
生成机构A所属节点,此命令会根据用户配置的node_deployment.ini
文件生成相应的节点配置文件夹:
注意,此步指定的节点P2P连接信息peers.txt
为群组内其他节点的链接信息,多个机构组网的情况下需要将其合并。
- ./generator --build_install_package ./meta/peersB.txt ./nodeA
查看生成节点配置文件夹:
- ls ./nodeA
- # 命令解释 此处采用tree风格显示
- # 生成的文件夹nodeA信息如下所示,
- ├── monitor # monitor脚本
- ├── node_127.0.0.1_30300 # 127.0.0.1服务器 端口号30300的节点配置文件夹
- ├── node_127.0.0.1_30301
- ├── scripts # 节点的相关工具脚本
- ├── start_all.sh # 节点批量启动脚本
- └── stop_all.sh # 节点批量停止脚本
机构A启动节点:
- bash ./nodeA/start_all.sh
查看节点进程:
- ps -ef | grep fisco
- # 命令解释
- # 可以看到如下进程
- fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
- fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini
机构B生成所属节点
在~/generator-B目录下执行下述命令
- cd ~/generator-B
生成机构B所属节点,此命令会根据用户配置的node_deployment.ini
文件生成相应的节点配置文件夹:
- ./generator --build_install_package ./meta/peersA.txt ./nodeB
机构B启动节点:
- bash ./nodeB/start_all.sh
注解
节点启动只需要推送对应ip的node文件夹即可,如127.0.0.1的服务器,只需node_127.0.0.1_port对应的节点配置文件夹。多机部署时,只需要将生成的节点文件夹推送至对应服务器即可。
查看群组1节点运行状态
查看进程:
- ps -ef | grep fisco
- # 命令解释
- # 可以看到如下所示的进程
- fisco 15347 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30300/fisco-bcos -c config.ini
- fisco 15402 1 0 17:22 pts/2 00:00:00 ~/generator-A/nodeA/node_127.0.0.1_30301/fisco-bcos -c config.ini
- fisco 15457 1 0 17:22 pts/2 00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30302/fisco-bcos -c config.ini
- fisco 15498 1 0 17:22 pts/2 00:00:00 ~/generator-B/nodeB/node_127.0.0.1_30303/fisco-bcos -c config.ini
查看节点log:
- tail -f ./node*/node*/log/log* | grep +++
- # 命令解释
- # log中打印的+++即为节点正常共识
- info|2019-02-25 17:25:56.028692| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=833bd983...
- info|2019-02-25 17:25:59.058625| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=0,hash=343b1141...
- info|2019-02-25 17:25:57.038284| [g:1][p:264][CONSENSUS][SEALER]++++++++++++++++ Generating seal on,blkNum=1,tx=0,myIdx=1,hash=ea85c27b...
至此,我们完成了如图所示机构A、B搭建群组1的操作: