参考资料:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureSnitchesAbout_c.html#concept_ds_c34_fqf_fk

  

  一个snitch(告密者)决定应当从哪个数据数据中心和机架写入和读取数据。snitch通知Cassandra关于网络的拓扑情况以保证数据请求能够高效地路由并且允许通过把机器按数据中心和机架分组以便Cassandra放置数据副本。所有的节点关于snitch的配置应当是一致的。Cassandra尽全力以保证在一个机架上只有一个备份(不在同一个机架上放多个备份,而是放置在不同机架上)。

提示:如果在数据插入到集群后修改了snitch配置,你必须进行一次深度的恢复,因为snitch影响数据备份放置的位置。

Dynamic snitching

  显示了从多个备份中读取数据并根据历史选择最好的备份的能力。

  如果可能的话,使请求不路由到性能差的节点。dynamic snitch是默认启用的并在大多数情况下被推荐使用。默认情况下,所有的snitch都使用dynamic snitch层来显示读取延迟,如果可能的话,不将请求路由到性能差的节点上。dynamic snitch默认是启动的,多数部署情况下都建议使用dynamic snitch。

SimpleSnitch

  默认的SimpleSnitch不需要知道数据中心和机架的信息。当使用数据中心时,可以使用SimpleSnitch。使用SimpleSnitch时,你需要指定keyspace的策略选项只有一项——复制因子。

RackInferringSnitch

  RackInferringSnitch通过机架和数据中心来定义节点的位置,节点用进制表示ip地址的的第二组为数据中心,第三组为机架。下面是个例子:

PropertyFileSnitch

  根据机架和数据中心决定节点的位置。这个snitch在配置文件cassandra-topology.properties中由用户定义网络情况描述。使用这个snitch的情况有两种:节点的ip地址不均匀或者如果你的数据副本需求比较复杂。当使用这个snitch时,你可以定义你想要的数据中心的名字。请确保数据中心的名字和keyspace的复制策略相关联。配置文件cassandra-topology.properties中应当包含集群中的每一个节点,并且每一个节点的cassandra-topology.properties应当相同。

  如果你的ip地址分布不均匀,并且有两个物理数据中心和一个逻辑数据中心,每个物理数据中心有两个机架,逻辑数据中心存放分析数据的备份。cassandra-topology.properties可能如下:

# Data Center One

175.56.12.105 =DC1:RAC1

175.50.13.200 =DC1:RAC1

175.54.35.197 =DC1:RAC1

120.53.24.101 =DC1:RAC2

120.55.16.200 =DC1:RAC2

120.57.102.103 =DC1:RAC2

# Data Center Two

110.56.12.120 =DC2:RAC1

110.50.13.201 =DC2:RAC1

110.54.35.184 =DC2:RAC1

50.33.23.120 =DC2:RAC2

50.45.14.220 =DC2:RAC2

50.17.10.203 =DC2:RAC2

# Analytics Replication Group

172.106.12.120 =DC3:RAC1

172.106.12.121 =DC3:RAC1

172.106.12.122 =DC3:RAC1

# default for unknown nodes default =DC3:RAC1

GossipingPropertyFileSnitch

  GossipingPropertyFileSnitch定义了一个本地节点的数据中心和机架。使用gossip传播信息给其他节点。conf目录下的配置文件cassandra-rackdc.properties定义了默认地数据中心和机架:

dc =DC1

rack =RAC1

EC2Snitch

  将一个简单的集群(集群中的所有节点都在一个单一区域内)部署在亚马逊的EC2是可以使用EC2Snitch。这个区域被视为数据中心并且可用的区域被视为数据中心上的机架。例如,如果一个节点在us-east-1a,us-east是数据中心的名字,1a是机架的位置。因为私人的ip地址被使用了,snitch不能跨越多个区域。当定义keyspace的策略选项时,使用EC2的区域名字(例如us-east)作为数据中心的名字。

