注册 登录  
 加关注
查看详情
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

obsolete

wanna go

 
 
 

日志

 
 

有关Cassandra节点之间的通信:Gossip  

2012-08-01 10:46:11|  分类: 默认分类 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

Cassandra使用叫做Gossip的协议发现集群中其他节点的位置和状态信息。Gossip是一个点对点的通信协议,节点之间会周期进行状态信息交换——这些信息包括当前节点本身信息,以及当前节点存储的其他节点的状态信息。

在Cassandra中,gossip进程每秒钟都会和集群中的其他三个节点交换状态消息。状态信息包括节点自身的信息、以及所存储的其他节点的信 息,这样集群中的节点,很快就能够互相了解。gossip消息都有一个版本信息,随着交换的进行,旧的信息会逐渐被旧的信息覆盖。

集群成员和种子节点

当节点第一次启动,它会从配置文件中确定所属Cassandra集群的名字,以及确定seeds node(我翻译为种子节点),通过这些seeds node,可以获取集群中其他节点的信息。这些配置信息,都在cassandra.yaml配置文件中。

为了避免gossip通信分区,集群中所有节点必须配置相同的seeds node列表。这对节点第一次启动来说至关重要。默认的,节点会在后续的重启过程中,记住这些与它交换gossip信息的节点。

Note:seed node的设计,并没有特殊的目的,仅仅是为了能够处理新加入节点到集群中的情况。

为了知道节点存储的是哪个范围内的数据,节点必须知道它自己的token,以及集群中其他节点的token。当初始化一个新的集群,开发人员需要为 集群生成tokens,并且将这些tokens分配给每一个节点。切记,这个操作要在第一次启动之前完成。当集群启动之后,节点会通过gossip将自己 的token告诉其他节点,同时也知道其他节点的token。更多可以看Cassandra数据划分

关于失败检测和恢复

失败检测是根据gossip状态信息,判断集群中的另一个节点是否正常。失败检测可以用来避免客户端发送请求到不可达的节点。

gossip会追踪其他直接或者间接节点的心跳信息。Cassanda没有采用一个固定的阈值,作为宕机的标志,而是通过一个稍微复杂的监测机制进 行的:具体会包括网络条件,服务器负载或者其他的可能影响到心跳频率的条件。在gossip消息交换过程中,每一个节点维护这一个其他节点的的 gossip消息到达时间的窗口。phi值就是基于集群中所有节点的内部到达时间的分布。在Cassandra中,配置 phi_convict_threshold属性可以调整失败检测的敏感度。在绝大多数的情况下,使用默认值即可。但是,DataStax推荐将其设置为 12,当Cassandra部署在EC2之上的时候,主要原因是因为EC2上网络竞争比较激烈。

造成节点失效的原因可能有很多中:硬件故障,网络中断等等。节点中断经常是短暂的,但也可能会延长。一个节点的中断,不会造成节点永久的从集群中移 除。其他的节点,仍旧会周期性的发送gossip消息,以判断中断节点是否恢复。如果想永久的改变节点的成员关系,管理员必须显示的通过nodetool 进行删除和添加节点。

当一个节点从中断恢复之后,可能会缺少一些本来应该写入这个节点的数据。一旦检测到某一个节点宕机,原先要写入宕机节点的操作,会写入其他节点进行 代替,这个需要打开hinted handoff。然后,也有可能,一些数据会真的丢失,因为检测失败是有延迟的。或者,一个节点,宕机时间超过 max_hint_window_in_ms(默认是1小时),hints的数据,将不会写入到其他节点。因为这个原因,定期例行的在每一个节点上执行 nodetool repair是非常有必要的。这样可以帮助保证数据的一致性。在宕机节点恢复之后,也要执行repair,可以帮助恢复数据。

这篇理解得不好,主要是gossip不够熟悉,需要加强。后面的几段,对于运维来说,还是非常重要的。

【完】

  评论这张
 
阅读(966)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018