问题总结20210907:
问:同一机房同一局域网下使用两台机器同步预备主网node,一个节点同步,一个节点不同步,双方都添加了–bootnodes?
答:
你在环境变量里配置的bootnode会覆盖docker镜像里预先配置好的bootnode,从而导致两边形成了一个死循环,如果你的两台node机器在同一个netmask内那就不需要额外指定bootnode。
就是你如果docker 容器启动以后,你打印log (命令大概是 docker logs khala-node),在前二三十行,你能看到类似
2021-09-07 12:53:13 [Relaychain] Discovered new external address for our node: /ip4/127.0.0.1/tcp/30334/ws/p2p/12D3KooWCGyKWGGFvECkhfRNrC27DKgKLFkcvzviqEd7cCyw1AcV
2021-09-07 12:53:13 [Parachain] Discovered new external address for our node: /ip4/127.0.0.1/tcp/30333/ws/p2p/12D3KooWS7Es3o7dZEKrnwVQo5wV8BcepzeMj15xo7dMwy9PojWg
2021-09-07 12:53:14 [Relaychain] Discovered new external address for our node: /ip4/221.221.113.150/tcp/30334/ws/p2p/12D3KooWCGyKWGGFvECkhfRNrC27DKgKLFkcvzviqEd7cCyw1AcV
2021-09-07 12:53:14 [Parachain] Discovered new external address for our node: /ip4/221.221.113.150/tcp/30333/ws/p2p/12D3KooWS7Es3o7dZEKrnwVQo5wV8BcepzeMj15xo7dMwy9PojWg
的输出,这个就是你的这台机器的 peerid,他显示多个是根据你网络的IP来的,不用在意,关键是最后遍的字符串。
那么你要做的是搞清楚能连上网络的节点的 peerid
然后关闭连不上的,然后改一下启动参数,我这里的参考比如
docker run -dti --rm --name khala-node -e NODE_NAME=khala-node -e NODE_ROLE=MINER -e PARACHAIN_EXTRA_ARGS="–reserved-nodes=/ip4/10.0.0.9/tcp/30333/ws/p2p/12D3KooWQKDoz3Lnxiod6HDXAJNd8ZuHvA2SZCcUHJwuVoYAEqVR" -e RELAYCHAIN_EXTRA_ARGS="–reserved-nodes=/ip4/10.0.0.9/tcp/30334/ws/p2p/12D3KooWKxJYua9zHZQv2Qonsiq5dndhbkoa2nb5mmwpRejXhnbz" -p 9933:9933 -p 9944:9944 -p 9615:9615 -p 30333:30333 -p 9934:9934 -p 9945:9945 -p 9616:9616 -p 30334:30334 -v $HOME/data/khala-node:/root/data phalanetwork/khala-node
重点是
-e PARACHAIN_EXTRA_ARGS="–reserved-nodes=/ip4/10.0.0.9/tcp/30333/ws/p2p/12D3KooWQKDoz3Lnxiod6HDXAJNd8ZuHvA2SZCcUHJwuVoYAEqVR"
和
-e RELAYCHAIN_EXTRA_ARGS="–reserved-nodes=/ip4/10.0.0.9/tcp/30334/ws/p2p/12D3KooWKxJYua9zHZQv2Qonsiq5dndhbkoa2nb5mmwpRejXhnbz"
你要分别填日志里打印出来的 peerid,把前边 IP 部分换成你的内网 IP
这个 --reserved-nodes 的意思是优先去连接指定的节点,也就是你那台能连上网络的节点,然后还是要观察一下,p2p网络特别是你如果有 NAT 连通性还是会有点影响,这个不是特别好帮忙解决。