写在前面

cassandra3.x官方文档的非官方翻译。翻译内容水平全依赖本人英文水平和对cassandra的理解。所以强烈建议阅读英文版cassandra 3.x 官方文档。此文档一半是翻译,一半是个人对cassandra的认知。尽量将我的理解通过引用的方式标注,以示区别。另外文档翻译是项长期并有挑战的工作,如果你愿意加入cassandra git book,可以发信给我。当然你也可以加入我们的QQ群,104822562。一起学习探讨cassandra.

摘要

探测器决定了数据中心和机架节点的归属。他们将网络拓扑结构告知给Cassandra,因此请求可以比较高效的进行路由允许Cassandra通过将机器按照数据中心和机架进行分组从而分发副本。具体来说,复制策略基于新的探测器提供的信息放置副本。所有的节点必须返回相同的机架和数据中心信息。Cassandra 尽其所能,不将多个副本放在同一个机架上。(这不一定指代物理位置)

Note: 如果你更改探测器,你可能需要执行额外的步骤,因为探测器会影响副本放置。详情查看更换探测器

一.动态探测

默认情况下,所有的探测器通过一个动态探测层来监控读延迟,尽可能不将请求路由到性能差的节点上。动态探测默认情况下是被启动的,同时也是适用于大多数的部署。想看看他是如何工作的,可以查看http://www.datastax.com/dev/blog/dynamic-snitching-in-cassandra-past-present-and-future.可以cassandra.yaml文件中为每个节点配置动态探测阈值。

更多详细的内容,可以查看http://docs.datastax.com/en/cassandra/3.0/cassandra/architecture/archDataDistributeFailDetect.html列出的属性

二.简单探测

SimpleSnitch(默认值)只适用于单数据中心的部署。它不能识别数据中心或者机架信息,且只可以用于单数据中心的部署或者公有云的单地区。它将策略的顺序作为距离,可以提高缓存当禁掉读修复。

使用简单探测器时,在定义keyspace的时候,使用SimpleStrategy,然后指定一个复制因子。

三.RackInferringSnitch

RackInferringSnitch 通过机架和数据中心来决定节点的距离,分别和节点ip地址的第三位、第二位对应。这个探测器时用来写自定义探测器最好的例子。(除非这正好匹配你的部署协议)

注:

这个探测器实现起来非常粗暴,就是取ip

public String getRack(InetAddress endpoint)

{

return Integer.toString(endpoint.getAddress()[2] & 0xFF, 10);

}

四.PropertyFileSnitch

这个探测器通过机架和数据中心来决定节点的距离。使用cassandra-topology.properties 文件中定义的网络拓扑细节。当使用这个探测器可以将数据中心的名字定义为任何你想要的。确保定义keyspace时指定的名字和这边定义的一样。集群中的每个节点都应该在cassandra-topology.properties文件中定义。而且集群中的每个节点这个文件都应该一样。

过程

如果你的节点有有不一样ip,集群中有两个物理数据中心每个数据中心都有两个机架。第三个逻辑数据中心用来复制分析数据。配置文件可能看起来像下面这样:

Note: 数据中心和机架的名字是大小写敏感的.

# datacenter 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

# datacenter 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

注:

这种配置方式应该是比较常见的方式,笔者也常常这么干。清晰明了,简单易懂。唯一的问题在于进行节点扩展时,需要更新所有的节点上此配置文件。不过不用重启节点令配置生效。默认刷新的时间是5s

 org.apache.cassandra.locator.PropertyFileSnitch
 private static final int DEFAULT_REFRESH_PERIOD_IN_SECONDS = 5;

五.Ec2Snitch

集群中的所有节点都在一个地区,这种简单的集群部署在Amazon EC2可以使用Ec2Snitch方法。

在EC2上的部署,地区(region)的名字作为数据中心的名字。区域(zones)被当做数据中心中的机架。例如,如果一个节点在us-east-1区域,us-east是数据中心的名字,1是机架的位置。(机架对于分发副本很重要,而不是为了数据中心的命名)因为使用的是私有IPs,所以探测器无法跨地区。

如果你只使用单数据中心,不需要指定任何的属性。

