机构A、B构建群组1

初始化机构A

教程中为了简化操作直接生成了机构证书和私钥,实际应用时应该由机构本地生成私钥agency.key,再生成证书请求文件,向证书签发机构获取机构证书agency.crt

在证书生成机构目录下操作:

  1. cd ~/generator

生成机构A证书:

  1. ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyA

查看机构证书及私钥:

  1. ls dir_agency_ca/agencyA/
  1. # 上述命令解释
  2. # 从左至右分别为机构证书、机构私钥、链证书签发机构证书中间文件、链证书、证书配置文件
  3. agency.crt agency.key ca-agency.crt ca.crt cert.cnf

发送链证书、机构证书、机构私钥至机构A,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

  1. cp ./dir_chain_ca/ca.crt ./dir_agency_ca/agencyA/agency.crt ./dir_agency_ca/agencyA/agency.key ~/generator-A/meta/

初始化机构B

在证书生成机构目录下操作:

  1. cd ~/generator

生成机构B证书:

  1. ./generator --generate_agency_certificate ./dir_agency_ca ./dir_chain_ca agencyB

发送链证书、机构证书、机构私钥至机构B,示例是通过文件拷贝的方式,从证书授权机构将机构证书发送给对应的机构,放到机构的工作目录的meta子目录下

  1. 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目录下执行下述命令

  1. cd ~/generator-A
  1. cat > ./conf/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; host ip for the communication among peers.
  7. ; Please use your ssh login ip.
  8. p2p_ip=127.0.0.1
  9. ; listen ip for the communication between sdk clients.
  10. ; This ip is the same as p2p_ip for physical host.
  11. ; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30300
  17. channel_listen_port=20200
  18. jsonrpc_listen_port=8545
  19.  
  20. [node1]
  21. p2p_ip=127.0.0.1
  22. rpc_ip=127.0.0.1
  23. p2p_listen_port=30301
  24. channel_listen_port=20201
  25. jsonrpc_listen_port=8546
  26. EOF

机构B修改配置文件

机构B修改conf文件夹下的node_deployment.ini如下图所示:

在~/generator-B目录下执行下述命令

  1. cd ~/generator-B
  1. cat > ./conf/node_deployment.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [node0]
  6. ; host ip for the communication among peers.
  7. ; Please use your ssh login ip.
  8. p2p_ip=127.0.0.1
  9. ; listen ip for the communication between sdk clients.
  10. ; This ip is the same as p2p_ip for physical host.
  11. ; But for virtual host e.g. vps servers, it is usually different from p2p_ip.
  12. ; You can check accessible addresses of your network card.
  13. ; Please see https://tecadmin.net/check-ip-address-ubuntu-18-04-desktop/
  14. ; for more instructions.
  15. rpc_ip=127.0.0.1
  16. p2p_listen_port=30302
  17. channel_listen_port=20202
  18. jsonrpc_listen_port=8547
  19.  
  20. [node1]
  21. p2p_ip=127.0.0.1
  22. rpc_ip=127.0.0.1
  23. p2p_listen_port=30303
  24. channel_listen_port=20203
  25. jsonrpc_listen_port=8548
  26. EOF

机构A生成并发送节点信息

在~/generator-A目录下执行下述命令

  1. cd ~/generator-A

机构A生成节点证书及P2P连接信息文件,此步需要用到上述配置的node_deployment.ini,及机构meta文件夹下的机构证书与私钥,机构A生成节点证书及P2P连接信息文件

  1. ./generator --generate_all_certificates ./agencyA_node_info

查看生成文件:

  1. ls ./agencyA_node_info
  1. # 上述命令解释
  2. # 从左至右分别为需要交互给机构A的节点证书,节点P2P连接地址文件(根据node_deployment.ini生成的本机构节点信息)
  3. cert_127.0.0.1_30300.crt cert_127.0.0.1_30301.crt peers.txt

机构生成节点时需要指定其他节点的节点P2P连接地址,因此,A机构需将节点P2P连接地址文件发送至机构B

  1. cp ./agencyA_node_info/peers.txt ~/generator-B/meta/peersA.txt

机构B生成并发送节点信息

在~/generator-B目录下执行下述命令

  1. cd ~/generator-B

