组员管理

FISCO BCOS引入了游离节点、观察者节点和共识节点,这三种节点类型可通过控制台相互转换。

  • 组员
    • 共识节点:参与共识的节点,拥有群组的所有数据(搭链时默认都生成共识节点)。
    • 观察者节点:不参与共识,但能实时同步链上数据的节点。
  • 非组员
    • 游离节点:已启动,待等待加入群组的节点。处在一种暂时的节点状态,不能获取链上的数据。

操作命令

控制台提供了 addSealeraddObserverremoveNode 三类命令将指定节点转换为共识节点、观察者节点和游离节点,并可使用 getSealerListgetObserverListgetNodeIDList 查看当前组的共识节点列表、观察者节点列表和组内所有节点列表。

  • addSealer:根据节点NodeID设置对应节点为共识节点;
  • addObserver:根据节点NodeID设置对应节点为观察节点;
  • removeNode:根据节点NodeID设置对应节点为游离节点;
  • getSealerList:查看群组中共识节点列表;
  • getObserverList:查看群组中观察节点列表;
  • getNodeIDList:查看节点已连接的所有其他节点的NodeID。

例: 将指定节点分别转换成共识节点、观察者节点、游离节点,主要操作命令如下:

重要

节点准入操作前,请确保:

  • 操作节点Node ID存在,节点Node ID可在节点目录下执行 cat conf/node.nodeid获取
  • 节点加入的区块链所有节点共识正常:正常共识的节点会输出+++日志
  1. # 获取节点Node ID(设节点目录为~/nodes/192.168.0.1/node0/)
  2. $ cat ~/fisco/nodes/192.168.0.1/node0/conf/node.nodeid
  3. 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  4. # 连接控制台(设控制台位于~/fisco/console目录)
  5. $ cd ~/fisco/console
  6. $ bash start.sh
  7. # 将指定节点转换为共识节点
  8. [group:1]> addSealer 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  9. # 查询共识节点列表
  10. [group:1]> getSealerList
  11. [
  12. 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  13. ]
  14. # 将指定节点转换为观察者节点
  15. [group:1]> addObserver 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  16. # 查询观察者节点列表
  17. [group:1]> getObserverList
  18. [
  19. 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  20. ]
  21. # 将指定节点转换为游离节点
  22. [group:1]> removeNode 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  23. # 查询节点列表
  24. [group:1]> getNodeIDList
  25. [
  26. 7a056eb611a43bae685efd86d4841bc65aefafbf20d8c8f6028031d67af27c36c5767c9c79cff201769ed80ff220b96953da63f92ae83554962dc2922aa0ef50
  27. ]
  28. [group:1]> getSealerList
  29. []
  30. [group:1]> getObserverList
  31. []

操作案例

下面结合具体操作案例详细阐述群组扩容操作及节点退网操作。扩容操作分两个阶段, 分别为将节点加入网络将节点加入群组。退网操作也分为两个阶段,为将节点退出群组将节点退出网络

操作方式

  • 修改节点配置:节点修改自身配置后重启生效,涉及的操作项目包括网络的加入/退出、CA黑名单的列入/移除
  • 交易共识上链:节点发送上链交易修改需群组共识的配置项,涉及的操作项目包括节点类型的修改。目前提供的发送交易途径为控制台、SDK提供的precompiled service接口。
  • RPC查询:使用curl命令查询链上信息,涉及的操作项目包括群组节点的查询

操作步骤

本节将以下图为例对上述扩容操作及退网操作进行描述。虚线表示节点间能进行网络通信,实线表示节点间在可通信的基础上具备群组关系,不同颜色区分不同的群组关系。下图有一个网络,包含三个群组,其中群组Group3有三个节点。Group3是否与其他群组存在交集节点,不影响以下操作过程的通用性。

../../_images/multi_ledger_example.png

群组例子

Group3的相关节点信息举例为:

节点1的目录名为node0,IP端口为127.0.0.1:30400,nodeID前四个字节为b231b309…

节点2的目录名为node1,IP端口为127.0.0.1:30401,nodeID前四个字节为aab37e73…

节点3的目录名为node2,IP端口为127.0.0.1:30402,nodeID前四个字节为d6b01a96…

A节点加入网络

场景描述:

节点3原先不在网络中,现在加入网络。

操作顺序:

1 . 进入nodes同级目录,在该目录下拉取并执行gen_node_cert.sh生成节点目录,目录名以node2为例,node2内有conf/目录;

  1. # 获取脚本
  2. $ curl -LO https://raw.githubusercontent.com/FISCO-BCOS/FISCO-BCOS/master/tools/gen_node_cert.sh && chmod u+x gen_node_cert.sh
  3. # 执行,-c为生成节点所提供的ca路径,agency为机构名,-o为将生成的节点目录名
  4. $ ./gen_node_cert.sh -c nodes/cert/agency -o node2

注解

2 . 拷贝node2到nodes/127.0.0.1/下,与其他节点目录(node0node1)同级;

  1. $ cp -r ./node2/ nodes/127.0.0.1/

