cassandra启动过程介绍

  1. 云栖社区>
  2. Cassandra+Spark社区>
  3. 博客>
  4. 正文

cassandra启动过程介绍

陈江@阿里 2019-08-22 19:07:48 浏览3540

cassandra启动流程

整个启动流程会启动前端cql server用来接收客户端cql请求,启动node互相通信用的MessageService。这个都是常规操作,就不花费篇幅赘述了。cassandra启动过程对于新节点加入还是正常启动还是有区分的,新节点会造成数据重分布,所以需要先执行bootstrap。

分区介绍

先看下cassandra cluster的分区概念。下面这个例子中表示,token组成了一个环,由这4台节点划分,每个server管理一段。所有key值都通过murmur3算法算出token,映射在hash环上,从而找到所属server
image

当有新节点加入集群后,新节点会新分配token,会管理新增部分tokenRange,相当于从老节点分割了token,从而引起了数据迁移
image
上图中server'新加入集群,负责了token范围(51-60),原来管理的server管理token的范围为(51-75),server'在加入集群前,需要先把数据拷贝过来,防止加入后,读数据失败。这其实就是bootstrap过程,原理很简单,但实际因为虚拟节点vnode存在,实现要比这复杂的多。

启动流程

下面是启动过程中比较重要的几个步骤

  • replay WAL

    • 对日志段进行新旧排序,从旧到新,依次replay日志段
    • 解析wal成为mutation,apply mutation,构建memtable,然后强制刷新成sst
    • 此过程不断校验crc,如果最后一个日志段数据损坏,如出现半条操作日志,是可以正常skip然后启动的,其他情况,默认启动失败。
  • JoinRing

    1. 判断本地系统表里面是否bootstrap完毕,完毕直接跳至第4步,否则新节点,开始执行第二步
    2. 生成tokens,默认是随机生成诺干个token,至于多少个,看配置的num_tokens个数。如果本机有其他程序混部导致负载高,可以适度少配置个数,降低cassandra读写负载。
    3. 本地持久化tokens,发起bootstrap,通过数据流接口,发起sst文件拷贝
    4. 将tokens通过Gossip广播给其他node,这样以后任意一节点都能正确找到key对应的node

钉钉群交流

为了营造一个开放的 Cassandra 技术交流,我们建立了微信群和钉钉群,为广大用户提供专业的技术分享及问答,定期在国内开展线下技术沙龙,专家技术直播,欢迎大家加入。
image