Snitch
在cassandra中,snitch有两个功能:
- 它指导Cassandra识别网络拓扑以有完成效地路由请求。
- 它允许Cassandra在您的集群周围传播副本,以避免相关的故障。它通过将机器分组到“数据中心”和“机架”来实现这一点。Cassandra将尽最大努力在同一“机架”(实际上可能不是物理位置)上拥有多个副本。
动态snitching(Dynamic snitching)
动态snitch监视器延迟读取,以避免从已减速的主机读取。动态snitch使用cassandra.yaml上的以下属性进行配置:
dynamic_snitch:是否应启用或禁用动态路由。
dynamic_snitch_update_interval_in_ms
:控制执行主机评分计算中较耗费资源部分的频率。dynamic_snitch_reset_interval_in_ms
:如果设置大于零,并且read_repair_chance <1.0,这将允许副本“锁定”到主机,以增加缓存容量。dynamic_snitch_badness_threshold
:恶性阈值将控制被锁定的主机在动态snitch偏向于其它副本之前要有多糟糕。该值通过一个表示百分比的double类型数字来代表,因此,值为0.2意味着Cassandra将继续偏好静态snitch值,直到被锁定的主机比最快的主机的20%还要差。
Snitch类(Snitch classes)
-
cassandra.yaml中的endpoint_snitch参数应设置为实现IEndPointSnitch的类,类将被动态snitch包装,并决定两个端点是否在同一数据中心或同一机架上。Cassandra提供了snitch实现:
- 这应该是你的生产使用的。本地节点的机架和数据中心在cassandra-rackdc.properties中定义,并通过gossip传播到其他节点。如果存在cassandra-topology.properties,它将用作回退,从而允许从PropertyFileSnitch进行迁移。 SimpleSnitch
- 将战略顺序视为接近度。这可以在禁用读修复时提高缓存位置。仅适用于单数据中心部署。 PropertyFileSnitch
- 接近性由机架和数据中心决定,这些在cassandra-topology.properties中显式配置。 Ec2Snitch
- 从EC2 API加载当前区域和可用区域信息。当前区域被视为数据中心,可用区域被视为机架。仅使用私有IP,因此这不会在多个区域工作。 Ec2MultiRegionSnitch
- 使用公共IP作为broadcast_address以允许跨区域连接(因此,您应该将seed地址设置为公共IP)。您将需要打开公共IP防火墙上的storage_port或ssl_storage_port(对于区域内流量,Cassandra将在建立连接后切换到专用IP)。 RackInferringSnitch
- 接近性由机架和数据中心确定,假定它们分别对应于每个节点的IP地址的第3和第2个八位字节。除非这种情况符合您的部署约定,否则这最好用作编写自定义Snitch类的示例
GossipingPropertyFileSnitch