Ich habe 3 Knoten, die in einem privaten Netzwerk ausgeführt werden.
Nachdem ich diese Frage gestellt habe, habe ich manuell node1
als Peer zu node2
und hinzugefügt node3
, sodass mein Netzwerk so aussieht:
_______
---------> | node2 |
/ |_______|
v
_______
| node1 |
|_______|
^
\ _______
---------> | node3 |
|_______|
Ich habe die Knoten letzte Nacht laufen lassen, aber gegen 22 Uhr (BRST), node2
und node3
aufgehört zu hören node1
( admin.peers
war leer), während node1
sie noch mit beiden verbunden war ( admin.peers
enthielt 2 Elemente), aber keine Interaktion erhalten.
Ist es möglich, dass dies ein Problem mit dem Ethereum-Protokoll ist oder wäre es etwas anderes?
Ich betreibe die Knoten auf derselben physischen Maschine, aber in verschiedenen VMs. Diese VMs wurden Ubuntu 12.04
installiert.
Die VMs laufen über ein CentOS mit VMWare vCenter.
Zusammenfassung
Ich hätte erwartet, dass die Bootnodes-Parameter es Knoten 2 und Knoten 3 ermöglichen würden, Knoten 1, Knoten 2 und Knoten 3 zu finden und dann für alle Knoten, ihre Peer-Verbindungen beizubehalten.
Aus Henrique Barcelos
dem Problem von geht hervor, dass diese Konfiguration in einem privaten Netzwerk, in dem die Knoten in einer VM ausgeführt werden, nicht stabil ist.
Die Alternative zur Verwendung static-nodes.json
scheint keine stabile Verbindung zu bieten.
Die nächste zu versuchende Konfiguration ist die Verwendung trusted-nodes.json
und Angabe des --maxpeers
Parameters
Nachfolgend sind die Schritte aufgeführt, die wir unternehmen, um das Problem zu lösen.
Ein interessantes Problem.
Wahrscheinlichkeitstechnisch würde ich sagen, dass es höchst unwahrscheinlich ist, dass dies ein Problem mit dem Ethereum-Protokoll ist, da es robust genug für das Internet ist.
Sie haben angegeben, dass Ihre Zeit mit der Netzwerkzeit synchronisiert ist. Dies scheint ein häufig auftretendes Problem zu sein, und deshalb habe ich die obige Frage gestellt.
Schauen wir uns Ihre Konfiguration an.
Frage. Betreiben Sie andere Ethereum-Mainnet-Knoten in Ihrem privaten Netzwerk? Der Grund, warum ich dies frage, ist, dass es möglicherweise zu einem Konflikt mit dem Netzwerkport 30303 kommt, der sich auf den ersten Link in Ihrer Frage bezieht.
Vom ersten Link in Ihrer Frage starten Sie Ihre Geth-Instanzen auf den verschiedenen Knoten mit dem folgenden Befehl:
geth --verbosity 4 --autodag --nat any --genesis /opt/blockchain/genesis.json
--datadir /opt/blockchain/data --networkid 4828 --port 30303 --rpc
--rpcaddr 10.48.247.25 --rpcport 8545 --rpcapi db,eth,net,web3,admin
--rpccorsdomain '*' --fast --mine --ipcdisable
Knoten 1 wurde als Ihr Bootknoten festgelegt. Knoten 2 und 3 haben die Datei /opt/blockchain/data/static-nodes.json mit den folgenden Informationen:
["enode://{node1publickey}@{node1ip}:30303"]
Die Informationen in /opt/blockchain/data/static-nodes.json in 5. oben stimmen mit den Startinformationen in der Geth-Instanz node1 überein, die mit dem Befehl admin.nodeInfo in der Geth-Instanz node1 angezeigt werden.
...
enode: "enode://{node1publickey}@{node1ip}:30303",
...
Ist das richtig?
--nat any
Parameter --networkid
ist einzigartig aus dem Mainnet "1" --port 30303
Netzwerk, und selbst dies sollte kein Problem sein, da es sich um eine andere IP- Adresse handelt --rpcaddr
sollte die IP-Adresse jeder Maschine sein. Knoten 1 sollte die IP-Adresse von Knoten 1 haben. Knoten 2 sollte die IP-Adresse von Knoten 2 haben und Knoten 3 sollte die IP-Adresse von Knoten 3 haben. --rpcport
, --rpcapi
und --rpccorsdomain
sollte Ihre Netzwerkkonnektivität nicht beeinträchtigen. --fast
Parameter, da Ihre Blockchain sowieso klein sein sollte, da es sich um eine interne Testnet-Blockchain handelt. --mine
und --ipcdisable
-Parameter sollten Ihre Konnektivität nicht beeinträchtigen.--bootnode
Parameter zu entfernen und die /opt/blockchain/data/static-nodes.json
Methode in 5. oben auf den Knoten 2 und 3 auszuprobieren. Führen Sie dies eine Weile aus und hoffen wir, dass Sie keine Verbindungsabbrüche haben. Wir können dies von der Liste streichen, wenn Sie immer noch Verbindungsabbrüche haben.Unten hinzugefügt am 04.12.2016:
Henrique Barcelos
hat die static-nodes.json
Methode verwendet, damit sich die Peers finden, aber die Peer-Verbindungen sind abgebrochen. Ich schlage vor, es zu versuchen, trusted-nodes.json
da diese vertrauenswürdige Peer-Knoten angeben, mit denen eine Verbindung hergestellt werden soll, und die nicht durch die --maxpeers
Verbindungsbeschränkungen blockiert würden.static-nodes.json
Option keine Verbindung herstellen würde, es sei denn, ich füge einen Parameter ungleich Null hinzu --maxpeers
, obwohl --maxpeers
der Standardwert 25 sein soll.node1
ist der Bootnode, ich übergebe seinen Enode über --bootnodes
an node2
und node3
, aber es gibt keinenstatic-nodes.json
--nat
ist laut Dokumentation standardmäßig auf "beliebig" eingestelltstatic-nodes.json
Datei in node2
und hinzugefügt node3
, mit einem Array, das den Enode von enthält node1
. Ich lasse die Knoten die ganze Nacht laufen und kommentiere morgen die Ergebnisse hier (ich bin um GMT-0300)static-nodes.json
geholfen, aber ich kann es nicht genau wissen.--maxpeers
, weil der Standardwert 25 ist und ich nur 3 laufende Knoten habe :/--dev
, sollte ich sein?Developer mode: pre-configured private network with several debugging flags
.--dev
Modus bemerkt. Die Knoten haben sich die ganze Nacht über gut verhalten, bisher gab es keine Abweichungen.admin.verbosity(6)
, um die P2P-Verbindungsversuche zu verfolgen.trusted-nodes.json
? Müssen Sie geth neu starten, damit es die Liste der Enodes verwendet?
Datenschutz ist ein Menschenrecht.eth
Henrique Barcelona
JackWinters
Henrique Barcelona