参考资料: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. [React Fundamentals] Owner Ownee Relationship

    The owner-ownee relationship is used to designate a parent-child relationship with React components ...

  2. Linux上安装JDK环境变量配置

    http://blog.chinaunix.net/uid-12115233-id-3304951.html Jdk: jdk-6u1-linux-i586 Tomcat: apache-tomcat ...

  3. 一、 Socket之UDP异步传输文件

    用SCOKET 发送文件是一个不太好处理的问题,网上的例子也都是很简单的,我准备写一个比较完善的例子,这个就算是开始吧,以后的都会在这个例子的基础上进行修改,准备实现多线程传输.断点传输和文件传输的完 ...

  4. JS 笔记

    如何定义一个函数呢?基本语法如下: function 函数名() {      函数代码; } 说明: 1. function定义函数的关键字. 2. "函数名"你为函数取的名字. ...

  5. 模仿京东顶部搜索条效果制作的一个小demo

    最近模仿京东顶部搜索条效果制作的一个小demo,特贴到这里,今后如果有用到可以参考一下,代码如下 #define kScreenWidth [UIScreen mainScreen].bounds.s ...

  6. 深入理解计算机系统第二版习题解答CSAPP 2.19

    在2.17的基础上完成下表: x 十六进制 T2U(x) -8 0x8 -3 0xD -2 0xE -1 0xF 0 0x0 5 0x5

  7. Android 自学之基本界面组件(下)

    按钮(Button)与图片按钮(ImageButton)组件的功能和用法 Button继承了TextView,ImageButton继承了Button.不管是Button还是ImageButton,他 ...

  8. PHP微信开发ReplyModel(封装验证,数据获取,信息返回)

    <?phpclass ReplyModel{ //验证token, public function ValidationToken($token){ if(isset($_GET["e ...

  9. winform 上传

    public class ImitateSelectFile { public void Select(HtmlElement htmlEle, string fileFullPath) { html ...

  10. Jquery 实现Xml文件内容处理

    用JS对XMl文件处理实现和用JS处理一般的Dom元素一样; 加载一个Xml内容与新建一个Dom元素基本相同 如: 1.新建一个Dom元素的Jquey语法为:$("<p>hell ...