Cassandra GossipingPropertyFileSnitch

举报
提桶 发表于 2020/04/05 15:05:57 2020/04/05
【摘要】 AbstractNetworkTopologySnitch一个endpoint snitch可以告诉Cassandra网络拓扑信息,是的路由更有效率。他需要实现以下方法abstract public String getRack(InetAddress endpoint);获取ep所在rack名abstract public String getDatacenter(InetAddress ...

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)已经实现。表示a1和a2那个距离address距离最近,< 0 表示a1距离address近(近的含义表示a1就是address,或者a1所在dc同address相同,或者a1所在rack同address相同),> 0表示a2距离address更近,=0则表示他俩在同一个DC,或在同一个RACK,或者两个所在的DC和RACK同address的DC,RACK都不相关



GossipingPropertyFileSnitch

  1. 在其构造方法中会默认加载conf/cassandra-rackdc.properties文件。该文件的默认配置如下:

    #表示该node的DC和RACK名称
    dc=dc1
    rack=rack1
  2. 然后进行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:r1
  • livenessCheck()返回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执行一次,后续分析该出两个任务的功能)

  • 从snitch中获取该node的DC和RACK,放到gossip中进行同步

    image.png

  • 默认每5s调用一次,发现conf/cassandra-topology.proerties文件有更新(check该文件的lastmodifytime来判断有没有更新),则触发reloadConfiguration(true)方法

    image.png

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。