cassandra 3.x官方文档(3)---gossip通信协议及故障检测与恢复
写在前面
cassandra3.x官方文档的非官方翻译。翻译内容水平全依赖本人英文水平和对cassandra的理解。所以强烈建议阅读英文版cassandra 3.x 官方文档。此文档一半是翻译,一半是个人对cassandra的认知。尽量将我的理解通过引用的方式标注,以示区别。另外文档翻译是项长期并有挑战的工作,如果你愿意加入cassandra git book,可以发信给我。当然你也可以加入我们的QQ群,104822562。一起学习探讨cassandra.
Gossip
Gossip 是一个对等网络通信协议,节点间断性的交换他们自身的状态信息以及其他它们知道的节点信息。gossip 每秒中和集群中最多三个节点交换信息。不仅交换他们自身信息,而且还交换通过之前的gossip通信了解的其他节点信息,所以所有的节点能够很快的了解集群中的其他节点状况。一条gossip 信息会有一个相关联的版本号,因此当进行gossip交换的时候,对于一个特定的节点,它的老信息就会被最近的状态所覆盖。
为了阻止gossip通信可能出现的问题,集群中所有的节点都有相同的seed nodes列表。这一点在一个节点第一次启动的时候尤其重要。默认情况下,一个节点在随后的重启过程中会记住已经gossip的其他节点。seed node就是为了新节点加入到集群中,bootstrap过程中使用的。不是为了单点失败,也没有其他特别的目的。
注意:
在多数据中心集群环境,确保每个数据中心至少有一个节点在seed list中。为了容错建议每个数据中心指派多个seed node,否则当一个节点bootstrap时,需要同其他数据中心gossip。
不建议把每个节点都设置为seed node,因为会增加维护的成本以及降低了gossip的性能。gossip优化并不是特别重要,但是建议使用一个小的seed 列表(每个数据中心3个节点最佳)
失败检测和恢复
失败检测是一种为本地决策提供信息的方法,从gossip的状态和历史获取信息,判断系统中的一个节点是否down了或者已经恢复了。Cassandra 利用这个信息避免将客户端的请求路由到任何时候有可能不可到达的节点。(cassandra 同样能够通过Dynamic Snitch)避免将客户端请求路由到那些存活的但是性能比较差的节点上。
gossip过程能够跟踪其他节点的状态,通过直接(直接与某个节点gossip)或非直接(通过二手,三手等)方式。相比于一个固定的阈值来标记一个节点为fail,Cassandra 采用一个自然增长的检测机制来计算每个节点的阈值,考虑到了网络、负载、历史状况等因素。当进行gossip交换时,每个节点维护了一个其他节点gossip信息到达的滑动窗口时间。可以通过配置phi_convict_threshold属性来调节失败检测的敏感性。值越低,一个没有应答的节点更有可能被标记为down,值越高,短暂的失败更低可能的被标记为失败。大部分情况下,默认值就可以了。但是在Amazon EC2上需要增加到10或者12.(因为常常会遇到网络拥堵),在不稳定的网络环境中(比如EC2),提高值到10或者12可以帮助避免错误的失败检测。不建议使用高于12,或者低于5的值。
节点失败可能有各种各样的原因造成的,比如硬件失败,网络电力供应中断。节点中断经常是短暂的但是有可能持续很长时间的。因为一个节点中断很少意味着永久离开集群,不会自动从集群ring中移除。其他的节点会周期性的尝试和失败的节点重新建立联系,看它们是否已经回归。想要永久的改变集群节点的成员关系,需要管理员通过notetool明确的将节点添加进来或者移除出集群。
当一个节点经过down到重新回归的,可能会丢失掉它需要维护的副本数据。repair可以帮助恢复这些数据,比如hinted handoffs以及手动repair.节点down掉的时间决定了通过哪种机制来保持数据的一致性。
注:
hintedhandoff有时间限制,默认三小时,超过此时间前面的数据会不断的被覆盖掉。必须要手动repair
cassandra 3.x官方文档(3)---gossip通信协议及故障检测与恢复的更多相关文章
- cassandra 3.x官方文档(5)---探测器
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- cassandra 3.x官方文档(2)---架构解析
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- cassandra 3.x官方文档(6)---内部原理之存储引擎
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- cassandra 3.x官方文档(4)---分区器
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- Cassandra 3.x官方文档(1)---关于Cassandra
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- cassandra 3.x官方文档(7)---内部原理之如何读写数据
写在前面 cassandra3.x官方文档的非官方翻译.翻译内容水平全依赖本人英文水平和对cassandra的理解.所以强烈建议阅读英文版cassandra 3.x 官方文档.此文档一半是翻译,一半是 ...
- Spark官方文档 - 中文翻译
Spark官方文档 - 中文翻译 Spark版本:1.6.0 转载请注明出处:http://www.cnblogs.com/BYRans/ 1 概述(Overview) 2 引入Spark(Linki ...
- 《Spring 5官方文档》 Spring AOP的经典用法
原文链接 在本附录中,我们会讨论一些初级的Spring AOP接口,以及在Spring 1.2应用中所使用的AOP支持. 对于新的应用,我们推荐使用 Spring AOP 2.0来支持,在AOP章节有 ...
- Lagom 官方文档之随手记
引言 Lagom是出品Akka的Lightbend公司推出的一个微服务框架,目前最新版本为1.6.2.Lagom一词出自瑞典语,意为"适量". https://www.lagomf ...
随机推荐
- html标记语言 --图像标记
html标记语言 --图像标记 三.图像标记 1.使用方法 <img src="路径/文件名.格式" width="属性值" height="属 ...
- Beautiful Soup常见的解析器
Beautiful Soup支持Python标准库中的HTML解析器,还支持一些第三方的解析器,如果我们不安装它,则 Python 会使用 Python默认的解析器,lxml 解析器更加强大,速度更快 ...
- R语言-ggplot初级
ggplot2简介: 在2005年开始出现,吸取了基础绘图系统和lattice绘图系统的优点,并利用一个强大的模型来对其进行改进,这一模型基于之前所述的一系列准则, 能够创建任意类型的统计图形 1.导 ...
- javaIO操作之字节输入流--InputStream
/** *<li> InputStream类中定义的方法: * <li>读取的数据保存在字节数组中,返回读取的字节数组的长度:public int read(byte[] b) ...
- ASwipeLayout一个强大的侧滑菜单控件
Android中侧滑的场景有很大,大部分是基于RecyclerView,但是有些时候你可以动态地addView到一个布局当中,也希望它实现侧滑,所以就产生了ASwipeLayout,该控件不仅支持在R ...
- java面试3-对于java中值传递的理解(Hollis)
这是根据Hollis的直面java内容习得(有兴趣的可以加他微信公众号) 对于初学者来说,要理解java中的值传递很难理解,为什么说java只有值传递?那引用传递呢? java中的错误理解: 错误理解 ...
- 网络安全实验室_注入关writeup
最简单的SQL注入 查看页面源码发现提示要登录admin账户 果断试试万能密码admin' or 1=1# 直接能看到flag了 最简单的SQL注入(熟悉注入环境) 首先查看源码,提示id=1,看样子 ...
- XMLHTTPRequestObject获取服务器数据
http://www.educity.cn/develop/526316.html 在Web客户端使用xmlhttp对象,可以十分方便的和服务器交换数据,我们可以获取和发送任何类型的数据,甚至二进制数 ...
- [UOJ 12]猜数
Description
- Linux上安装Libssh2
由于项目需要使用libssh2,在安装时,遇到一些问题,发现网上的都是互相抄,把自己遇到的问题,记下来,希望可以帮助到别人,自己下次使用时候,也方便查找,节约时间. 安装的流程: 1.下载源码,wge ...