Ah, but you don't need to keep RAM coherent after each operation. You need to do it only after network communication and/or disk IO.
It's almost like quantum mechanics: until you observe a computer its status is indeterminate. So you just keep the master computer running and replicate RAM changes only after it communicates with something external. If the master computer fails then the slave will have the state of the master after the last IO operation and will just continue from that point.
This actually works surprisingly well in practice. We use it to run legacy QNX software inside a XEN cluster.