CITA 服务部署系列【四. 普通节点增删】

普通节点增删

增加节点

默认创建4个节点,需增加第5个节点(普通节点)参考下列指令

./env.sh ./scripts/create_cita_config.py append --chain_name "test-chain" --node "127.0.0.1:4004"
#添加新节点(普通节点),设置新端口号
/env.sh ./bin/cita setup test-chain/4
#初始化新节点配置文件
/daemon.sh ./bin/cita start test-chain/4
#启动新节点(普通节点)

检查新增节点的工作状态

检查服务进程

netstat -nutlp | grep 'cita-network'
#查看 Network 微服务进程端口号4004

netstat -nutlp | grep 'cita-jsonrpc'
#查看 RPC 微服务进程端口号1341

新增节点后检查 CITA 服务状态

curl -s -X POST --data '{"jsonrpc":"2.0","method":"peerCount","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool
#查看 CITA 节点总数量

Tips:
在单台主机部署4个共识节点的环境中,在该主机上新增普通节点后,新节点的数据会更新到所有共识节点的 network 微服务配置文件中,所以通过任何节点的 RPC 接口去查询节点数量都会增加;
普通节点在 CITA 服务中仅同步共识节点的数据,并不参与共识计算;所以只需要在任意一台共识节点的 network 微服务配置文件中添加普通节点的信息即可实现数据同步,但是仅可以在添加普通节点信息的共识节点 RPC 接口查询中看到节点数量增加;

curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1337 | python -m json.tool
#查看共识节点的区块高度

curl -s -X POST --data '{"jsonrpc":"2.0","method":"blockNumber","params":[],"id":1}' 127.0.0.1:1341 | python -m json.tool
#查看普通节点的区块高度,由于所有节点需要区块高度一致,所以新增节点将会通过 P2P 网络同步旧的数据信息;

Tips:
普通节点仅同步区块数据,所以在 CITA 服务中,并不参与投票,此信息可在节点配置目录下的logs/cita-bft.log文件来核实;
新节点将会同步共识节点的数据,所以在刚开始查看新节点的区块高度时,会快速增长,直到数据同步完成后才会恢复正常的增长速度;

停止节点

./daemon.sh ./bin/cita stop test-chain/4

删除节点

进入到所有添加了新节点配置信息的共识节点文件目录下,找到 Network 微服务的network.toml文件,删除新增节点peers条目即可,例如:

vim network.toml

#删除下列参数后保存退出:

[[peers]]
id_card = 4
ip = "127.0.0.1"
port = 4004

Tips:

  1. CITA中节点分为 普通节点 和 共识节点,普通节点可以通过修改各节点的配置network.toml停止通讯,共识节点需要管理员调用deleteNode(address)合约方法删除。
  2. 修改 network.toml 文件后 CITA的 cita-network 微服务会自动重新加载,不需要重启整个 CITA 服务。

:grinning: 很感谢您能够看到这里,如果文中的内容有描述不当,请您在本章节下方指出,我会尽快修改;

1赞

在 v0.22.0 以后,CITA 会支持 P2P, 删除节点这个动作,只能关停对应的节点便可,无需再修改文件 network.toml.

请问:
0.24版本,4个节点分布式部署的,我把0号节点的cita_secp256k1_sha3目录删掉了,从别的节点拷贝回来,执行bin/cita start test-chain/0 但是服务并没有启动.
我想恢复0号节点,应该怎么操作?

这个目录你还能找到吗?

原则上讲你只能拷贝节点目录下的 data 目录。因为这个目录下还有节点的配置信息。

本机上找不到了.
从别的机器上拷回来也不行是吗?

可以啊。别的机器有节点 0 的配置吗?

注意:这里提的是节点 0 的配置,而不是别的节点配置哦!

节点0的配置是指哪个文件或者目录?
其他机器上的文件都是开始从0节点拷过去的.

这个命令报什么错误?如果是整个文件夹拷贝,应该是可以的。然后启动后会同步数据。

没有报错.
但是没有相关进程.

你可以看一下 test-chain/0/logs/ 下的内容, 看有什么错误。
可能是你在启动前没有先 setup 。 需要先执行:

bin/cita setup test-chain/0

执行setup报错,

shell-init: error retrieving current directory: getcwd: cannot access parent directories: No such file or directory
error: exec: "bin/cita": stat bin/cita: no such file or directory

是在 /data/cita/cita_secp256k1_sha3目录下执行的.
我重新下载压缩包,解压,执行create也报这个错.所以如果我想重新部署的话,需要删除什么文件或目录才行?

在目录 cita_secp256k1_sha3 下没有 CITA 的发布包吗?

那你 bin/cita start test-chain/0 是怎么执行的?

目录下是有bin localtime resource scripts test-chain几个文件夹/文件的.
简单谷歌了一下,也没找到解决错误的方法.

你执行:

docker ps

看一下,看是不是有 cita_run 的容器正在运行?如果是,先 stop 这个容器再执行。

是这样的.
问题解决.
还有2个问题:
1.从别的节点拷贝过来,启动后,还需要从头追块?
2.可以设置空块不出吗?

  1. 是的!你可以考虑将其它节点的数据 copy 过来。
  2. 暂时不可以。

好的,谢谢.
doker杀进程后,我先执行的setup,
报错sudo: unable to resolve host Beta–3.
我没管他,接着执行start.
好像服务也起来了,这样有问题吗?

没有。那是因为你在宿主机没有配 hosts 的原故。