参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/architectureGossipAbout_c.html#concept_ds_elb_tgd_fk

一、什么是gossip

  Cassandra使用一个名为gossip的协议去获得集群中其他节点的位置和状态信息。Gossip是一个点对点的通信协议,在这个协议中,节点之间定期交换状态信息。Gossip协议每隔一秒运行一次,节点和不超过的三个节点交换信息,因此所有的节点能够很快知道集群中其他节点的信息。每一个gossip信息有一个版本,因此在信息的交换中,旧的信息会被新的状态信息覆盖。   

  为防止gossip通信的发生隔离,保障数据的一致性和完整性,在一个节点中的所有节点应当使用相同的Seed列表(Seed节点负责和集群中的其他节点通讯并获取信息,Cassandra读取和写入数据都是向Seed节点发出操作指令,这些节点应该相对稳定)。当节点第一次启动时Seed列表信息非常重要。

二、配置gossip

当一个节点启动的时候,它会去读取配置文件cassandra.yaml从而决定它属于那个集群,从那个节点获得集群中其他节点的信息以及一些其他的参数。

具体的配置参数如下

cluster_name

这个节点属于的Cassandra集群的名字,集群中的每一个节点的集群名字都应该是一样的。

listen_address

当前节点的ip地址或者主机名,使得其他节点能够联系到这个节点。这个地址应该是公共地址,而不是localhost。

seed_provider

通过逗号分隔的seed节点的主机名或ip地址。每个节点的此选项应该是一致的。在包含多个数据中心的集群中,每个数据中心都应该有一个seed节点。

storage_port

节点间通信端口(默认为7000)。集群中每个节点的配置应该是一样的。

initial_token

这个参数使用在被一个节点只有一个token的架构下,在一致性哈希环中每个节点都有一段连续的范围,有token表示。当Cassandra第一次启动的时候,会从该配置项中读取,如果唯恐,将随机生成一个token。如果Cassandra不是第一次启动,将从系统表中读取该Token值。

num_tokens

在虚拟节点的时候使用。定义随机分配到该节点的token的数量。原来情况下,一个节点只有一个token,很容易造成数据都在一个节点上的情况,采用虚拟节点,每个节点有多个token,可以进行平均。

三、删除节点的gossip历史信息

gossip信息一直保留在本地,这样当节点重启的时候可以无需等待gossip的交互。

在某些情况下(例如节点IP地址发生改变),你可能希望清除gossip历史信息。

方式:

编辑cassandra-env.sh文件:

加入以下一行

-Dcassandra.load_ring_state= false

四、故障检测和恢复

  故障检测是通过分析gossip状态信息和历史信息,判断系统中其他节点是否宕机的一种方法。Cassandra通过这种方式来避免将客户端请求转发到已经挂掉的节点。通过动态告密者(dynamic snitch),Cassandra还可以避免将请求转发到那些那些虽然存活但是性能特别差的节点。

  gossip从直接或者间接节点中跟踪信息,Cassandra通过一个权责监测机制来计算每一个节点的阀值,综合考虑网络情况、工作负载和其他情况,而不是采用一个固定的阀值来判断是否是一个失败的节点。在gossip交互中,每个节点维护一个滑动的窗口关于集群中其他节点gossip到达的时间。在Cassandra中,可以通过配置 phi_convict_threshold属性值来调整故障检测的敏感度。大多数情况下可以使用默认值,但在Amazon EC2平台中请将数值增加到12。

  导致节点失败的原因有很多种,比如硬件出错和网络中断。节点中断通常短暂但可以持续更长的时间间隔。一个节点的中断很少意味着从集群永久离开,因此不会自动的被从环中移除。其他节点会周期性的给它发gossip信息已查看这个节点是否恢复正常。要想永久的改变集群中节点的成员信息,管理员必须采用nodetool工具显示地增加或移除节点。

  当一个节点从中断中回来的时候,它可能会错失一些本来应该写入这个节点的数据。当故障检测机制标明一个节点是挂掉的,错失的写入会被存储在其他节点,前提是 hinted handoff机制被打开。如果节点的宕机时间超过max_hint_window_in_ms (默认3个小时),hint信息也不会被存储。因为节点的挂掉可能会导致存储为发送的hint信息,你应当在节点被发现挂掉一段时间后运行恢复。此外,你应当在所有节点上周期性的运行nodetool repair 以确保数据的一致性。

Cassandra1.2文档学习(2)——节点间通信协议之gossip协议的更多相关文章

  1. Cassandra1.2文档学习解读计划——为自己鼓劲

    最近想深入研究一下Cassandra,而Cassandra没有中文文档,仅有的一些参考书都是0.7/0.6版本的.因此有个计划,一边学习文档(地址:http://www.datastax.com/do ...

  2. Cassandra1.2文档学习(16)—— 模式的变化

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_schema ...

  3. Cassandra1.2文档学习(15)—— 配置数据一致性

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_config ...

  4. Cassandra1.2文档学习(1)——Cassandra基本说明

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/architecture/a ...

  5. Cassandra1.2文档学习(17)—— CQL数据模型(上)

    参考文档:http://www.datastax.com/documentation/cql/3.0/webhelp/index.html#cql/ddl/ddl_anatomy_table_c.ht ...

  6. Cassandra1.2文档学习(14)—— 事务和并发控制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  7. Cassandra1.2文档学习(13)—— 数据读取

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  8. Cassandra1.2文档学习(12)—— hint机制

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

  9. Cassandra1.2文档学习(11)—— 删除数据

    参考文档:http://www.datastax.com/documentation/cassandra/1.2/webhelp/index.html#cassandra/dml/dml_about_ ...

随机推荐

  1. Windows内核之进程基本含义以及进程的创建

    进程 1 进程的含义: 1.1   一个是操作系统用来管理进程的内核对象. 内核对象也是系统用来存放关于进程的统计信息的地方. 1.2   还有一个是地址空间,它包括全部可运行模块或DL L 模块的代 ...

  2. [Effective C++ --023]宁以non-member、non-friend替换member函数

    作者在这一节中花了大幅度的篇幅来介绍为什么最好使用non-member.non-friend函数. 思路如下: 场景:如果有一个class用来表示网页浏览器,那么清楚缓存及历史记录的时候,我们可能定义 ...

  3. java_泛型方法使用实例

    //提供两种使用情况,第二种情况定义前者是后者的子类-类型通配方式 package ming; import java.util.ArrayList; import java.util.Collect ...

  4. Basic Example of JMX Technology--转载

    原文地址:http://nick-lab.gs.washington.edu/java/jdk1.5b/guide/jmx/tutorial/connectors.html Basic Example ...

  5. 使用urllib进行网页爬取

    # coding=gbk # 抓取开奖号码 # url:http://datachart.500.com/dlt/zoushi/jbzs_foreback.shtml ''' 对网页逐行迭代,找到目标 ...

  6. cgi表单的处理

    在HTML中,当客户填写了表单,并按下了发送(submit)按钮后,表单的内容被发送 到了服务器端,一般的,这时就需要有一个服务器端脚本来对表单的内容进行一些处理, 或者是把它们保存起来,或者是按内容 ...

  7. 【Slickflow学习】.NET开源工作流项目转换(二)

    第一次自己写博客文章,大家多多指教.写博客主要记录一下学习的过程,给初学者提供下参考,也留给自己做备忘. Slickflow .NET开源工作流-项目转换 上一篇文章里说了1.2版本的下载,下载解压后 ...

  8. 精妙SQL语句介绍

    说明:复制表(只复制结构,源表名:a 新表名:b) SQL: select * into b from a where 1<>1 说明:拷贝表(拷贝数据,源表名:a 目标表名:b) SQL ...

  9. 合理配置MySQL缓存 提高缓存命中率

    众所周知,系统读取数据时,从内存中读取要比从硬盘上速度要快好几百倍.故现在绝大部分应用系统,都会最大程度的使用缓存(内存中的一个存储区域),来提高系统的运行效率.MySQL数据库也不例外.在这里,笔者 ...

  10. struts2中<s:property>的用法

    1,访问Action值栈中的普通属性: <s:property value="attrName"/> 2,访问Action值栈中的对象属性(要有get set方法):  ...