7.2、Cassandra快照備份

7.2.1、關於快照

Cassandra通過對存儲在數據目錄中的所有磁盤數據文件(SSTable文件)進行快照來備份數據。 您可以在系統處於聯機狀態時拍攝所有keyspace,單個keyapace或單個table的快照。

使用並行ssh工具(如pssh),可以快照整個羣集。 這提供了最終一致的備份。 儘管在創建快照時沒有一個節點與其副本節點保持一致,但恢復的快照使用Cassandra的內置一致性機制恢復一致性。

執行全系統快照後,可以在每個節點上啓用增量備份來備份自上次快照後更改過的數據:每次將memtable刷新到磁盤並創建SSTable時,快照都將被複制到/data目錄的備份子目錄(JNA已啓用)。壓實的SSTables不會在/backups中創建快照,因爲這些SSTables不包含任何尚未備份的數據。

7.2.2、拍攝快照

使用nodetool snapshot命令爲每個節點創建快照 。 要獲取全局快照,請使用並行ssh實用程序(如pssh)運行nodetool snapshot命令。

快照首先將所有內存中的寫入操作(memtables)刷新到磁盤,然後爲每個keyspace創建一個SSTable文件的映射。 節點上必須有足夠的可用磁盤空間來容納數據文件的快照。 一個快照只需要很少的磁盤空間。 但是,由於快照不能刪除舊的過時數據文件,因此快照可能會導致磁盤使用率隨着時間的推移而增長得更快。 快照完成後,您可以根據需要將快照文件移動到其他位置,也可以將其保留在原位。

注意: Cassandra只能在表system_schema存在時從快照中恢復數據。 建議您也備份表system_schema。

運行nodetool snapshot命令,指定主機名,JMX端口和密鑰空間。 例如:

$ nodetool -h localhost -p 7199 snapshot mykeyspace

快照是在 data/keyspace/table_name-UUID/snapshots/snapshot_name 目錄中創建的。 每個快照目錄都包含許多快照時數據的.db文件。

例如:

  • Cassandra軟件包安裝: /var/lib/cassandra/data/mykeyspace/users-081a1500136111e482d09318a3b15cc2/snapshots/1406227071618/mykeyspace-users-ka-1-Data.db

  • Cassandra tarball安裝: install_location /data/data/mykeyspace/users-081a1500136111e482d09318a3b15cc2/snapshots/1406227071618/mykeyspace-users-ka-1-Data.db

7.2.3、刪除快照文件

拍攝快照時,以前的快照文件不會自動刪除。 您應該刪除不再需要的舊快照。

nodetool clearsnapshot命令將從每個keyspace的快照目錄中刪除所有存在的快照文件。 您應該在快照備份之前執行此命令,以便在更新快照之前清除舊快照。

  • 要刪除節點的所有快照,請運行nodetool clearsnapshot命令。 例如:
    $ nodetool -h localhost -p 7199 clearsnapshot 
  • 要一次刪除所有節點上的快照,請使用並行ssh實用程序運行nodetool clearsnapshot命令。
    要刪除單個快照,請使用快照名稱運行clearsnapshot命令:
    $ nodetool clearsnapshot -t <snapshot_name> 

文件名和路徑根據快照的類型而有所不同。 有關快照名稱和路徑的詳細信息,請參閱nodetools快照 。

7.2.4、啓用增量備份

啓用增量備份(默認情況下禁用)時,Cassandra會將每個可刷新表的SSTable映射到keyspace數據目錄下的備份目錄。 這允許在不傳輸整個快照的情況下將備份存儲在異地。 而且,增量備份與快照相結合,可以提供可靠的最新備份機制。 壓實的SSTables不會在/backups中創建映射文件,因爲這些SSTables不包含任何尚未備份的數據。 一個時間點的快照,加上所有的增量備份和提交日誌,形成一個完整的備份。

與快照一樣,Cassandra不會自動清除增量備份文件。建議在每次創建新快照時設置一個進程來清除增量備份文件。

編輯集羣中每個節點上的cassandra.yaml配置文件,並將incremental_backups的值更改爲true。

7.2.5、快照恢復數據

從快照恢復keyapce需要表的所有快照文件,如果使用增量備份,則包括在創建快照之後創建的任何增量備份文件、SSTables(從 repair、decommission等)在內。

注意:從快照和增量備份還原臨時會導致正在恢復的節點上的CPU和I / O活動密集。

7.2.6、從本地節點恢復

此方法將快照目錄中的SSTables複製到正確的數據目錄中。

1.確保表system_schema存在。當表system_schema存在時,Cassandra只能從快照中恢復數據。 如果schema不存在並且尚未備份,則必須重新創建schema。

2.如有必要, 截斷表格。

3.找到最近的快照文件夾。 例如:

data_directory/keyspace_name/table_name-UUID/snapshots/snapshot_name

4.將最新的快照SSTable文件目錄複製到data_directory / keyspace / table_name - UUID目錄 。

5.運行nodetool refresh.。

注意:您可能不需要在某些條件下截斷。 例如,如果某個節點丟失了一個磁盤,則在恢復之前可能需要重新啓動,以便節點在開始還原過程之前繼續接收新的寫入。
截斷通常是必要的。 例如,如果意外刪除了數據,那麼該刪除的邏輯刪除後面的寫入時間戳將比快照中的數據晚。 如果恢復時沒有截斷(移除墓碑),Cassandra將繼續遮蓋恢復的數據。 其他類型的重寫也會發生此行爲並導致相同的問題。

如果節點位於5.0.10之前的DataStax Enterprise版本上,請重新啓動節點 。 此重新啓動是必需的,因爲nodetool刷新不尊重磁盤上現有的LCS級別,這會導致壓縮積壓。

7.2.7、從集羣中備份恢復

此方法使用sstableloader來恢復快照。

1.確保表system_schema存在。當表system_schema存在時,Cassandra只能從快照中恢復數據。 如果schema不存在並且尚未備份,則必須重新創建schema。

2.如有必要, 截斷表格。

3.使用備份的SSTables上的sstableloader工具還原最近的快照。
sstableloader將SSTables流式傳輸到正確的節點。 不需要刪除提交日誌或者刪除重啓節點。

注意:您可能不需要在某些條件下截斷。 例如,如果某個節點丟失了一個磁盤,則在恢復之前可能需要重新啓動,以便節點在開始還原過程之前繼續接收新的寫入。
截斷通常是必要的。 例如,如果意外刪除了數據,那麼該刪除的邏輯刪除後面的寫入時間戳將比快照中的數據晚。 如果恢復時沒有截斷(移除墓碑),Cassandra將繼續遮蓋恢復的數據。 其他類型的重寫也會發生此行爲並導致相同的問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章