Cassandra1.2文档学习(12)—— hint机制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_hh_c.html
Hint机制是Cassandra的特性当一致性不要求时保证了写入的高可用性。但临时故障发生如网络问题,Hint机制显著地提升了反应的一致性。通过配置cassandra.yaml文件,你选择是否启用Hint机制。
一、Hint机制是如何工作的
当一个写入发生,应当被写入的副本节点被感应到发生了故障或者没有响应写入请求,协调者会在本地存储一个hint,放入到system.hints表中。这个hint表明,对于不可用的节点,写入请求需要被重新执行。
hint包含了:
•发生了故障的副本节点位置
•哪一行需要被重新写入
•需要被写入的实际数据
默认情况下,当副本发生故障后,hint会被存储3个小时。因为如果一个副本节点发生故障的时间大于3个小时,这个节点可能永久性的故障了。这种情况下,在故障发生前,请运行修复去重新复制数据。你可以配置这个时间,通过配置cassandra.yaml文件的max_hint_window_in_ms属性。
节点A有节点B的hint,当节点A通过 gossip发现另一个节点B恢复了,节点A将发送hint对应的数据行发送给B。另外,节点A通过gossip每隔十分钟检查被故障检测机制通知的超时hint。一个hint并不计入一致性级别需求是ONE、QUORUM或者是ALL。协调者节点存储挂掉副本节点的hint无论一致性级别除非hint机制没有被启用。如果没有足够的存活的副本去满足一致性级别,一个UnavailableException异常会被抛出。相比于 Dynamo的复制模型,这是一个重要的不同点。
例如,在集群中有两个节点A和B,复制因子为1:每一行存储在一个节点上。假设当我们将行K写给节点A时节点A宕机了且一致性级别为one,写入会失败因为读会影响最新的写入当:
W-nodes + R > 复制因子
W是写阻塞的节点的数目,R是读阻塞的节点的数目。Cassandra不会在节点B写一个hint然后返回写入成功因为Cassandra在任何一致性级别下都读不到数据直到A恢复了然后B把数据转发给A。
二、极致的写入可用性
对于那些希望Cassandra能够接受写入请求即使所有的副本节点都已经宕机的应用程序来说,如果一致性级别ONE也不能满足的话,Cassandra提供了一致性级别ANY。ANY保证写入是持久的并且可读的当一个合适的副本节点变得可用并且接收到hint。
三、性能
设计上,hint机制使得Cassandra 能够持续的支持相同数目的读写请求即便集群的工作能力降低。让你的集群的运行最大能力而不考虑故障是一个坏主意。hint机制设计用来最小化集群的额外负担。
一个给定副本节点的所有的hint会被存储在一个单一的分区键,因此执行hint是一个简单的顺序读过程,因此对性能影响最低。如果一个副本节点负载过重或者不可用并且故障检测机制还未标注,预期情况下大部分或者所有的想那个节点发出的写入请求会失败直到因为 write_request_timeout_in_ms(默认为10秒)被触发超时,在那段时间内,Cassandra超时的时候会写hint。
如果多个节点同时发生的话会在协调者节点上出现内存压力。所以协调者会跟踪有多少个hint正在写,如果这个数目比较大的话它会暂时性拒绝那些不正确的副本节点的写入。
四、hint的移除
当使用nodetool removenode命令从集群中移除一个节点的时候,Cassandra自动移除不再存在的节点的hint。Cassandra也会移除被删除表的hint。
五、每周计划性修复
第一眼,可能认为hint机制让你的数据更加安全而不需要运行修复。仅当硬件故障不发生时这是正确的。
硬件故障有下列结果:
•已经完成的写入的历史数据丢失。没有集群中其他节点关于节点丢失的数据信息。
•发生故障的节点协调的hint中尚未重新执行的请求的丢失。
Cassandra1.2文档学习(12)—— hint机制的更多相关文章
- Cassandra1.2文档学习解读计划——为自己鼓劲
最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...
- Cassandra1.2文档学习(9)—— 数据写入
数据参考:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/manage_dml ...
- Cassandra1.2文档学习(6)—— 客户端数据请求
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(2)——节点间通信协议之gossip协议
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(15)—— 配置数据一致性
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...
- Cassandra1.2文档学习(3)——数据分配和复制
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
- Cassandra1.2文档学习(16)—— 模式的变化
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...
- Cassandra1.2文档学习(13)—— 数据读取
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...
- Cassandra1.2文档学习(1)——Cassandra基本说明
参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...
随机推荐
- 一条直线上N个线段所覆盖的总长度
原文:http://blog.csdn.net/bxyill/article/details/8962832 问题描述: 现有一直线,从原点到无穷大. 这条直线上有N个线段.线段可能相交. 问,N个线 ...
- Windows Service 之 详解(二)
一.创建 Windows 服务程序 1.文件 → 新建 → 项目 → 选择 Windows 服务模板,创建 WinService 项目: 选择这个服务的属性,可以打开属性对话框.可配置如下值: [1] ...
- 关于 未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件。
我这个项目是MVC4的,有两个版本,第一个版本直接运行没什么问题,但是跑第二个版本的时候就给我提示这个错误.好吧,百度果然是万能的.下边是解决方案. 1.找到 C:\Windows\Microsoft ...
- 使用JS制作一个鼠标可拖的DIV(二)——限制区域移动
这次是要对上一篇的内容进行扩展. 由于需要对可拖动的 DIV 进行一个区域范围的限制,所以要给于一个容器,让可拖动的 DIV 元素不能逃出该容器的大小范围. 一.思路 1.在外层增加一个 DIV 容器 ...
- 用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败/OLE DB 错误: OLE DB 或 ODBC 错误 :
用户 'NT AUTHORITY\NETWORK SERVICE' 登录失败/OLE DB 错误: OLE DB 或 ODBC 错误 : 2012-2-23 上午 ,弄SAAS时,发现在生成多维数据集 ...
- 使用addClass()设置自增类名
今天在翻阅JQuery API的时候发现,addClass()方法不仅可以添加类,同时可以调用回调函数. 代码如下: <body> <p>item1</p> < ...
- spring mvc 使用Optional
return Optional.ofNullable(brokerRepository.findOne(id)) .map(broker -> new ResponseEntity<> ...
- tomcat初识
1.新工作使用tomcat,顺便就把tomcat搜了搜,看了下基础 官网:http://tomcat.apache.org/ 打开官网会发现很多版本6,7,8,9,这些版本都有什么区别呢?tomcat ...
- oracle--clob
最近,收到这样的异常邮件: Error updating database. Cause: java.sql.SQLException: ORA-01461: can bind a LONG val ...
- [BigData]关于Hadoop学习笔记第二天(PPT总结)(一)
Plan: 分布式文件系统与HDFS HDFS体系结构与基本概念 HDFS的shell操作 java接口及常用api HADOOP的RPC机制 HDFS源码分析 远程debug 自己设计一分布式文件系 ...