我想每隔1小时采取 Cassandra备份并将其移至共享位置。
Cassandra将快照放在默认位置,如何在 / opt / backup 位置拍摄快照?
答案 0 :(得分:4)
你不能(带快照)。
<?xml version="1.0" encoding="UTF-8"?>
<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.osgi.org/xmlns/blueprint/v1.0.0
https://www.osgi.org/xmlns/blueprint/v1.0.0/blueprint.xsd"
xmlns:cm="http://aries.apache.org/blueprint/xmlns/blueprint-cm/v1.1.0"
xmlns:ext="http://aries.apache.org/blueprint/xmlns/blueprint-ext/v1.2.0"
xmlns:cxf="http://camel.apache.org/schema/blueprint/cxf">
<cm:property-placeholder persistent-id="configuration.file"/>
<ext:property-placeholder evaluator="fabric8" placeholder-prefix="$[" placeholder-suffix="]"/>
...
...
<bean id="_test" class="com.xxx.Test">
<argument value="$[env:TEST]"/>
</bean>
是一个非常简单的工具 - 它只是为密钥空间数据目录中的每个文件创建硬链接nodetool snapshot -t <tag> <keyspace>
。
由于这些是硬链接,因此它们必须位于同一文件系统上。这些硬链接的好处是快照速度非常快,并且最初不会占用额外的磁盘空间(当sstables被压缩/删除时,文件仍保留在快照中)。
如果您希望在创建快照时使用snapshots/<tag>
在不同位置进行这些备份。我用-t <tag>
和一个简单的脚本编写了一个演示(没有完全详细说明,但显示了这个想法:
demosnapshot
该脚本使用特定标记(日期时间)创建快照,将内容rsyncs到备份位置,然后删除快照。如果未定义$ cat cassandrabackup.sh
#!/bin/bash
TAG=`date +%Y%m%d%H%M%S`
BACKUP_LOC=/tmp/backup/`hostname`
KEYSPACE=demokeyspace
echo creating snapshot $TAG
nodetool snapshot -t $TAG $KEYSPACE
echo sync to backup location $BACKUP_LOC
find /var/lib/cassandra -type f -path "*snapshots/$TAG*" -printf %P\\0 | rsync -avP --files-from=- --from0 /var/lib/cassandra/ $BACKUP_LOC
echo removing snapshot $TAG
nodetool clearsnapshot -t $TAG
,则所有键空间都被备份。
结果如下:
KEYSPACE
我过去自己做过这个错误 - 在备份中包含主机名;)
除此之外,cassandra还有一个增量备份功能:
http://docs.datastax.com/en/cassandra/3.0/cassandra/operations/opsBackupIncremental.html