Cassandra管理之备份与恢复

Cassandra的备份就是对现有的数据作一个快照,恢复则是把快照进行还原。不只能够对全库作快照,也能够针对表、keyspace单独作备份。另外它也支持增量备份。java

一、全量备份

[root@db03 ~]# nodetool snapshot
Requested creating snapshot(s) for [all keyspaces] with snapshot name [1570691336948] and options {skipFlush=false}
Snapshot directory: 1570691336948

操做完成后,能够经过listsnapshots验证,以下图所示:
Cassandra管理之备份与恢复
备份完成后,系统会在每一个表所在的目录下生成一个1570691336948文件夹,里面存放了每一个表的备份数据。这里用rhnchecksum表进行说明,以下图所示:
Cassandra管理之备份与恢复node

二、增量备份

默认状况下,它的增量备份是禁用的,能够经过如下命令进行验证:ide

[root@db03 ~]# nodetool statusbackup
not running

启用增量备份,命令以下:ui

[root@db03 ~]# nodetool enablebackup 
[root@db03 ~]# nodetool statusbackup 
running

执行下备份以下:spa

[root@db03 spacewalk]# nodetool snapshot
Requested creating snapshot(s) for [all keyspaces] with snapshot name [1570695931097] and options {skipFlush=false}
Snapshot directory: 1570695931097

三、恢复数据

cassandra的恢复过程以下:.net

  • 清空表
cqlsh:spacewalk> select count(*) from rhnchecksum;           

 count
---------
 8404215

(1 rows)

Warnings :
Aggregation query used without partition key

cqlsh:spacewalk> truncate rhnchecksum;
cqlsh:spacewalk> select count(*) from rhnchecksum;

 count
-------
     0

(1 rows)

Cassandra管理之备份与恢复

  • 还原snapshot目录的数据
    这里将snapshot目录的数据拷贝到数据目录,而后执行refresh,以下:
    [root@db03 rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc]# pwd
    /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc
    [root@db03 rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc]# cp -ra snapshots/1570695931097/* .
    --若是有索引数据也要进行拷贝操做
    [root@db03 rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc]# cp -ra snapshots/1570695931097/.rhnchecksum_idx/* .rhnchecksum_idx/

    当把快照文件复制到对应表的目录下后,运行refresh命令加载新的SSTables 不须要重启机器节点。日志

[root@db03 ~]# nodetool refresh spacewalk rhnchecksum
--完成后,cassandra的日志会出现下面的提示:
[root@db03 ~]# tail -f /var/log/cassandra/system.log 
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,513 ColumnFamilyStore.java:734 - Loading new SSTables for spacewalk/rhnchecksum...
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,517 ColumnFamilyStore.java:782 - Renaming new SSTable /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-47-big to /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-50-big
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,548 ColumnFamilyStore.java:782 - Renaming new SSTable /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-49-big to /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-51-big
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,567 ColumnFamilyStore.java:782 - Renaming new SSTable /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-48-big to /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-52-big
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,589 ColumnFamilyStore.java:782 - Renaming new SSTable /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-46-big to /var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-53-big
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,610 ColumnFamilyStore.java:817 - Loading new SSTables and building secondary indexes for spacewalk/rhnchecksum: [BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-52-big-Data.db'), BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-51-big-Data.db'), BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-53-big-Data.db'), BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-50-big-Data.db')]
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:41:22,614 SecondaryIndexManager.java:366 - Submitting index build of rhnchecksum_idx for data in BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-52-big-Data.db'),BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-51-big-Data.db'),BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-53-big-Data.db'),BigTableReader(path='/var/lib/cassandra/data/spacewalk/rhnchecksum-dbbb8330dde111e99dfb45c418aaa2bc/md-50-big-Data.db')
INFO  [Service Thread] 2019-10-10 16:41:34,134 GCInspector.java:284 - ConcurrentMarkSweep GC in 467ms.  CMS Old Gen: 1227906720 -> 508200320; Code Cache: 35251328 -> 35276800; Metaspace: 45251080 -> 45251832; Par Eden Space: 6575264 -> 139631912; Par Survivor Space: 41943040 -> 14759936
INFO  [Service Thread] 2019-10-10 16:41:43,679 GCInspector.java:284 - ParNew GC in 236ms.  CMS Old Gen: 844136912 -> 967814552; Par Eden Space: 335544320 -> 0; Par Survivor Space: 35314704 -> 41943040
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:47:00,987 SecondaryIndexManager.java:386 - Index build of rhnchecksum_idx complete
INFO  [RMI TCP Connection(68)-127.0.0.1] 2019-10-10 16:47:00,987 ColumnFamilyStore.java:825 - Done loading load new SSTables for spacewalk/rhnchecksum

恢复完成后,验证数据以下图所示:
Cassandra管理之备份与恢复code

nodetool命令的选项中文解释参考:Cassandra nodetool经常使用操做blog

相关文章
相关标签/搜索