In earlier versions of Cassandra, prior to version 1.2, each node used to own only one token, and hence it was responsible for handling only one contiguous token range in the cluster ring. This mechanism was good but was slower and relatively harder to configure in following scenarios:
Configuring a cluster.
While configuring a cluster, we need to calculate and assign tokens to each node manually.
Adding or removing a node
When a node is added or removed, we need to do a token calculation again to rebalance the cluster. If a node is added, we need to assign a new token range to this node and reduce the token range of the rest of the nodes. Similarly, if a node is removed, we need to calculate the token range again so that a larger token range is handled by each node.
Replacing a dead node.
Prior to virtual nodes each node was responsible for handling a big contiguous token range. When such a node is dead and replaced by a new node, other node/s responsible for same token range will...