3 . 进入nodes/127.0.0.1/,拷贝node0/config.ininode0/start.shnode0/stop.sh到node2目录;

  1. $ cd nodes/127.0.0.1/
  2. $ cp node0/config.ini node0/start.sh node0/stop.sh node2/

4 . 修改node2/config.ini。对于[rpc]模块,修改channel_listen_portjsonrpc_listen_port;对于[p2p]模块,修改listen_port并在node.中增加自身节点信息;

  1. $ vim node2/config.ini
  2. [rpc]
  3. ;rpc listen ip
  4. listen_ip=127.0.0.1
  5. ;channelserver listen port
  6. channel_listen_port=20302
  7. ;jsonrpc listen port
  8. jsonrpc_listen_port=8647
  9. [p2p]
  10. ;p2p listen ip
  11. listen_ip=0.0.0.0
  12. ;p2p listen port
  13. listen_port=30402
  14. ;nodes to connect
  15. node.0=127.0.0.1:30400
  16. node.1=127.0.0.1:30401
  17. node.2=127.0.0.1:30402

5 . 节点3拷贝节点1的node1/conf/group.3.genesis(内含群组节点初始列表)和node1/conf/group.3.ininode2/conf目录下,不需改动;

  1. $ cp node1/conf/group.3.genesis node2/conf/
  2. $ cp node1/conf/group.3.ini node2/conf/

6 . 执行node2/start.sh启动节点3;

  1. $ ./node2/start.sh

7 . 确认节点3与节点1和节点2的连接已经建立,加入网络操作完成。

  1. # 在打开DEBUG级别日志前提下,查看自身节点(node2)连接的节点数及所连接的节点信息(nodeID)
  2. # 以下日志表明节点node2与两个节点(节点的nodeID前4个字节为b231b309、aab37e73)建立了连接
  3. $ tail -f node2/log/log* | grep P2P
  4. debug|2019-02-21 10:30:18.694258| [P2P][Service] heartBeat ignore connected,endpoint=127.0.0.1:30400,nodeID=b231b309...
  5. debug|2019-02-21 10:30:18.694277| [P2P][Service] heartBeat ignore connected,endpoint=127.0.0.1:30401,nodeID=aab37e73...
  6. info|2019-02-21 10:30:18.694294| [P2P][Service] heartBeat connected count,size=2

注解

  • 若启用了白名单,需确保所有节点的config.ini中的白名单都已配置了所有的节点,并正确的将白名单配置刷新入节点中。参考《CA黑白名单》;
  • 从节点1拷贝过来的config.ini的其余配置可保持不变;
  • 理论上,节点1和2不需修改自身的P2P节点连接列表,即可完成扩容节点3的操作;
  • 步骤5中所选择的群组建议为节点3后续需加入的群组;
  • 建议用户在节点1和2的config.ini的P2P节点连接列表中加入节点3的信息并重启节点1和2,保持全网节点的全互联状态。

A节点退出网络

场景描述:

节点3已在网络中,与节点1和节点2通信,现在退出网络。

操作顺序:

1 . 对于节点3,将自身的P2P节点连接列表内容清空,重启节点3;

  1. # 在node2目录下执行
  2. $ ./stop.sh
  3. $ ./start.sh
  4. nohup: appending output to nohup.out

2 . 对于节点1和2,将节点3从自身的P2P节点连接列表中移除(如有),重启节点1和2;

3 . 确认节点3与节点1(和2)的原有连接已经断开,退出网络操作完成。

注解

  • 节点3需先退出群组再退出网络,退出顺序由用户保证,系统不再作校验
  • 网络连接由节点主动发起,如缺少第2步,节点3仍可感知节点1和节点2发起的P2P连接请求,并建立连接,可使用CA黑名单避免这种情况。
  • 若启用了白名单,需将退出节点的从所有节点的config.ini的白名单配置中删除,并正确的将新的白名单配置刷入节点中。参考《CA黑白名单》。

A节点加入群组

场景描述:

群组Group3原有节点1和节点2,两节点轮流出块,现在将节点3加入群组。

操作顺序:

  1. 节点3加入网络;
  2. 使用控制台addSealer根据节点3的nodeID设置节点3为共识节点
  3. 使用控制台getSealerList查询group3的共识节点中是否包含节点3的nodeID,如存在,加入群组操作完成。

注解

  • 节点3的NodeID可以使用`cat nodes/127.0.0.1/node2/conf/node.nodeid`获取;
  • 节点3首次启动会将配置的群组节点初始列表内容写入群组节点系统表,区块同步结束后,群组各节点的群组节点系统表均一致
  • 节点3需先完成网络准入后,再执行加入群组的操作,系统将校验操作顺序
  • 节点3的群组固定配置文件需与节点1和2的一致

A节点退出群组

场景描述:

群组Group3原有节点1、节点2和节点3,三节点轮流出块,现在将节点3退出群组。

操作顺序:

  1. 使用控制台removeNode根据节点3的NodeID设置节点3为游离节点
  2. 使用控制台getSealerList查询group3的共识节点中是否包含节点3的nodeID,如已消失,退出群组操作完成。

补充说明:

注解

  • 节点3可以共识节点或观察节点的身份执行退出操作。