blob: 90b32fb2e2ca60fb65c3e4c9da9a83630239ecb2 [file] [log] [blame]
= Snitch
In cassandra, the snitch has two functions:
* it teaches Cassandra enough about your network topology to route
requests efficiently.
* it allows Cassandra to spread replicas around your cluster to avoid
correlated failures. It does this by grouping machines into
"datacenters" and "racks." Cassandra will do its best not to have more
than one replica on the same "rack" (which may not actually be a
physical location).
== Dynamic snitching
The dynamic snitch monitor read latencies to avoid reading from hosts
that have slowed down. The dynamic snitch is configured with the
following properties on `cassandra.yaml`:
* `dynamic_snitch`: whether the dynamic snitch should be enabled or
disabled.
* `dynamic_snitch_update_interval_in_ms`: controls how often to perform
the more expensive part of host score calculation.
* `dynamic_snitch_reset_interval_in_ms`: if set greater than zero, this
will allow 'pinning' of replicas to hosts in order to increase cache
capacity.
* `dynamic_snitch_badness_threshold:`: The badness threshold will
control how much worse the pinned host has to be before the dynamic
snitch will prefer other replicas over it. This is expressed as a double
which represents a percentage. Thus, a value of 0.2 means Cassandra
would continue to prefer the static snitch values until the pinned host
was 20% worse than the fastest.
== Snitch classes
The `endpoint_snitch` parameter in `cassandra.yaml` should be set to the
class that implements `IEndPointSnitch` which will be wrapped by the
dynamic snitch and decide if two endpoints are in the same data center
or on the same rack. Out of the box, Cassandra provides the snitch
implementations:
GossipingPropertyFileSnitch::
This should be your go-to snitch for production use. The rack and
datacenter for the local node are defined in
cassandra-rackdc.properties and propagated to other nodes via gossip.
If `cassandra-topology.properties` exists, it is used as a fallback,
allowing migration from the PropertyFileSnitch.
SimpleSnitch::
Treats Strategy order as proximity. This can improve cache locality
when disabling read repair. Only appropriate for single-datacenter
deployments.
PropertyFileSnitch::
Proximity is determined by rack and data center, which are explicitly
configured in `cassandra-topology.properties`.
Ec2Snitch::
Appropriate for EC2 deployments in a single Region, or in multiple
regions with inter-region VPC enabled (available since the end of
2017, see
https://aws.amazon.com/about-aws/whats-new/2017/11/announcing-support-for-inter-region-vpc-peering/[AWS
announcement]). Loads Region and Availability Zone information from
the EC2 API. The Region is treated as the datacenter, and the
Availability Zone as the rack. Only private IPs are used, so this will
work across multiple regions only if inter-region VPC is enabled.
Ec2MultiRegionSnitch::
Uses public IPs as broadcast_address to allow cross-region
connectivity (thus, you should set seed addresses to the public IP as
well). You will need to open the `storage_port` or `ssl_storage_port`
on the public IP firewall (For intra-Region traffic, Cassandra will
switch to the private IP after establishing a connection).
RackInferringSnitch::
Proximity is determined by rack and data center, which are assumed to
correspond to the 3rd and 2nd octet of each node's IP address,
respectively. Unless this happens to match your deployment
conventions, this is best used as an example of writing a custom
Snitch class and is provided in that spirit.