Details
-
Improvement
-
Status: Resolved
-
Normal
-
Resolution: Fixed
-
None
Description
This is the parent ticket for the virtual nodes implementation which was proposed here: http://www.mail-archive.com/dev@cassandra.apache.org/msg03837.html and discussed in the subsequent thread.
The goals of this ticket are:
- reduced operations complexity for scaling up/down
- reduced rebuild time in event of failure
- evenly distributed load impact in the event of failure
- evenly distributed impact of streaming operations
- more viable support for heterogeneity of hardware
The intention is that this can be done in a way which is
- fully backwards-compatible
- optionally enabled
The latter of these can be trivially achieved by setting the number of tokens per host to 1, to reproduce the existing behaviour.
Implementation detail can be added and discussed in the sub-tickets, but here is an overview of the proposed changes:
- TokenMetadata will allow multiple tokens per host
- Hosts will be referred to by a UUID instead of token (e.g. in Gossip, when storing hints, etc.)
- A bootstrapping node can get multiple tokens from initial_token (comma separated) or by random allocation
- NetworkTopologyStrategy will be extended to be aware of virtual nodes so that replicas are not placed on the same host (similar to racks now)
- Repairs will be staggered similar to
CASSANDRA-3721 - Nodetool operations will be virtual-node aware, while maintaining backwards compatibility (ie. existing scripts won't have to change)
- Upgrade will be a standard rolling upgrade, with optional rolling migration to full vnode support
Attachments
Issue Links
- is blocked by
-
CASSANDRA-3881 reduce computational complexity of processing topology changes
- Resolved
1.
|
Gossip identifies hosts by UUID | Resolved | Eric Evans | |
2.
|
TokenMetadata supports multiple tokens per host | Resolved | Sam Overton | |
3.
|
Bootstrap and decommission with multiple ranges for vnodes | Resolved | Sam Overton | |
4.
|
staggered repair for multiple ranges | Resolved | Unassigned | |
5.
|
Update nodetool for vnodes | Resolved | Eric Evans | |
6.
|
write tests for vnodes | Resolved | Unassigned | |
7.
|
migration support for vnodes | Resolved | Sam Overton | |
8.
|
Binary encoding of vnode tokens | Resolved | Brandon Williams | |
9.
|
shuffle utility for vnodes | Resolved | Eric Evans | |
10.
|
implement token relocation | Resolved | Eric Evans |