Cassandra技术介绍之开篇

简介: 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

目录
相关文章
|
NoSQL MongoDB 数据库
Mongodb的基本使用
Mongodb的基本使用
581 0
|
分布式计算 资源调度 Hadoop
|
网络协议 安全 Linux
linux配置防火墙 Centos7下 添加 端口白名单
linux配置防火墙 Centos7下 添加 端口白名单
3276 0
|
5月前
|
人工智能 IDE API
Claude Code / OpenClaw / Cursor Skill 横向对比:2026 最实用 AI 编程工具全解析
2026 年,AI 编程工具已从简单的代码补全进化为具备自主执行、多文件操作、全流程自动化能力的智能体。Claude Code、OpenClaw、Cursor Skill 作为当前最主流的三类工具,分别代表了终端智能体、开源多通道智能体、IDE 原生 AI 三种不同的技术路线。它们并非简单的竞争关系,而是面向不同开发场景、不同工作流的互补工具。
2168 2
|
9月前
|
安全 Java API
Spring Boot 4 升级实战:从3.x到4.0的分步升级保姆级指南
Spring Boot 4.0于2025年11月发布,基于Spring Framework 7.0,实现模块化(47个轻量自动配置)、JSpecify空安全校验、原生API版本控制等重大升级。镜像减19%、启动快33%,迁移平滑,3.5.x支持至2026年11月。(239字)
6818 1
|
存储 缓存 监控
G1原理—8.如何优化G1中的YGC
本文主要探讨了针对1.5千QPS数据报表系统的性能优化,重点分析了因停顿时间过短导致新生代内存不足的问题,并提出了通过调整停顿时间来优化系统性能的解决方案。同时,还讨论了由于大量大对象分配引发系统吞吐量下降的情况,通过增大Region大小和调整TLAB参数有效减少了频繁的Mixed GC。最后,文章详细介绍了YGC相关参数(如TLAB、RSet、PLAB)的优化策略,为提升JVM垃圾回收效率提供了实用建议。
G1原理—8.如何优化G1中的YGC
|
Linux iOS开发 MacOS
DeepSeek爆火,如何免费部署到你的电脑上?获取顶级推理能力教程来了
如何在本地电脑上免费部署DeepSeek,获取顶级推理能力?只需三步:1. 访问Ollama官网下载并安装对应操作系统的版本(支持macOS、Linux和Windows)。2. 打开Ollama并确保其正常运行。3. 在Ollama官网搜索并选择DeepSeek模型(如deepseek-r1),根据电脑配置选择合适的模型大小(1.5B至671B)。通过终端命令(如ollama run deepseek-r1:1.5b)运行模型,即可开始使用DeepSeek进行推理。退出模型时,在终端输入/bye。更多详情请参考Ollama官方文档。
|
存储 算法 Java
G1原理—4.G1垃圾回收的过程之Young GC
本文详细解析了G1垃圾回收器中YGC(Young Generation Collection)的完整流程,包括并行与串行处理阶段。内容涵盖YGC相关参数设置、YGC与Mixed GC及FGC的关系、新生代垃圾回收的具体步骤(如标记存活对象、复制到Survivor区、动态调整Region数量等),以及并行阶段的多线程操作和串行阶段的关键任务(如处理软引用、整理卡表、重构RSet)。
G1原理—4.G1垃圾回收的过程之Young GC
|
分布式计算 运维 调度
Spark——成功解决java.util.concurrent.TimeoutException: Futures timed out after [600 seconds]
Spark——成功解决java.util.concurrent.TimeoutException: Futures timed out after [600 seconds]
11988 0
|
Windows
Windows操作系统部署安装Kerberos客户端
详细介绍了在Windows操作系统上部署安装Kerberos客户端的完整过程,包括下载安装包、安装步骤、自定义安装路径、修改环境变量、配置hosts文件和Kerberos配置文件,以及安装后的验证步骤。
3261 3
Windows操作系统部署安装Kerberos客户端