This may be a very simple question but I've not been able to find a good answer to this yet. Maybe someone can help me.
Once a leader is elected -
The client attempts to submit requests to any host in the cluster. If the client guesses wrong the server either forwards the request to the leader or returns an error with the address of who it thinks is the leader.
The first method (forwarding to the leader) is a better experience for a single-connection-per-request client. Be sure to limit the number of forwarding hops in the system and have a timeout on the client.
The second method (error with leader address) is much easier to implement. Since the leader is typically long-lived except during troubled times, it usually only takes one retry to get the request to the leader. This approach also allows lower client latencies when both of these are true: the client has long-lived connections to the raft cluster and the raft leader doesn't change frequently.