EC2MultiRegionSnitch

  当你在亚马逊Use the EC2 EC2 上布置一个多区域的集群时,请使用Amazon EC2。当使用EC2Snitch时,区域被视为数据中心并且可用的区域被视为数据中心上的机架。例如,如果一个节点在us-east-1a,us-east是数据中心的名字,1a是机架的位置。

  这个snitch使用公网地址作为作为广播地址从而能够方便的跨越区域。这就意味着你必须配置每一个节点,设置listen_address为内网地址,broadcast_address为公网地址。这样就允许在一个EC2区域的节点绑定另一个区域的节点,从而实现了多个数据中心。(对于区域内的通信,在连接建立后Cassandra转换成内部ip)。

  此外,你必须在配置文件cassandra.yaml中设置种子节点的地址,而且必须是公网ip,因为内网地址是不能路由的。例如:

seeds: 50.34.16.33, 60.247.70.52

  对于每一个种子节点,使用这个命令去找到公共的ip地址:

curl http://instance-data/latest/meta-data/public-ipv4

  最后,请确保参数storage_port 或者 ssl_storage_port是可以被访问的。

  当定义keyspace的策略选项时,使用EC2的区域名字(例如us-east)作为数据中心的名字。

Cassandra1.2文档学习(5)—— Snitch的更多相关文章

  1. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  2. Cassandra1.2文档学习(16)—— 模式的变化

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...

  3. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  4. Cassandra1.2文档学习(3)——数据分配和复制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  5. Cassandra1.2文档学习(2)——节点间通信协议之gossip协议

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  6. Cassandra1.2文档学习(1)——Cassandra基本说明

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  7. Cassandra1.2文档学习(19)—— CQL索引

    参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_primary_index_c.ht ...

  8. Cassandra1.2文档学习(17)—— CQL数据模型(上)

    参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_anatomy_table_c.ht ...

  9. Cassandra1.2文档学习(14)—— 事务和并发控制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

随机推荐

  1. Android下实现GPS定位服务

    1.申请Google API Key,参考前面文章 2.实现GPS的功能需要使用模拟器进行经纬度的模拟设置,请参考前一篇文章进行设置 3.创建一个Build Target为Google APIs的项目 ...

  2. Java HashMap 如何正确遍历并删除元素

    (一)HashMap的遍历 HashMap的遍历主要有两种方式: 第一种采用的是foreach模式,适用于不需要修改HashMap内元素的遍历,只需要获取元素的键/值的情况. HashMap<K ...

  3. ios快捷键

    分屏:cmd + option + return 退出分屏:cmd + return cmd + option + [ 代码上跳 cmd + [ 代码左移

  4. IPC with pipes, also dup2 redirect stream handle

    #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <unist ...

  5. 关于SWT的容器类之----面板Composite类和Group类

    1.Comosite类谱系图. Composite的用法: 格式:Composite(Composite parent,int style) 用法:Composite composite = new ...

  6. Servlet原理

    Servlet主要用来处理客户端请求并将其结果发送到客户端,下面我们来详细看一下Servlet. 一.Servlet的生命周期 Servlet的生命周期是由Servlet的容器来控制的(Tomcat ...

  7. RavenScheme简介

    RavenScheme简介 RavenScheme使用了一个运行『读入-求值-打印』循环的解释器.该解释器从标准输入反复的读入表达式,对得到的表达式求值,然后打印出结果. 如果用户键入: [加 1 2 ...

  8. linux commond

    1  vi /etc/sysconfig/network-scripts/ifcfg-eth0     2  ifconfig    3  ping 172.22.14.59    4  ping 1 ...

  9. 前端基础系列——CSS规范(文章内容为转载)

    原作者信息 作者:词晖 链接:http://www.zhihu.com/question/19586885/answer/48933504 来源:知乎 著作权归原作者所有,转载请联系原作者获得授权. ...

  10. JS 乱记

    JS 中不存在块级作用域,也就是说在全局作用域下 if ,for 语句中用 var 声明的变量是全局变量. JS 中浮点数运算的值为近似值,比如:0.1 + 0.2 不等于 0.3 ,所以避免使用浮点 ...