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 ...
随机推荐
- hdu1045 Fire Net---二进制枚举子集
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1045 题目大意: 给你一幅n*n的图,再给你一些点,这些点的上下左右不能再放其他点,除非有墙('X') ...
- Collections、Arrays 简明
Collections : 它的出现给集合操作提供了更多的功能.这个类不需要创建对象,内部提供的都是静态方法. 一般方法 Collections. sort (list); list 集合进行元素的自 ...
- 最短路径之Dijkstra算法
Dijkstra(迪杰斯特拉)算法是典型的最短路径路由算法,用于计算一个节点到其他所有节点的最短路径.主要特点是以起始点为中心向外层层扩展,直到扩展到终点为止.Dijkstra算法能得出最短路径的最优 ...
- 虚拟机工作站创建虚拟机并安装Linux教程
前言: 今天开始学习一下Linux,之前早就想看,但是一直没时间,最近把其他知识整理完了,终于有时间来看一下Linux了. 本节只是安装虚拟机工作站,虚拟机,和Linux操作系统的过程,详细的记录了我 ...
- php代码审计之变量覆盖
变量覆盖一般由这四个函数引起 <?php $b=3; $a = array('b' => '1' ); extract($a,EXTR_OVERWRITE); print_r($b); / ...
- 浅谈CSRF漏洞
前言: 看完小迪老师的CSRF漏洞讲解.感觉不行 就自己百度学习.这是总结出来的. 歌曲: 正文: CSRF与xss和像,但是两个是完全不一样的东西. xss攻击(跨站脚本攻击)储存型的XSS ...
- Junit简单配置
Junit简单配置的步骤如下: 1.在WEB-INF目录下的lib里面放一个junit包,我用的是junit-4.9.jar: 2.选定要测试的类,右键单击该类,新建一个Junit Test Case ...
- [JLOI2015]装备购买
题目描述 脸哥最近在玩一款神奇的游戏,这个游戏里有 n 件装备,每件装备有 m 个属性,用向量zi(aj ,.....,am) 表示 (1 <= i <= n; 1 <= j < ...
- 【LSGDOJ 1351】关灯
题目描述 多瑞卡得到了一份有趣而高薪的工作.每天早晨他必须关掉他所在村庄的街灯.所有的街灯都被设置在一条直路的同一侧. 多瑞卡每晚到早晨 5 点钟都在晚会上,然后他开始关灯.开始时,他站在某一盏路灯的 ...
- HDU5339——Untitled
Problem Description There is an integer a and n integers b1,…,bn. After selecting some numbers from ...