For every key you score each node with a hash of the pair and pick the highest. Removing a node only moves its own keys. It needs no ring, but a lookup costs O(number of nodes). Compare Consistent hashing.