本文会就与cassandra备份恢复相关的模块进行系列介绍,大概包括:incremental backups;snapshot;nodetool相关(refresh,rebuild_index等),这里会优先介绍下incremental_backups;
注
本系列使用代码为cassandra-3.11版本;
incremental backups
Incremental backup 顾名思义就是增量备份,大概可以理解为对cassandra新增的数据进行备份。
开启incremental backups
默认情况下incremental backups是关闭的,有2种途径可以开启incremental backups:
- 在cassandra 的conf目录下面的cassandra.yaml配置文件里面有 incremental_backups 这么一个配置项,该配置项默认是false;你可以选择改为true,但是需要重启进程,毕竟是需要重新load配置项;
- 当你的集群进程已经启动,但是又不想重启集群的时候,可以选择bin目录下面有 nodetool 工具,选择 enablebackup 命令即可;因为我们通过代码看到 与 incremental_backups相关的变量是volatile 所以这种操作也是生效的,但是这个命令只能在一个节点生效,如果要操作集群,需要并发对各个节点执行;
public volatile boolean incremental_backups = false;
当我们开启incremental backups功能以后,每当有新的数据从内存memtable flush 到磁盘,就会对新的生成的sstable打一个hardlink;
public void maybeIncrementallyBackup(final Iterable<SSTableReader> sstables)
{
if (!DatabaseDescriptor.isIncrementalBackupsEnabled())
return;// 如果没有开启就跳过,开启就对sstable相应的磁盘文件打hardlink
for (SSTableReader sstable : sstables)
{
File backupsDir = Directories.getBackupsDirectory(sstable.descriptor);
sstable.createLinks(FileUtils.getCanonicalPath(backupsDir));
}
}
此外,对于bootstrap加入的,decommission减少的,move等操作造成一致性hash环变动的,而造成数据迁移的操作,都会再拖数据的时候,生成该硬链接,下面是我对集群新增节点以后,新增节点的对应keyspace的table下面的backups目录下面的拖来的数据;
[root@Cassandra8c32GTest006 backups]# ll /data/data1/keyspace1/standard1-93263960883911e99a9ae16f3def2644/backups/
total 4324
-rw-r--r-- 2 root root 256 Jun 20 10:19 na-11-big-CRC.db
-rw-r--r-- 2 root root 4094625 Jun 20 10:19 na-11-big-Data.db
-rw-r--r-- 2 root root 10 Jun 20 10:19 na-11-big-Digest.crc32
-rw-r--r-- 2 root root 5536 Jun 20 10:19 na-11-big-Filter.db
-rw-r--r-- 2 root root 293888 Jun 20 10:19 na-11-big-Index.db
-rw-r--r-- 2 root root 10264 Jun 20 10:19 na-11-big-Statistics.db
-rw-r--r-- 2 root root 3132 Jun 20 10:19 na-11-big-Summary.db
-rw-r--r-- 2 root root 80 Jun 20 10:19 na-11-big-TOC.txt
在特定的backups目录下面是对应的需要做增量备份的sstable文件。我们可以对这个文件进行直接的备份即可;当然备份完成的文件需要手工的执行删除操作,不然这些文件是不会被清理掉而造成占用存储空间的问题。
钉钉群:
微信公众号: