cassandra - Cassandra 二级索引备份和恢复
问题描述
我已经建立了一个 2 dc 的 Cassandra 集群。DC1 - 9 个节点,代表 5,一致性 - 本地仲裁。DC2 - 4 个节点,代表 3,一致性 - 本地仲裁。一直在测试备份和恢复,发现恢复数据后修复节点需要很长时间。System.log 和 compactionstats 显示大部分时间都花在重建二级索引上。寻找答案:
有没有办法备份和恢复二级索引?Cassandra如何修复二级索引?它总是经过全面重建吗?有没有办法专门从 nodetool 修复过程中排除二级索引重建?
备份策略:基于快照,存储在云端。Lucene 目录持有索引也被备份
恢复策略:从快照恢复 sstables,拷贝回 Lucene 目录。
解决方案
当您运行nodetool snapshot
它时,它还会拍摄二级索引的快照。
来自 instaclustr doc:备份文件的确切位置和文件命名约定取决于二级索引的类型和 Cassandra 的版本。
- 常规二级索引
- Cassandra 2.2 +
二级索引将作为 sstables 存储在各自表内的单独目录下。二级索引目录命名为“.nameOfTheIndex”。sstable 文件的命名约定是'md-#-big-*',例如。md-1-big-Data.db - Cassandra 2.1.x 和 Cassandra 2.0.x
二级索引将作为 sstables 存储在各自表的同一目录中。sstable 文件的命名约定是, - 对于 Cassandra 2.0.x,
'keyspace-table.nameOfTheIndex-jb-#- ',例如。testkeyspace-testtable.testindex-jb-1-Data.db - 对于 Cassandra 2.1.x,'keyspace-table.nameOfTheIndex-ka-#- ',例如。testkeyspace-testtable.testindex-ka-1-Data.db
- Cassandra 2.2 +
- SASI 索引(SSTable Attached Secondary Index)
与SASI Index 的另一个重要区别是,如果集群在Instaclustr 备份服务启动之前已经有SASI 索引,则备份服务不会备份SASI 索引。在这种情况下,需要重新启动 Cassandra 服务。如果生产集群出现这种情况,您可以联系我们的技术支持团队寻求帮助。命名约定:'md-1-big-SI_table_column_idx.db'</li>
推荐阅读
- realm - Realm.io 单向同步
- rust - 如何在另一个项目中使用 crate 使其不会再次编译?
- enthought - Canopy 32 和 64 位版本
- javascript - 用锚标记替换http链接
- node.js - 授权GAE服务器访问Cloud SQL Instance
- java - 如何通过命令提示符安装java
- rest - Restsharp 比 HTTPClient 好在哪里?
- node.js - nodejs app exited with code 0 when docker-compose up
- java - How to implement Parcelable
- c++ - Does any of current C++ compilers ever emit "rep movsb/w/d"?