Cassandra技术介绍之开篇

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
云数据库 Redis 版,社区版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,通用型 2核4GB
简介: cassandra的技术浅谈

Cassandra是一款分布式的去中心化的数据库,她脱胎于Dynamo以及bigtable,吸收了二者的架构以及数据模型在开源社区的孵化下达到今天这么一个程度。CAP理论中她更强调AP两点,当然C的属性也是可调的,C 和A 这2块在Cassandra身上可以看到一个权衡的存在。本文会从以下几个方面去介绍Cassandra相关知识:

  • 基本架构
  • 部署运维
  • 使用方法

一:基本架构

Cassandra可以有多dc的部署方案,且也有适合在云环境下的部署方案,从复杂的snitch到simple的snitch。不同的环境有不同的部署方式,如果你希望你的cluster下面都是在一个dc,可以使用simple snitch,如果想要有更复杂的rack 以及dc方案,配合network的拓扑,可以组合成比较合适的一套多dc的架构。当然也有适合云上很亲和性的snitch。这里以及简单的simple snitch策略进行介绍。

下面是Cassandra的单DC下的基本架构,其中集群各个节点的conf配置文件里面会配置该节点的partitioner策略,这个策略主要用来计算用户指定的key 以何种hash计算方式计算为一个确定的hash值;其中partitioner策略有4种,分别是:

        Murmur3Partitioner;
        RandomPartitioner;
        ByteOrderedPartitioner;
        OrderPreservingPartitioner;

各个partitioner分别表示不同的,分别表示不同的hash计算方式,当一条key来到Cassandra的集群中,被计算成对应的hash值,并按照该值路由到key的归属节点。比如pkey 经过A节点的计算得到DKeyA,然后路由到从属的primary 节点B,以及副本节点C,D (假设副本数3,摆放策略simple)。

现阶段一个节点负责的hash范围也是有2种配置方式,一种是一个节点分配一个token,这样每个节点按照顺序就可以负责一定的范围,但是这样需要预先平均的计算好各个节点分配的token值;还有一种就是vnode的方式,一个节点分配特定个的token_num,这样在最初加入集群的时候就会计算好相关的vnode。无论哪种方式,给的建议都是要保证每个节点负责的range区间量一致,不然会出现某些节点读写比较频繁,达不到均衡的效果。当然每种方式也有各自的优缺点。

cassandra_art

Cassandra在建keyspace的时候会需要设置副本数,基于keyspace下面的所有的table都是有对应的副本,副本的摆放策略也是基于我们设置的策略进行摆放。此外,在读写的时候需要人为的设置一个Consistencylevel的这个参数,大概的Consistencylevel包括下面几个方面:

LEVEL:

  • ONE:只需要一个副本响应即可;
  • TWO:需要2个副本给出响应;
  • THREE:需要3个副本给出响应;
  • QUORUM:需要大多数(副本数/2 + 1)副本响应;
  • ALL:需要所有副本响应;
  • LOCAL_QUORUM:只需要本地DC下的大多数副本响应;
  • EACH_QUORUM:每个DC下都需要有大多数副本响应;
  • LOCAL_ONE:只需要一个副本响应即可;
  • ANY: 写操作,一个副本响应,或者proxy节点可以记一个hint;读的操作,等一个副本响应;

当我们的请求落到对应的数据节点上以后,在数据节点上由以下几个组件组成我们单机的引擎:

  • Commitlog
  • Memtable
  • Row/Key Cache
  • BloomFilter
  • Sstable (与之相关的有很多物理文件)

至于具体的细节后续会介绍。


二:部署运维

因为cassandra的部署很简单,只需要一个进程就可以搞定,此外社区也有一些相关的工具支持管理运维。所以整体下来部署还是相对的方便简洁,编译完对应的代码,修改conf下面的yaml文件里的相关配置,其中比较重要的几个就是

  • Cluster_name:给你的集群起个名字;
  • Num_token,这个参数和initial_token要做好配合选择;
  • Parititoner:决定了你的集群以何种方式计算hash key;
  • Data_file_directories:虽然在配置里是被注释掉的,但是生产下还是建议自己好好配置下,毕竟还是会影响你的性能;
  • Commitlog_directory: commitlog 的位置,建议和数据盘分开;
  • Seed_provider:seed 节点的信息;

当然,还有别的东西会影响你的集群的性能,比如cache的配置,认证的配置,log 刷盘的配置,读写处理现场池大小等等配置,暂不一一列举,后面会有单独文章介绍配置调优。

