关于Apache Cassandra :快照技术

本文涉及的产品
云原生多模数据库 Lindorm,多引擎 多规格 0-4节点
Redis 开源版,标准版 2GB
推荐场景:
搭建游戏排行榜
云数据库 Tair(兼容Redis),内存型 2GB
简介: 关于Apache Cassandra :快照技术

"快照"概念

计算机科学中,快照是对机器上某一个时间点的数据的拷贝。

你可能做过如下的事情:
nja4d08zs7tdg65mldjz

每一个快照中的文件,都是你所保存的短文的某一个时间点上的拷贝。快照提供了一个简单的撤销更改以及备份系统的方法。

Cassandra存储数据的方式

Cassandra 将数据以keyspace(在mysql/PostgreSQL里面就是database的类似概念),table形式逻辑存储。数据实际上则是存储在SSTable里面的。

当Cassandra将数据写到磁盘上的时候,他会生成一个SSTable文件,每一个SSTable文件是不可更改的,所以在每次从内存中flush数据下来的时候都会生成一个SSTable文件。在Cassandra中会有一个特殊的叫做Compaction的过程用来自动的将table下面的多个SSTable文件合并起来。

例如,如果我们在App这个keyspace里面有一个Users的table(老一点的版本叫做column family 列族),数据文件的存储样子就会像下面这样:

<Cassandra Data>/App/Users/
1-big-Data.db
2-big-Data.db
3-big-Data.db
4-big-Data.db

每一个big-data.db的文件都是SSTable的数据存储文件,Compaction将会将这些SSTable文件合并成为一个新的文件比如叫做5-big-data.db。

Cassandra 如何打快照

当你打快照的时候,cassandra会对每一个live SSTable文件进行打hard-link。这个流程实际上是比较简单的。

什么是hard-link

hard link 就是我们理解的硬链接,在类unix系统里面,系统将会使用Inodes去索引对应磁盘上面的文件,所以计算机上面的文件最终都是由Inodes进行索引。一个hard link 是一个与你现有的文件共享一个Inode的新文件。

hard link 与soft link不一样,soft link则是存储了源文件的路径。

补充

对于hard link而言,有一个重要的特性,那么就是当所有的引用都被清楚以后这个实际引用到的物理文件才会被删除。

举个例子,Inode 1001 在磁盘上面索引了500M的文件,我们有2个文件指向Inode1001 ,如果我们删除第一个link,这个文件不会被清理掉,但是当所有的link被清理掉以后这个500M文件将会被删除。

Cassandra的快照存储

因为快照是对已有文件的hard link,所以这些文件不能跨文件系统。 快照文件在Column family(table)目录下面的snapshots目录,如果我们打了一个叫做snapshot1的快照,那么在我们的文件系统上的存储格式将会是这样的:

<Cassandra Data>/App/Users/
1-big-Data.db
2-big-Data.db
3-big-Data.db
4-big-Data.db
<Cassandra Data>/App/Users/snapshots/snapshot1
1-big-Data.db (Hard link)
2-big-Data.db (Hard link)
3-big-Data.db (Hard link)
4-big-Data.db (Hard link)

即使你的源文件执行删除操作,或者源文件执行了merge操作,这个都不会影响snapshot文件的存储。

<Cassandra Data>/App/Users/
5-big-Data.db
<Cassandra Data>/App/Users/snapshots/snapshot1
1-big-Data.db
2-big-Data.db
3-big-Data.db
4-big-Data.db

snapshot对存储容量影响

在分布式存储系统里面,计算你的存储容量并不是简单的计算你的空闲存储空间,snapshot对存储容量是有一定的影响的,特别是你如果周期性的进行snapshot操作,对存储容量的影响还是要考虑进去。

因为我们的snapshot对已有的文件进行了hard link,所以我们的compacttion任务在后台自动做merge的时候,将老文件合成新文件并不能物理上实际删除打了快照的文件,这个将会影响我们的存储容量。