机构B生成节点证书及P2P连接信息文件:

  1. ./generator --generate_all_certificates ./agencyB_node_info

生成创世区块的机构需要节点证书,示例中由A机构生成创世区块,因此B机构除了发送节点P2P连接地址文件外,还需发送节点证书至机构A

发送证书

  1. cp ./agencyB_node_info/cert*.crt ~/generator-A/meta/

发送节点P2P连接地址文件

  1. cp ./agencyB_node_info/peers.txt ~/generator-A/meta/peersB.txt

机构A生成群组1创世区块

在~/generator-A目录下执行下述命令

  1. cd ~/generator-A

机构A修改conf文件夹下的group_genesis.ini,配置项可参考手册。:

  1. cat > ./conf/group_genesis.ini << EOF
  2. [group]
  3. group_id=1
  4.  
  5. [nodes]
  6. node0=127.0.0.1:30300
  7. node1=127.0.0.1:30301
  8. node2=127.0.0.1:30302
  9. node3=127.0.0.1:30303
  10. EOF

命令执行之后会修改./conf/group_genesis.ini文件:

  1. ;命令解释
  2. [group]
  3. ;群组id
  4. group_id=1
  5.  
  6. [nodes]
  7. ;机构A节点p2p地址
  8. node0=127.0.0.1:30300
  9. ;机构A节点p2p地址
  10. node1=127.0.0.1:30301
  11. ;机构B节点p2p地址
  12. node2=127.0.0.1:30302
  13. ;机构B节点p2p地址
  14. node3=127.0.0.1:30303

教程中选择机构A生成群组创世区块,实际生产中可以通过联盟链委员会协商选择。

此步会根据机构A的meta文件夹下配置的节点证书,生成group_genesis.ini配置的群组创世区块,教程中需要机构A的meta下有名为cert_127.0.0.1_30300.crtcert_127.0.0.1_30301.crtcert_127.0.0.1_30302.crtcert_127.0.0.1_30303.crt的节点证书,此步需要用到机构B的节点证书。

  1. ./generator --create_group_genesis ./group

分发群组1创世区块至机构B:

  1. cp ./group/group.1.genesis ~/generator-B/meta

机构A生成所属节点

在~/generator-A目录下执行下述命令

  1. cd ~/generator-A

生成机构A所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹:

注意,此步指定的节点P2P连接信息peers.txt为群组内其他节点的链接信息,多个机构组网的情况下需要将其合并。

  1. ./generator --build_install_package ./meta/peersB.txt ./nodeA

查看生成节点配置文件夹:

  1. ls ./nodeA
  1. # 命令解释 此处采用tree风格显示
  2. # 生成的文件夹nodeA信息如下所示,
  3. ├── monitor # monitor脚本
  4. ├── node_127.0.0.1_30300 # 127.0.0.1服务器 端口号30300的节点配置文件夹
  5. ├── node_127.0.0.1_30301
  6. ├── scripts # 节点的相关工具脚本
  7. ├── start_all.sh # 节点批量启动脚本
  8. └── stop_all.sh # 节点批量停止脚本

机构A启动节点:

  1. bash ./nodeA/start_all.sh

查看节点进程:

  1. ps -ef | grep fisco
  1. # 命令解释
  2. # 可以看到如下进程
  3. 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
  4. 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目录下执行下述命令

  1. cd ~/generator-B

生成机构B所属节点,此命令会根据用户配置的node_deployment.ini文件生成相应的节点配置文件夹:

  1. ./generator --build_install_package ./meta/peersA.txt ./nodeB

机构B启动节点:

  1. bash ./nodeB/start_all.sh

注解

节点启动只需要推送对应ip的node文件夹即可,如127.0.0.1的服务器,只需node_127.0.0.1_port对应的节点配置文件夹。多机部署时,只需要将生成的节点文件夹推送至对应服务器即可。

查看群组1节点运行状态

查看进程:

  1. ps -ef | grep fisco
  1. # 命令解释
  2. # 可以看到如下所示的进程
  3. 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
  4. 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
  5. 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
  6. 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:

  1. tail -f ./node*/node*/log/log* | grep +++
  1. # 命令解释
  2. # log中打印的+++即为节点正常共识
  3. 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...
  4. 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...
  5. 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的操作:

../../_images/tutorial_step_1.png