使用nodetool备份cassandra密钥空间

Man*_*ngh 5 cassandra

我在Ubuntu 14.04上使用Cassandra.从文档中,我可以看到运行命令:

nodetool snapshot <keyspace name> 
Run Code Online (Sandbox Code Playgroud)

创建我的键空间的快照.

该命令的输出是:

nodetool snapshot my_keyspace                       
Requested creating snapshot(s) for [my_keyspace] with snapshot name [1455455429118]
Snapshot directory: 1455455429118
Run Code Online (Sandbox Code Playgroud)

根据文档,快照应该出现在目录中:

/var/lib/cassandra/data/my_keyspace/<table names>/snapshots/1455455429118
Run Code Online (Sandbox Code Playgroud)

但是,表名末尾有一些哈希值.

我不确定它来自何处,也不确定该值是否始终相同.例如,表名是user_agents,快照目录是:

/var/lib/cassandra/data/my_keyspace/user_agents-147c8cc0d31c11e5aacb3b02dd594b59/snapshots/1455455429118
Run Code Online (Sandbox Code Playgroud)

我不确定147c8cc0d31c11e5aacb3b02dd594b59代表什么.

我试图自动化这个过程,如果我不知道这个随机哈希值,就不可能知道要选择哪个目录.有没有办法从nodetool命令的输出中禁用它或解密它?

Ren*_*V R 4

来自文档。

拍摄快照

使用nodetool snapshot 命令为每个节点拍摄快照。要拍摄全局快照,请使用并行 ssh 实用程序(例如 pssh)运行 nodetool snapshot 命令。

快照首先将所有内存中的写入刷新到磁盘,然后为每个键空间创建 SSTable 文件的硬链接。节点上必须有足够的可用磁盘空间来容纳数据文件的快照。单个快照需要很少的磁盘空间。但是,快照可能会导致磁盘使用量随着时间的推移增长得更快,因为快照可以防止删除旧的过时数据文件。快照完成后,您可以根据需要将备份文件移动到其他位置,也可以将它们保留在原处。

运行 nodetool snapshot 命令,指定主机名、JMX 端口和键空间。

$ nodetool -h localhost -p 7199 snapshot mykeyspace
Run Code Online (Sandbox Code Playgroud)

快照是在data_directory_location/keyspace_name/table_name/snapshots/snapshot_name目录中创建的。每个快照目录都包含许多 .db 文件,其中包含快照时的数据。

Cassandra 在拍摄快照之前刷新节点,拍摄快照,并将数据存储在数据目录中每个键空间的快照目录中。如果未使用 -t 选项指定快照目录的名称,Cassandra 将使用快照的时间戳来命名目录,例如 1391460334889。请按照升级 Cassandra 之前拍摄快照的过程进行操作。升级时,备份所有密钥空间。有关快照的更多信息,请参阅Apache 文档

如果您未指定快照名称,Cassandra 将使用快照的名称来命名快照目录timestamp。如果键空间不包含数据,则不会创建空目录。

示例:单表快照

仅拍摄音乐键空间中的播放列表表的快照。在 Linux 上,在 Cassandra bin 目录中,例如:

$ ./nodetool snapshot -cf playlists music

Requested creating snapshot(s) for [music] with snapshot name [1391461910600]
Snapshot directory: 1391461910600
Run Code Online (Sandbox Code Playgroud)

Cassandra 创建名为 1391461910600 的快照目录,其中包含播放列表表的备份数据

/var/lib/cassandra/data/music/playlists-bf8118508cfd11e3972273ded3cb6170/snapshots

nodetool <options> snapshot ( 
  ( -cf <table> | --column-family <table> ) 
  ( -t <tag> | --tag <tag> )
  -- ( <keyspace> ) | ( <keyspace> ... )
)
Run Code Online (Sandbox Code Playgroud)
  • 选项有:

  • ( -h| --host) |

  • ( -p| --port)
  • ( -pw| --password)
  • ( -u| --username)

  • -cf、 或--column-family,后跟要备份的表的名称。

  • -t--tag,后跟快照名称。

  • -- 分隔选项和可能被误认为选项的参数。

  • keyspace 是使用该选项时所需的一个键空间名称 -cf ,或者是一个或多个可选键空间名称,以空格分隔。

更新::

/var/lib/cassandra/data/music/playlists-bf8118508cfd11e3972273ded3cb6170/snapshots
Run Code Online (Sandbox Code Playgroud)

这里playlists-bf8118508cfd11e3972273ded3cb6170,-bf8118508cfd11e3972273ded3cb6170UUID


所以它是以这种方式生成的。有一些选项可以监视正在写入的 sstables,并增量备份这些文件。

查看tablesnapcassandra snapshotter

  • 我可以禁用它吗?基本上我正在尝试编写一个unix脚本,该脚本将运行nodetool命令来创建快照。将每个列族的最新快照目录压缩到单个 zip 文件中,并将该 zip 文件上传到 S3。但如果每个列族有多个目录,如何确定选择哪一个呢? (2认同)
  • 我面临的问题是同一个表有多个具有不同 UUID 的目录。我不知道它们是如何创建的以及应该使用其中哪一个。另外,我在文档中找不到有关此内容的信息。这就是为什么询问我是否可以禁用 UUID 部分并将其存储在 Cassandra 2.0 中的目录结构中? (2认同)