删除节点报错

先上异常输出:

$ pwd
/home/cbpm/data/cita/cita_secp256k1_sha3

$ ls
bin  localtime  resource  scripts  test-chain

$ ls test-chain/
0  1  2  3  4  6  template

$ bin/cita append --chain_name test-chain --node "127.0.0.1:4005"
Traceback (most recent call last):
File "/opt/cita/scripts/create_cita_config.py", line 553, in <module>
main()
File "/opt/cita/scripts/create_cita_config.py", line 547, in main
funcs_router[args.subcmd](args, work_dir)
File "/opt/cita/scripts/create_cita_config.py", line 359, in run_subcmd_append
info.append_node(args.node)
File "/opt/cita/scripts/create_cita_config.py", line 256, in append_node
shutil.copytree(self.configs_dir, node_dir, False)
File "/usr/lib/python3.6/shutil.py", line 321, in copytree
os.makedirs(dst)
File "/usr/lib/python3.6/os.py", line 220, in makedirs
mkdir(name, mode)
FileExistsError: [Errno 17] File exists: '/opt/cita/test-chain/6'

操作过程:
1、本来是使用append命令像创建一个分布式的节点(IP用的是局域网内可以相互访问到的),然后将test-chain 目录下的新节点目录和template目录打包传输到目标服务器,发现创世块的四个节点IP全是127.0.0.1,无法启动该节点,出现这位朋友出现的问题(我目前不知道这是不是和前面配置中的IP有关),所以退而求其次,准备在创世块所在服务器新增节点。
2、在创世块所在服务器,删除各个节点下的network.toml中的[[peer]]对应IP数据,以及template、configsnetwork.toml中的对应网络节点,然后使用上问题输出中的append命令添加块出现问题。

更新:
我首先在服务器A上使用create创建了四个节点,都跑在 test-chain这条链上,然后再在服务器A上使用append追加第五个节点,这个节点IP使用的是目标服务器B的IP,使用的命令如下:

./bin/cita append --chain_name test-chain --node "192.168.31.128:4005"

创建好后,就开始了以上的第一步,将A服务器上的第五号节点的目录和template目录打包发送到服务器B,但是出错。

然后放弃在服务器B上的操作,进入到上面的第二步,并且我把5号节点的目录删除了。

这样操作之后,append新节点就开始出错:append执行之后,test-chain目录下出现了5这个目录,但是报了一个错,与上面的输出类似:File exists: ‘/opt/cita/test-chain/4’,所以我手动将5这个目录改为4:

$ mv 4 5

然后,就是上面代码清单里面的append操作以及其异常输出了。

  1. 节点的ip是在cita create的时候通过参数传进来的。哪个节点在哪个机器上跑,ip是什么,这些信息要在生成配置文件之前就确认好。后面也可以改,但是就比较麻烦,要人工编辑多个文件,还很容易出错。还不如直接重新生成一套配置文件。
  2. 你执行append命令的文件夹有问题,节点序号都不连续。根据报错信息,应该是已经有5号节点了,所以给新增节点安排的序号是6,但是你这里是没有5号节点的文件夹,反而是6号的文件夹已经存在了。实际操作的时候应该这样:在一个单独的地方执行cita create生成最初的配置文件,然后把文件夹拷贝到对应的服务器上去运行,但是原来那份配置文件要长期保留,后续的append等操作都在原来那里执行,然后再下发到具体运行节点的机器上去,配置文件能用git等版本控制工具管理起来最好。

嗯嗯,我更新了下我的问题,我之前可能没有描述清除 :frowning_face:

ok,针对更新的内容,我说一下你操作中错误的地方。

  1. create命令创建的初始4个节点,这四个节点默认都是共识节点。
  2. 通过append命令增加第5个节点,这个节点是个只读节点,想要升级成共识节点,需要先把节点运行起来,然后通过系统合约将其升级为共识节点。
  3. 第5个节点运行不起来,具体错误有需要可以单独开个帖子讨论。这里提一点可能的原因,每次append的时候,不只是新增加了一个节点目录,还会自动更新之前所有节点的network.toml文件,也就是说不只是要做你进行的启动第5号节点的操作,前面4个已有节点的配置文件也要更新。也就是说,新增一个节点的时候,之前的节点配置文件一定要全部都在,这也是你最开始遇到报错的原因。
  4. 这里你把5号节点删了,这个操作是错的,即便是增加节点时传递的信息有误,也不要删除,直接忽略再增加一个新的节点就可以了。前面第2条讲过,新增节点都是只读节点,一个只读节点没运行是不影响区块链系统的。但是根据第3条,如果你后续还想要新增节点,这个废弃节点的配置文件也得保留,工具内部有维护一个自增的序号,如果不连续了就不行了。