Cassandra GossipingPropertyFileSnitch

举报
提桶 发表于 2020/04/05 15:05:57 2020/04/05
9.2k+ 0 0
【摘要】 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的DCRACK名称
    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

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

    全部回复

    上滑加载中

    设置昵称

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

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

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