我们可以做一个简单的假设,你有100G的磁盘存储空间,Cassandra使用了50G。

1.你打了一个快照,这个打快照生成的文件不会占用什么存储空间,假设还是50%的容量空闲。

2.后台执行了一个major compact操作,比如cleanup 或者是手工执行scrub操作,这个操作会将已有的table数据重新写入磁盘

3.原有文件将会被重新写入,且存储的文件都是重叠的。那么现在就是100% 使用了。

虽然上述列子是一个极端情况下的假设,但是实际上打快照以及组合compaction的确会对磁盘容量产生较大影响。

从快照中恢复数据

没有自动的快照恢复机制,这里需要执行一些手动操作。

当cluster在运行:

  • truncate 需要恢复的表
  • 停止cassandra服务

为什么需要truncate? 如果有一些tombstone残留着,那么他们可能会删除你将要恢复的文件。 truncate将会remove你表中的tombstones。

(译者注:从snapshot中恢复数据操作需要视具体的操作而言,这里的case需要视你的需求,如果需要恢复到数据tombstones的时间点前,且时间点后的数据不需要,那么truncate表可以理解)

cluster中的所有节点上:

  • 到对应的需要恢复数据的snapshot目录下面
  • 把已有的目录下的SSTable文件拷贝到数据目录下面

最后

  • 启动cassandra 服务
  • 每个节点执行下nodetool refresh

相关命令索引

打快照

nodetool snapshot [options] [keyspaces]

引用:

https://cassandra.apache.org/doc/latest/tools/nodetool/snapshot.html

(译者注:可以在使用nodetool help command,展示出各个command的操作帮助指南)

执行快照名字打快照

nodetool snapshot -t name

对一个特殊keyspace下的所有table打快照

nodetool snapshot keyspace

对2个指定表打快照

nodetool snapshot -kt keyspace.tabel1 keyspace.table2

列出所有快照

nodetool listsnapshots

引用:https://cassandra.apache.org/doc/latest/tools/nodetool/listsnapshots.html

清理快照

nodetool clearsnapshot [options] [keyspaces]

引用:https://cassandra.apache.org/doc/latest/tools/nodetool/clearsnapshot.html

删除所有快照

nodetool clearsnapshot

删除带快照名的快照

nodetool clearsnapshot -t snapshot_name

(译者注:为啥要用-t?明明是快照名,这应该是历史问题,因为-t的代码逻辑是-tag,内部代码早期是以tag来处理这个快照)

删除keyspace下的快照

nodetool clearsnapshot keyspace

(译者注:阿里云cassandra部分功能也用到了snapshot,也在调研的时候发现一些社区已有的问题并解决,比如:CASSANDRA-13019,当然我们也提交了一些我们发现的问题,比如CASSANDRA-15297,包括上述描述的快照空间问题,我们也有对应进行解决。)

入群邀约
为了营造一个开放的 Cassandra 技术交流环境,社区建立了微信群公众号和钉钉群,为广大用户提供专业的技术分享及问答,定期开展专家技术直播,欢迎大家加入。另外阿里云提供免费Cassandra试用:https://www.aliyun.com/product/cds
8a55f5a99463a7276265074b1079d74f4ab3d164_1_

