参考资料: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. CSDN上下载的一些关于Android程序调用Webservice执行不成功的问题

    今天从书上和CSDN上找了几个关于android调用webservice的样例,这些样例从代码来看.没不论什么错误,可是就是执行不成功.分析了android调用web接口的写法,发现这些样例在调用的时 ...

  2. sizeof运算符

    sizeof运算符返回一条表达式或一个类型名字所占的字节数.sizeof运算符满足右结合律,其所得的值是一个size_t类型的常量表达式.运算符的运算对象有两种形式: sizeof(type) siz ...

  3. 封装的分页jq

    (function ($) { $.fn.page = function (options) { var defaults = { divid: "pagediv", count: ...

  4. Java Annotations: Explored & Explained--转载

    原文地址:http://www.javacodegeeks.com/2012/08/java-annotations-explored-explained.html One of the many w ...

  5. iOS之深入了解控制器View的加载

    前言 在面试中,面试官可能会问这样的问题,loadView有什么作用,它与viewDidLoad有何区别 首先我们得知道,控制器view是通过懒加载的方式进行加载的,即用到的时候再加载. loadVi ...

  6. -----------------------------SpringMVC理解-----------------------------

    1.用户发送请求到前端控制器(DispatcherServlet); 2.前端控制器转发请求到处理器映射器(HandlerMapping): 3.处理器映射器将拦截的Action返回到前端控制器: 4 ...

  7. c++ (P10—46)

    1 signed unsigned short long 四个修饰符.对int全部适用,对char只有signed和unsigned适用,long适用于double. 2 long int(占4个字节 ...

  8. [转]Oracle GoldenGate安装配置

    ref:http://blog.sina.com.cn/s/blog_5d29418d0101cvyx.html 1 简介 Oracle Golden Gate软件是一种基于日志的结构化数据复制备份软 ...

  9. Hibernate学习笔记--------4.查询

    一.Get/Load Get方法是立即检索,而load是延迟检索,他们都是根据主键进行查询.在<class>标签中,若把lazy属性改为false,load方法就会立即检索,class中的 ...

  10. js父窗口opener与parent

    parent表示父窗口,比如一个A页面利用iframe或frame调用B页面,那么A页面所在窗口就是B页面的parent.在JS 中,window.opener只是对弹出窗口的母窗口的一个引用.比如: ...