cassandra_使用sstableloader恢复Cassandra Priam备份

本文介绍了如何使用sstableloader工具恢复Cassandra数据库的Priam备份。内容涉及了解压缩Priam压缩备份文件的Python脚本,以及在遇到恢复问题时如何使用sstabledump和Java工具进行解决。强调了备份恢复过程的重要性,并提醒读者进行测试恢复和全集群恢复的必要性。
摘要由CSDN通过智能技术生成
cassandra

cassandra

之前,我曾写过关于设置Cassandra和Priam进行备份和集群管理的文章。 但是,我在此处提供的用于备份还原的示例并不适用于所有情况,例如,它可能不适用于完全独立的群集。 或者在部分还原到一个表而不是整个数据库的情况下。

在这种情况下,您可以选择使用sstableloader实用程序进行还原。 它具有简单明了的语法:

 sudo sstableloader -d 172.35.1.2,172.35.1.3 -ts /etc/cassandra/conf/truststore .jks \

   -ks /etc/cassandra/conf/node .jks -f /etc/cassandra/conf/cassandra .yaml \

    ~ /keyspacename/table-0edcc420c19011e7a8c37656dd492a94

如果您查看Priam生成的备份,则看起来您可以只复制特定表的文件(例如,通过AWS上的s3 aws cp),然后sstableloader导入它们。 但是有一个陷阱。 为了节省空间,Priam使用Snappy压缩所有文件。 因此,如果您尝试将它们提供给任何Cassandra实用程序,它将抱怨它们已损坏。

因此,在使用sstableloader或其他任何工具之前,您必须解压缩它们。 但是如何? 好吧,Priam为此提供了一项服务–您通过将绝对路径传递到压缩文件,并将绝对路径传递到应放置未压缩文件的绝对路径来进行调用,并且可以轻松完成通过解压缩器传输原始文件的工作。 为了解压缩整个备份,我编写了一个python脚本。 它采用某种结构,但是您可以对其进行参数化以使其更加灵活。 这是代码(对不起我的非惯用Python,我仅将其用于简单的脚本编写):

 #! /usr/bin/env python
 # python script used to pass each backup file through the decompression facility of Priam (using Snappy)
 # so that it can be used with sstableloader for restore
 import os
 import requests
 rootdir = '/home/ec2-user/backup'
 target = '/home/ec2-user/keyspace'
for subdir, dirs, files in os.walk(rootdir):
    for file in files:

        fullpath = os.path.join(subdir, file)

        parent = os.path.join(fullpath, os.pardir)

        table = os.path.basename(os.path.abspath(parent))

        targetdir = target + "/" + table + "/"

        if not os.path.exists(targetdir):

            os.makedirs(targetdir)

        url = ' http://localhost:8080/Priam/REST/v1/cassadmin/decompress?in= ' + fullpath + '&out=' + target + "/" + table + "/" + file

        print(url)

        requests.get(url)

现在,您已解压缩了备份文件,可以使用sstableloader恢复该文件。 如果您有大量数据,可能会花费一些时间,并且不应在执行快照备份的同时运行还原,因为它可能会失败(文档警告)。

然后,如果幸运的话,一切都会过去。 不幸的是,有时候情况并非如此。 该工具远非完美,因此例如,如果您删除了一个列,则恢复旧的sstable将失败,因为它将尝试插入丢失的列中。 对于实际的生产系统,这听起来像是一个大问题,并且已经有报道,但尚未解决。 有时,表可能由于未知原因而无法恢复(流式传输失败,所谓的损坏数据)。 在这些情况下,您可能想使用sstabledump将sstables转储为JSON,然后将JSON转换为CQL以插入它。 当然,没有工具可以做到这一点,所以这里是用Java编写的工具。 它不是完美的,并且不支持用户定义的类型,集合和映射。 请注意,对于大型表,这可能不是一个好主意,仅对于较小的表。

作为总结,在这里,备份非常重要,但是从备份中恢复则更为重要。 如果没有还原过程,则备份无用。 仅仅拥有可用的工具(例如Priam)并不意味着您可以准备执行还原过程。 由于存在不同的还原方案,因此您应该对活动的暂存数据进行测试还原,以及对空的,新形成的群集进行完全还原。

翻译自: https://www.javacodegeeks.com/2019/11/restoring-cassandra-priam-backup-with-sstableloader.html

cassandra

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值