​ 当配置完上述文件以后,我们在bin目录下面启动下cassandra这个可执行文件即可,当然我建议自己可以再写一个start的脚本,在脚本里面可以做一些进程nice值调整等事情;

当你nodetool 执行下status命令可以看到节点的状态是UN,表示各个节点都up了。列如我下面部署了4个物理节点的集群:

_2019_04_12_3_13_20

当然,也可以按照自己需要进行rack的部署,dc的部署等,这里只是演示下情况;


三:使用方法

可以使用cassandra自己自带的Cql shell进行一些基本的操作,当然cassandra的官方也推荐了一下driver进行基本的数据操作,见这里,通过这些软件,我们可以很方便的操作读写cassandra的集群,除此之外cassandra还为我们提供了一些运维管理的工具,比如所有对集群节点的操作可以再bin下面通过nodetool脚本进行执行:

nodetool cleanup:清理不属于本节点的key
nodetool compact:执行major compaction
nodetool decommission:decommission掉链接的这个节点
nodetool drain:drain掉这个节点
nodetool flush:对一个/多个table执行flush操作
nodetool info:输出节点的信息
nodetool repair:执行repair操作
nodetool status:输出集群状态信息
nodetool tablestats:输出表信息

下面是我们的社区,可以到我们的社区咨询,讨论相关问题:

微信群:

49a80b6aa947137f3ea33c447c2eaf13fc422453_jpeg

钉钉:
1b211c42d2911109ac34b9e79c33ef2992458c75_jpeg

目录
相关文章
|
10月前
|
存储 消息中间件 缓存
【Cassandra从入门到放弃系列 一】概述及基本架构
【Cassandra从入门到放弃系列 一】概述及基本架构
191 0
|
存储 SQL NoSQL
MongoDB从基础到实战的学习之路(万字总结值得一看)
🍅程序员小王的博客:程序员小王的博客 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 如有编辑错误联系作者,如果有比较好的文章欢迎分享给我,我会取其精华去其糟粕 🍅java自学的学习路线:java自学的学习路线
217 0
MongoDB从基础到实战的学习之路(万字总结值得一看)
|
SQL 存储 分布式计算
Presto 架构原理与优化介绍 | 青训营笔记
MapReduce代表了抽象的物理执行模型,使用]槛较高。 与Mapreduce Job相比,OLAP引擎常通过SQL的形式,为数据分析、数据开发人员提供统的逻辑描述语言,实际的物理执行由具体的引|擎进行转换和优化。
481 0
Presto 架构原理与优化介绍 | 青训营笔记
|
存储 SQL 分布式计算
ClickHouse深入浅出之(一) 基础篇
随着数据科技的进步,数据分析师早已不再满足于传统的T+1式报表或需要提前设置好维度与指标的OLAP查询。数据分析师更希望使用可以支持任意指标、任意维度并秒级给出反馈的大数据Ad-hoc查询系统。这对大数据技术来说是一项非常大的挑战,传统的大数据查询引擎根本无法做到这一点。由俄罗斯的Yandex公司开源的ClickHouse脱颖而出。在第一届易观OLAP大赛中,在用户行为分析转化漏斗场景里,ClickHouse比Spark快了近10倍。在随后几年的大赛中,面对各类新的大数据引擎的挑战,ClickHouse一直稳稳地坐在冠军宝座上。同时在各种OLAP查询引擎评测中,ClickHouse单表查询的速
279 0
ClickHouse深入浅出之(一) 基础篇
|
存储 JSON JavaScript
深入浅出JavaScript继承方案
大家好,我是CoderBin,想必绝大部分人一说继承就会想到类中的继承吧,但其实继承可不是 class 的专利,本文将总结📕 JavaScript 中关于继承的几种方案,其中包括原型链,盗用构造函数、组合式等等,助你力压面试官💪。
81 1
深入浅出JavaScript继承方案
|
NoSQL MongoDB
mangodb的使用入门
mangodb的使用入门
215 0
|
SQL 大数据 OLAP
大数据框架原理简介(4)
大数据框架原理简介(4)
111 0
|
SQL 大数据 数据建模
大数据框架原理简介(3)
大数据框架原理简介(3)
153 0
大数据框架原理简介(3)
|
大数据 数据挖掘
大数据框架原理简介(2)
大数据框架原理简介(2)
大数据框架原理简介(2)
|
分布式计算 大数据 Hadoop
大数据框架原理简介(1)
大数据框架原理简介(1)
191 0
大数据框架原理简介(1)