Cassandra技术介绍之开篇

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 MongoDB,独享型 2核8GB
推荐场景:
构建全方位客户视图
简介: 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

目录
相关文章
|
C++
C++ 语言异常处理实战:在编程潮流中坚守稳定,开启代码可靠之旅
【8月更文挑战第22天】C++的异常处理机制是确保程序稳定的关键特性。它允许程序在遇到错误时优雅地响应而非直接崩溃。通过`throw`抛出异常,并用`catch`捕获处理,可使程序控制流跳转至错误处理代码。例如,在进行除法运算或文件读取时,若发生除数为零或文件无法打开等错误,则可通过抛出异常并在调用处捕获来妥善处理这些情况。恰当使用异常处理能显著提升程序的健壮性和维护性。
248 2
|
弹性计算 缓存 监控
基于“日志审计应用”的 DNS 日志洞察实践
DNS 解析日志是一种记录 DNS 请求和响应的基础信息,监控 DNS 服务可以帮助用户识别网络活动并保持系统安全。日志审计服务支持采集 DNS 内网解析日志、公网权威解析日志、GTM 日志。理解 DNS 日志的字段含义,洞察 DNS 日志背后所代表的网络信息,既可以帮助发现和诊断 DNS 解析相关的问题,还可以检测和识别潜在的安全威胁。
8869 113
|
网络协议 网络安全 PHP
使用天猫精灵实现计算机WOL网络唤醒
解决笔记本连显示器不想掀盖子开机和远程办公时给公司电脑开机不方便的痛点。
15465 8
使用天猫精灵实现计算机WOL网络唤醒
|
设计模式 Java 编译器
Java的带参数和不带参数的构造方法以及作用
Java的带参数和不带参数的构造方法以及作用
367 3
|
机器学习/深度学习 人工智能 自然语言处理
智能引领未来:精准选择与高效利用AI技术的实战指南
【7月更文第14天】在当今科技飞速发展的时代,人工智能(AI)已不再局限于科幻电影的想象,而是成为了推动各行各业革新升级的核心驱动力。从自动驾驶汽车到个性化推荐系统,从医疗诊断辅助到智能制造,AI正深刻改变着我们的生活和工作方式。然而,面对琳琅满目的AI技术和工具,如何精准选择并高效利用AI,成为企业和开发者亟需解决的关键问题。本文将为您揭示这一过程中的核心策略与实践技巧,并通过一个简单的代码示例,让您直观感受AI技术的魅力。
888 3
|
运维 Linux 网络安全
跨平台SSH文件传输:Linux与Windows环境下的实践指南
本文介绍了在Linux和Windows之间使用SCP、SecureCRT及PuTTY工具集进行文件传输的方法。在Linux中,利用SCP命令进行文件下载、上传及目录传输。在Windows环境下,PSFTP和PSCP提供类似功能,而SecureCRT作为SSH客户端,支持设置上传下载目录并进行文件传输。掌握这些工具的使用可提升跨平台运维效率。
|
人工智能 语音技术 决策智能
魔搭社区每周速递(9.28-10.12)
503个模型、189个数据集、82个创新应用、9篇应用文章
|
监控 Ubuntu 安全
|
供应链 安全 芯片
台积电7nm芯片断供影响分析:中国大陆半导体产业的挑战与机遇
近日,有关台积电可能断供中国大陆7nm芯片的消息引发了业界的广泛关注。这一事件不仅关系到全球半导体供应链的稳定性,也对中国大陆半导体产业的发展提出了新的挑战。本文将探讨这一事件背后的原因、可能的影响以及中国大陆半导体产业的应对策略。
697 0
|
存储 资源调度 JavaScript
使用 Homebrew 安装 Node.js
使用 Homebrew 安装 Node.js
2034 0