Leaders can currently get out of balance due to the sequence of how nodes are brought up in a cluster. For very good reasons shard leadership cannot be permanently assigned.
However, it seems reasonable that a sys admin could optionally specify that a particular node be the preferred leader for a particular collection/shard. During leader election, preference would be given to any node so marked when electing any leader.
So the proposal here is to add another role for preferredLeader to the collections API, something like
Second, it would be good to have a new collections API call like ELECTPREFERREDLEADERS?collection=collection_name
(I really hate that name so far, but you see the idea). That command would (asynchronously?) make an attempt to transfer leadership for each shard in a collection to the leader labeled as the preferred leader by the new ADDROLE role.
I'm going to start working on this, any suggestions welcome!
This will subsume several other JIRAs, I'll link them momentarily.