Cassandra GossipingPropertyFileSnitch
AbstractNetworkTopologySnitch
一个endpoint snitch可以告诉Cassandra网络拓扑信息,是的路由更有效率。他需要实现以下方法
abstract public String getRack(InetAddress endpoint);
获取ep所在rack名abstract public String getDatacenter(InetAddress endpoint);
获取ep所在DC名public int compareEndpoints(InetAddress address, InetAddress a1, InetAddress a2)
或者两个所在的DC和RACK同address的DC,RACK都不相关
在其构造方法中会默认加载
conf/cassandra-rackdc.properties
文件。该文件的默认配置如下:#表示该node的DC和RACK名称
dc=dc1
rack=rack1然后进行
psnitch = new PropertyFileSnitch();
.主要调用reloadConfiguration(boolean)
方法
conf/cassandra-topology.proerties
,该文件的默认配置# Cassandra Node IP=Data Center:Rack
192.168.1.100=DC1:RAC1
192.168.2.200=DC2:RAC2
10.0.0.10=DC1:RAC1
10.0.0.11=DC1:RAC1
10.0.0.12=DC1:RAC2
10.20.114.10=DC2:RAC1
10.20.114.11=DC2:RAC1
10.21.119.13=DC3:RAC1
10.21.119.10=DC3:RAC1
10.0.0.13=DC1:RAC2
10.21.119.14=DC3:RAC2
10.20.114.15=DC2:RAC2
# default for unknown nodes
default=DC1:r1livenessCheck()
返回true表示可以继续接着更新,非live状态node的DC或RACK有变化。一旦出现live状态的node,其DC或RACK有变化,则不再执行后面的逻辑。We cannot update rack or data-center for a live node, see CASSANDRA-10243.
此处用到传入参数boolean值。true表示更新tokenMetadata的属性Topology里面的
Multimap<String, InetAddress> dcEndpoints;Map<String, Multimap<String, InetAddress>> dcRacks;
DC和RACK对应的ep映射信息,然后将用于路由的tokencacheMap置失效。false表示将用于路由的tokencacheMap置失效。PropertyFileSnitch对象第一次初始化传入false,后续调用均为true。会用到db启动时候构造的snitch对象。(DynamicEndpointSnitch的构造方法中有两个定时任务
reset()
和updatescores()
,分别是一小时和100ms执行一次,后续分析该出两个任务的功能)conf/cassandra-topology.proerties
文件有更新(check该文件的lastmodifytime来判断有没有更新),则触发reloadConfiguration(true)
- 点赞
- 收藏
- 关注作者
评论(0)