I run three full ETH nodes, one on my local, home network, and two in the cloud. All three make use of geth.
My "local" node, is always in sync with mainnet, i.e. always showing the same last block number (or within 1 or 2 blocks of the same number) as the LAST BLOCK number shown on Etherscan.io.
My "cloud" nodes, on the otherhand, spend the majority (yes, the majority!) of their time lagging by hundreds (or even thousands) of blocks behind mainnet. This situation has persisted for several months. To be clear, that is to say that there are times when the nodes are fully synced, but this situation will last for no more than a few hours, and then the nodes will spend 24 - 48 - 72 hrs lagging, and lagging badly...
In case it is relevant, one of the "cloud" nodes is mining with multiple remote miners (approx 20, using ethminer, with total hashing power approx 3.2 GH/s). The other "cloud" node is a fail-over node in case the first has problems, but it is generally not supporting remote miners at any given point in time. Both of these "cloud" nodes are suffering from the same syncing problem.
So, does anyone have any suggestions or tips for keeping ETH nodes synced? Why does my "local" node manage this effortlessly, while my "cloud" nodes are making a "hash" (and an "ethash") of it?