目录
相关文章
|
3月前
|
消息中间件 资源调度 API
Apache Flink 流批融合技术介绍
本文源自阿里云高级研发工程师周云峰在Apache Asia Community OverCode 2024的分享,内容涵盖从“流批一体”到“流批融合”的演进、技术解决方案及社区进展。流批一体已在API、算子和引擎层面实现统一,但用户仍需手动配置作业模式。流批融合旨在通过动态调整优化策略,自动适应不同场景需求。文章详细介绍了如何通过量化指标(如isProcessingBacklog和isInsertOnly)实现这一目标,并展示了针对不同场景的具体优化措施。此外,还概述了社区当前进展及未来规划,包括将优化方案推向Flink社区、动态调整算子流程结构等。
412 31
Apache Flink 流批融合技术介绍
|
2月前
|
存储 分布式计算 druid
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
62 1
大数据-149 Apache Druid 基本介绍 技术特点 应用场景
|
3月前
|
分布式计算 Java Apache
Apache Spark Streaming技术深度解析
【9月更文挑战第4天】Apache Spark Streaming是Apache Spark生态系统中用于处理实时数据流的一个重要组件。它将输入数据分成小批次(micro-batch),然后利用Spark的批处理引擎进行处理,从而结合了批处理和流处理的优点。这种处理方式使得Spark Streaming既能够保持高吞吐量,又能够处理实时数据流。
74 0
|
6月前
|
Java 数据库连接 Apache
深入理解Apache Commons Pool2池化技术
深入理解Apache Commons Pool2池化技术
|
6月前
|
监控 NoSQL 数据建模
使用Apache Cassandra进行分布式数据库管理的技术实践
【6月更文挑战第5天】本文探讨了使用Apache Cassandra进行分布式数据库管理的技术实践。Cassandra是一款高性能、可扩展的NoSQL数据库,适合大规模、高并发场景。文章介绍了其高可扩展性、高性能、高可用性和灵活数据模型等核心特性,并详细阐述了环境准备、安装配置、数据建模与查询以及性能优化与监控的步骤。通过本文,读者可掌握Cassandra的运用,适应不断增长的数据需求。
|
6月前
|
存储 大数据 分布式数据库
使用Apache HBase进行大数据存储:技术解析与实践
【6月更文挑战第7天】Apache HBase,一个基于HDFS的列式存储NoSQL数据库,提供高可靠、高性能的大数据存储。其特点是列式存储、可扩展至PB级数据、低延迟读写及多版本控制。适用场景包括大规模数据存储、实时分析、日志存储和推荐系统。实践包括集群环境搭建、数据模型设计、导入、查询及性能优化。HBase在大数据存储领域扮演关键角色,未来有望在更多领域发挥作用。
|
6月前
|
存储 分布式计算 Hadoop
使用Apache Hadoop进行分布式计算的技术详解
【6月更文挑战第4天】Apache Hadoop是一个分布式系统框架,应对大数据处理需求。它包括HDFS(分布式文件系统)和MapReduce编程模型。Hadoop架构由HDFS、YARN(资源管理器)、MapReduce及通用库组成。通过环境搭建、编写MapReduce程序,可实现分布式计算。例如,WordCount程序用于统计单词频率。优化HDFS和MapReduce性能,结合Hadoop生态系统工具,能提升整体效率。随着技术发展,Hadoop在大数据领域将持续发挥关键作用。
|
6月前
|
监控 数据处理 调度
使用Apache Airflow进行工作流编排:技术详解与实践
【6月更文挑战第5天】Apache Airflow是开源的工作流编排平台,用Python定义复杂数据处理管道,提供直观DAGs、强大调度、丰富插件、易扩展性和实时监控。本文深入介绍Airflow基本概念、特性,阐述安装配置、工作流定义、调度监控的步骤,并通过实践案例展示如何构建数据获取、处理到存储的工作流。Airflow简化了复杂数据任务管理,适应不断发展的数据技术需求。
1191 3
|
6月前
|
缓存 监控 负载均衡
使用Apache Solr进行搜索优化的技术探索
【6月更文挑战第6天】探索Apache Solr搜索优化,通过字段选择、分析器优化、索引压缩提升索引效率;优化查询分析、缓存、分组排序以增强查询性能;硬件升级、分布式部署及监控调优保证系统稳定性。实战案例展示如何在电商平台上应用这些策略,实现快速准确的搜索服务。Solr在大数据时代展现出广阔的应用潜力。
|
6月前
|
easyexcel Java API
Apache POI与easyExcel:Excel文件导入导出的技术深度分析
Apache POI与easyExcel:Excel文件导入导出的技术深度分析

推荐镜像

更多