使用sstableloader恢复Cassandra Priam备份
之前,我曾寫過關(guān)于設(shè)置Cassandra和Priam進行備份和集群管理的文章。 但是,我在此處提供的用于備份還原的示例并不適用于所有情況,例如,它可能不適用于完全獨立的群集。 或者在部分還原到一個表而不是整個數(shù)據(jù)庫的情況下。
在這種情況下,您可以選擇使用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生成的備份,則似乎可以只復(fù)制特定表的文件(例如,通過AWS上的s3 aws cp),然后sstableloader導(dǎo)入它們。 但是有一個陷阱。 為了節(jié)省空間,Priam使用Snappy壓縮所有文件。 因此,如果您嘗試將它們提供給任何Cassandra實用程序,它將抱怨它們已損壞。
因此,在使用sstableloader或其他任何工具之前,您必須解壓縮它們。 但是如何? 好吧,Priam為此提供了一項服務(wù)–您通過將絕對路徑傳遞到壓縮文件,并將絕對路徑傳遞到應(yīng)放置未壓縮文件的絕對路徑來進行調(diào)用,并且可以輕松完成通過解壓縮器傳輸原始文件的工作。 為了解壓縮整個備份,我編寫了一個python腳本。 它采用某種結(jié)構(gòu),但是您可以對其進行參數(shù)化以使其更加靈活。 這是代碼(對不起我的非慣用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)現(xiàn)在,您已解壓縮了備份文件,可以使用sstableloader對其進行還原。 如果您有大量數(shù)據(jù),可能會花費一些時間,并且不應(yīng)在執(zhí)行快照備份的同時運行還原,因為它可能會失敗(文檔警告)。
然后,如果幸運的話,一切都會過去。 不幸的是,有時候情況并非如此。 該工具遠(yuǎn)非完美,因此例如,如果您刪除了一個列,則還原舊的sstable將失敗,因為它將嘗試插入丟失的列中。 對于實際的生產(chǎn)系統(tǒng),這聽起來像是一個大問題, 并且已經(jīng)有報道,但尚未解決 。 有時,表可能由于未知原因而無法恢復(fù)(流式傳輸失敗,所謂的損壞數(shù)據(jù))。 在這些情況下,您可能想使用sstabledump將sstables轉(zhuǎn)儲為JSON,然后將JSON轉(zhuǎn)換為CQL以插入它。 當(dāng)然,沒有工具可以做到這一點,所以這里是用Java編寫的工具 。 它不是完美的,并且不支持用戶定義的類型,集合和映射。 請注意,對于大型表,這可能不是一個好主意,僅對于較小的表。
總結(jié)一下,總的來說,備份很重要,但是從備份中恢復(fù)就更重要了。 如果沒有還原過程,則備份無用。 僅僅擁有可用的工具(例如Priam)并不意味著您可以準(zhǔn)備執(zhí)行還原過程。 您應(yīng)該對活動登臺數(shù)據(jù)進行測試還原,以及在空的,新形成的群集上進行完整還原,因為存在不同的還原方案。
翻譯自: https://www.javacodegeeks.com/2019/11/restoring-cassandra-priam-backup-with-sstableloader.html
總結(jié)
以上是生活随笔為你收集整理的使用sstableloader恢复Cassandra Priam备份的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 电光白需要备案吗(电光白备案)
- 下一篇: ThinkPad E系列、neo系列、S