An enterprise-grade Java-based, Apache 2.0 licensed Ethereum client https://wiki.hyperledger.org/display/besu
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
besu/docs/Deploying-Pantheon/High-Availability.md

4.4 KiB

description: Pantheon high availability

High Availability of JSON-RPC and RPC Rub/Sub APIs

To enable high availability to the RPC Pub/Sub API over WebSockets or the JSON-RPC API run and synchronize multiple Pantheon nodes to the network. Use a load balancer to distribute requests across nodes in the cluster that are ready to receive requests.

Load Balancer

Determining When a Node is Ready

Use the readiness endpoint to determine when a node is ready.

!!! note The minimum number of peers and number of blocks from the best known block for a node to be considered ready is deployment specific.

Transaction Nonces

The account nonce for the next transaction is obtained using eth_getTransactionCount. The account nonce depends on the transactions in the transaction pool. If eth_getTransactionCount and eth_sendRawTransaction requests for a specific account are sent to multiple nodes, the eth_getTransactionCount results can be incorrect.

!!! note If using private transactions, eea_getTransactionCount is used to obtain the account nonce and eea_sendRawTransaction to send private transactions.

To get correct account nonces when distributing requests across a cluster, do one of:

  • Track the next nonce outside of the Pantheon node (as MetaMask does)
  • Configure the load balancer in sticky mode so requests from a specific account are sent to a single node unless that node is unavailable.

Subscriptions

You can subscribe to events using:

We recommend using RPC Pub/Sub over WebSockets because WebSockets connections are associated a specific node and do not require using the load balancer in sticky mode.

If using filters over HTTP, configure the load balancer in sticky mode to associate the subscription with a specific node.

Recovering from Dropped Subscriptions

Subscriptions can be dropped if:

  • WebSockets connection is disconnected
  • Node serving the subscription is removed from the ready pool

If a subscription is dropped, events can be missed while reconnecting to a different node. To recover dropped messages, create another subscription and follow the process for that subscription type:

New Headers

Use eth_getBlockByNumber to request information on blocks from the last block before the subscription dropped to the first block received from the new subscription.

Logs

Use eth_getLogs to request logs from the block number of the last log received before the subscription dropped to the current chain head.

New Pending Transactions

Use txpool_pantheonTransactions to request all pending transactions for the new node.

!!! note Nodes do not all store the same pending transactions.

Dropped Pending Transactions

Use txpool_pantheonTransactions to request all pending transactions for the new node.

!!! note Nodes do not all store the same pending transactions.

Syncing

The syncing state of each node is specific to that node. Use eth_syncing to retrieve the syncing state of the new node.