如果使用多数据中心,需要在cassandra-rackdc.properties配置文件中设置dc_suffix选项。其他行会被忽略。

例如,us-east地区的每个节点,在cassandra-rackdc.properties文件中指定数据中心。

Note: 数据中心名字是大小写敏感的

  • node0

    dc_suffix=_1_cassandra

  • node1

    dc_suffix=_1_cassandra

  • node2

    dc_suffix=_1_cassandra

  • node3

    dc_suffix=_1_cassandra

  • node4

    dc_suffix=_1_analytics

  • node5

    dc_suffix=_1_search

这样会为该地区生成三个数据中心

us-east_1_cassandra
us-east_1_analytics
us-east_1_search

Note: 在这个例子中,数据中心命名习惯是根据负载性质来定的。你可以使用其他的规范,如DC1,DC2,100,200.

Keyspace Strategy 选项

当定义keyspace strategy 选项,使用EC 地区名字,如’us-east’作为数据中心的名字

注:

亚马逊是云主机,提供给用户的只有region 和zone的概念。分别对应着cassandra的数据中心和机架,确保数据不会被放在一起。可以在AWS regions`查看regions信息。

六.Ec2MultiRegionSnitch

当在Amazon EC2中的cassandra集群需要跨多地区的时候,使用Ec2MultiRegionSnitch。

当使用Ec2MultiRegionSnitch时,必须要在cassandra.yaml文件和属性文件cassandra-rackdc.properties中配置设置。

cassandra.yaml文件配置跨区域通信

Ec2MultiRegionSnitch 指定broadcast_address值为public IP,以此来允许跨地区的连接。将每个节点配置如下:

  1. 在cassandra.yaml文件,设置listen_address 为节点的私有IP地址,broadcast_address设置为节点的public IP.

这样可以使得在EC2 某个region的Cassandra 节点可以绑定到另外的region,从而支持了多数据中心。对于region内部的流量,Cassandra会切换到private IP建立连接。

  1. 在cassandra.yaml文件中设置seed nodes为public IP.私有IP不会再网络间被路由到。如:

    seeds: 50.34.16.33, 60.247.70.52

对于EC2中每一个seed nodes,可以通过下面指令找到public IP 地址

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

Note:不要讲所有的节点都作为seeds,具体查看gossip

  1. 确保 storage_port(7000)或者ssl_storage_port(7001)没有被防火墙屏蔽

配置snitch跨地区通信

在EC2部署,地区(region)的名字作为数据中心的名字。区域(zones)被当做数据中心中的机架。例如,如果一个节点在us-east-1区域,us-east是数据中心的名字,1是机架的位置。(机架对于分发副本很重要,而不是为了数据中心的命名)

对于每个节点,需要在cassandra-rackdc.properties文件中指定它的数据中心。dc_suffix 选项定力了snitch将用到的数据中心。其他行会被忽略。

在下面的例子中,这儿有两个cassandra数据中心,每个数据中心根据负载命名。在这个例子中,数据中心命名习惯是根据负载性质来定的。你可以使用其他的规范,如DC1,DC2,100,200.(数据中心的名字大小写敏感)

Region: us-east Region: us-west
Node and datacenter:
  • node0

    dc_suffix=_1_cassandra

  • node1

    dc_suffix=_1_cassandra

  • node2

    dc_suffix=_2_cassandra

  • node3

    dc_suffix=_2_cassandra

  • node4

    dc_suffix=_1_analytics

  • node5

    dc_suffix=_1_search

This results in four us-east datacenters:
us-east_1_cassandra
us-east_2_cassandra
us-east_1_analytics
us-east_1_search
Node and datacenter:
  • node0

    dc_suffix=_1_cassandra

  • node1

    dc_suffix=_1_cassandra

  • node2

    dc_suffix=_2_cassandra

  • node3

    dc_suffix=_2_cassandra

  • node4

    dc_suffix=_1_analytics

  • node5

    dc_suffix=_1_search

This results in four us-west datacenters:
us-west_1_cassandra
us-west_2_cassandra
us-west_1_analytics
us-west_1_search

Keyspace Strategy 选项

当定义keyspace strategy 选项,使用EC 地区名字,如’us-east’作为数据中心的名字。

相关的信息
[install locationl](http://docs.datastax.com/en/cassandra/3.0/cassandra/install/referenceInstallLocationsTOC.html)

cassandra 3.x官方文档(5)---探测器的更多相关文章

  1. cassandra 3.x官方文档(6)---内部原理之存储引擎

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  2. cassandra 3.x官方文档(4)---分区器

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  3. cassandra 3.x官方文档(3)---gossip通信协议及故障检测与恢复

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  4. cassandra 3.x官方文档(2)---架构解析

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  5. Cassandra 3.x官方文档(1)---关于Cassandra

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  6. cassandra 3.x官方文档(7)---内部原理之如何读写数据

    写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...

  7. Spark官方文档 - 中文翻译

    Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...

  8. 《Spring 5官方文档》 Spring AOP的经典用法

    原文链接 在本附录中,我们会讨论一些初级的Spring AOP接口,以及在Spring 1.2应用中所使用的AOP支持. 对于新的应用,我们推荐使用 Spring AOP 2.0来支持,在AOP章节有 ...

  9. Lagom 官方文档之随手记

    引言 Lagom是出品Akka的Lightbend公司推出的一个微服务框架,目前最新版本为1.6.2.Lagom一词出自瑞典语,意为"适量". https://www.lagomf ...

随机推荐

  1. 《Java面向对象设计》

    <Java面向对象设计> 第一章 面向对象软件工程与UML p理解为什么需要软件工程 p掌握软件工程的基本概念 p掌握软件生命周期各个阶段的主要任务 p了解流行软件开发过程 p了解软件过程 ...

  2. Vue还有这种操作?浅析几个新手常常忽略的API

    一:实现子组件与父组件双向绑定的"sync": 一般来说,我们实现父子组件值的传递通常使用的是[props]和自定义事件[$emit].父组件通过[props]将值传给子组件,子组 ...

  3. Python求解啤酒问题(携程2016笔试题)

    问题描述:一位酒商共有5桶葡萄酒和1桶啤酒,6个桶的容量分别为30升.32升.36升.38升.40升和62升,并且只卖整桶酒,不零卖.第一位顾客买走了2整桶葡萄酒,第二位顾客买走的葡萄酒是第一位顾客的 ...

  4. 前端之旅HTML与CSS篇之清除浮动塌陷

    以下内容为转载. 方法1:给浮动的元素的上级添加高度如果一个元素要浮动,那么它的祖先元素一定要有高度.高度的盒子,才能关住浮动.只要浮动在一个有高度的盒子中,那么这个浮动就不会影响后面的浮动元素.所以 ...

  5. codevs 2621 土地侵蚀

    提交地址:http://codevs.cn/problem/2621/ 2621 土地侵蚀  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 黄金 Gold     题目描述 De ...

  6. WebApi的安全性及其解决方案

    一.前言   WebApi的小白想要了解一些关于WebApi安全性相关的问题,本篇文章是整理一些关于WebApi安全.权限认证的文章. 二.内容正文  2.1 不进行验证  客户端调用:http:// ...

  7. [HNOI 2016]大数

    Description 题库链接 给你一个长度为 \(n\) ,可含前导零的大数,以及一个质数 \(p\) . \(m\) 次询问,每次询问你一个大数的子区间 \([l,r]\) ,求出子区间中有多少 ...

  8. [AtCoder arc090F]Number of Digits

    Description 题库链接 记 \(d\) 在十进制下的位数为 \(f(d)\) .给出询问 \(S\) ,求有多少对 \((l,r)\) 使得 \[\sum_{i=l}^r f(i)=S\] ...

  9. SpringCloud学习之sleuth&zipkin【二】

    这篇文章我们解决上篇链路跟踪的遗留问题 一.将追踪数据存放到MySQL数据库中 默认情况下zipkin将收集到的数据存放在内存中(In-Memeroy),但是不可避免带来了几个问题: 在服务重新启动后 ...

  10. C语言如何输出%

    两个%即可,C语言中%有两个作用: 第一种是作为运算符,取余,例如:9%4=1(9/4=2--1). 第二种是转义符,比如在scanf()和printf()中的输入参数常出现带有%的表示参数类型的变量 ...