使用sstableloader恢复Cassandra Priam备份

之前,我曾写过关于设置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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/340597.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

abp vue如何配置服务地址_DHCP服务如何配置才能尽量减少被攻击的可能

DHCP Snooping是啥?DHCP Snooping是DHCP的一种安全特性,用来保证DHCP客户端能够正确的从DHCP服务器获取IP地址,防止网络中针对DHCP的攻击。DHCP Snooping是如何防止DHCP攻击的呢?DHCP,动态主机配置协议,在I…

通达信缠论买卖点公式_通达信缠论多空主图指标公式

1.高位无量就拿,就算拿错了也要拿着。高位就是说股价处于或者接近历史的最高位。高位无量横盘,是非常典型的上涨中继形态之一,高位的窄幅箱型振荡。2.高位放量出现就要跑,哪怕是跑错也要跑。股价在已经过了一段时间比较大的涨幅后&#xff0c…

python服务器搭建 实战_实战讲解:如何用Python搭建一个服务器

有人说表示只学Python没有用,必须学会一个框架(比如Django和web.py)才能找到工作。其实掌握一个类似于框架的高级工具是有用的,但是基础的东西可以让你永远不被淘汰,不要被工具限制了自己的发展。今天不使用框架,也不使用Python标…

多节锂电串联保护板ic_如何有效保护锂电池板,一款优质的MOS管就能解决

锂电池几乎应用于我们日常接触到的各类电器之中,但如何保护锂电池,你又是否知道呢?其实在锂电池保护板,最主要的元器件是IC与MOS。MOS对锂电池板的保护作用非常大,它可以检测过充电,检测过放电,…

使用Java 8 Lambda表达式将实体映射到DTO

当我们需要将DTO转换为实体(Hibernate实体等)并向后转换时,我们都会面临混乱的开销代码。 在我的示例中,我将用Java 8演示代码如何变得越来越短。 让我们创建目标DTO: public class ActiveUserListDTO {public Acti…

使用pp架构形成计算机集群请求的地址无效_干货!史上最详细脑图《大型网站技术架构》...

1. 介绍一下《大型网站技术架构》这本书可能很多人都看过,小编个人觉得真的是非常不错的一本书。看完这本书后,你会对如何设计大型网站架构,有非常清晰的思路。如果还没有读过的小伙伴,赶紧去读一读吧。PS:小编这里有这…

linux 启动rsyslog服务_linux rsyslog服务部署

软件安装在centos7,rsyslog默认安装,重点在于配置文件。[rootlocalhost samba]# vim /etc/rsyslog.conf$ModLoad imuxsock # provides support for local system logging (e.g. via logger command)$ModLoad imjournal # provides access to the systemd…

泰坦尼克号数据_数据分析-泰坦尼克号乘客生存率预测

项目背景目标预测一个乘客是否能够在泰坦尼克号事件中幸存。概述1912年4月15日,泰坦尼克号在首次航行期间撞上冰山后沉没,船上共有2224名人员(包括乘客和机组人员),共有1502人不幸遇难。造成海难失事的原因之一是乘客和…

linux mysql服务器安装_Linux服务器MySQL安装

Linux服务器MySQL安装1. MySQL官网下载如图:2. 安装MySQL[rootiZ2zebb0428roermd00462Z /]# rpm -ivh https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch#过滤MySQL:[rootiZ2zebb0428roermd00462Z /]#yum repolist all |grep mysql#ena…

客户端渲染换为服务器端渲染_服务器与客户端渲染(AngularJS与服务器端MVC)

客户端渲染换为服务器端渲染关于服务器与客户端应用程序渲染的讨论很多。 虽然没有“一刀切”的解决方案,但我将尝试从不同的角度主张客户端(特别是AngularJS)。 首先是建筑。 建筑 做得好的架构已经明确定义了关注点分离(SoS&am…

python3 array为什么不能放不同类型的数据_来自俄罗斯的凶猛彪悍的分析数据库ClickHouse...

点击上方蓝色字体,选择“设为星标”回复”资源“获取更多资源大数据技术与架构点击右侧关注,大数据开发领域最强公众号!暴走大数据点击右侧关注,暴走大数据!ClickHouse相关文章推荐:战斗民族开源 | ClickHo…

php mysql 实现原理_PHP底层和mysql的通信原理

要清楚的几个概念:FPM进程:进程数在php-fpm.ini中设置。没有设置 max_requests ,那么进程是不会销毁的,也就是说当一个进程里面出现死循环或者内存溢出等导致进程僵死的情况出现的时候,处理的进程就会少一个。mysql连接…

通过READ-BEHIND CACHE来控制缓慢的生产者

在我们的互联世界中,我们经常使用我们不拥有或无权改善的API中的数据。 如果一切顺利,他们的表现就会很好,每个人都会感到高兴。 但是太多次,我们不得不使用延迟小于最佳延迟的 API。 当然,答案是缓存该数据 。 但是&…

mysql用户名锁定_MySQL用户锁定

修改方式:set global log_warnings2;MySQL 5.5版本官方文档中,并没有用户锁的状态。因此不存在用户会被锁。。The account-locking capability depends on the presence of the account_locked column in themysql.user table. For upgrades to MySQL 5.…

python package和目录_PyCharm中Directory与Python package的区别

对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清…

mysql过滤器_MYSQL复制过滤器

vim /etc/my.cnf.d/mariadb-server.cnf[mysqld]binlog-do-dbdb1 #白名单模式,仅允许主服务器上生成db1的二进制日志,此选项不支持一行指定多个参数,需要每个参数写一行binlog-do-dbdb2重启服务systemctl restart mariadb.service主服务器…

mysql锁表查询_Mysql数据库锁情况下开启备份导致数据库无法访问处理分享

[背景简介]MySQL是一种开放源代码的关系型数据库管理系统(RDBMS),因为其速度、可靠性和适应性而备受关注。大多数人都认为在不需要事务化处理的情况下,MySQL是管理内容最好的选择。mysql虽然功能未必很强大,但因为它的开源、广泛传播&#xf…

junit编写测试代码_编写数据访问代码测试-不测试框架

junit编写测试代码当我们向数据访问代码编写测试时,是否应该测试其公共API的每种方法? 一开始听起来很自然。 毕竟,如果我们不测试所有内容,那么如何知道我们的代码可以按预期工作? 这个问题为我们提供了重要的线索&…

mysql直接执行文件格式_Windows 环境下执行 .sql 格式文件方式

windows 命令行中有2种执行 .sql 文件的方式:直接行文件 和 先进入mysql命令行然后执行文件。具体操作如下:1. 直接在windows命令行执行。打开windows命令行(winR打开运行窗口然后输入cmd,回车),进入mysql的本机地址,如果配置了环…

python输入多个坐标点_判断多个坐标是否在同一条直线上|Python练习系列[13]

练习内容:判断多个坐标是否在同一条直线上完整代码和注释如下print(请输入几个点的横纵坐标,程序将会返回这几个点是否在同一条直线上)def coor_nums():#获得每个值的横纵坐标int_list[]#初始化坐标列表wrong_list[]#初始化错误列表judgement#判断是否需要修正坐标值while True…