sstableverify
檢查提供的表格中是否有錯誤或損毀的 sstable。
在執行此工具之前,必須先停止 Cassandra,否則會發生意外的結果。注意:腳本不會驗證 Cassandra 是否已停止。
警告
請參閱 CASSANDRA-9947 和 CASSANDRA-17017,了解有關此工具風險的討論。具體來說:「我們將驗證失敗的 sstable 標記為未修復,但這並非您所想的。這表示本機節點將在下一次修復中使用該 sstable,但其他節點不會。因此,我們最終只會將我們可以從中讀取的任何資料串流到其他複本。如果我們可以神奇地標記遠端節點上與本機 sstable 中資料對應的任何 sstable,那將可行,但我們無法做到。」
此工具需要使用 -f 或 --force 旗標來表示使用者了解風險,並希望嘗試使用它。
用法
sstableverify <選項> <鍵值空間> <表格>
--debug |
顯示堆疊追蹤 |
-e、--extended |
延伸驗證 |
-h、--help |
顯示此說明訊息 |
-v、--verbose |
詳細輸出 |
-f、--force |
允許使用工具(風險請參閱 CASSANDRA-17017) |
基本驗證
這是基本驗證。這不是一個非常快速的程序,且會使用記憶體。如果您有許多 sstable,您可能需要增加記憶體設定。
範例
sstableverify keyspace eventlog Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db')
延伸驗證
在延伸驗證期間,將會驗證個別值是否有錯誤或損毀。這當然需要更多時間。
範例
root@DC1C1:/# sstableverify -e keyspace eventlog WARN 14:08:06,255 Only 33.096GiB free across all data volumes. Consider adding more capacity to your cluster or removing obsolete snapshots Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') (7.353MiB) Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') Extended Verify requested, proceeding to inspect values Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-32-big-Data.db') succeeded. All 33211 rows read successfully Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') (3.775MiB) Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') Extended Verify requested, proceeding to inspect values Verify of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-37-big-Data.db') succeeded. All 17068 rows read successfully
損毀檔案
如果腳本偵測到損毀檔案,將會列出這些檔案。
範例
sstableverify keyspace eventlog Verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') (7.416MiB) Deserializing sstable metadata for BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') Checking computed hash of BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db') Error verifying BigTableReader(path='/var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db'): Corrupted: /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db
一個類似的(但較不詳細)工具將會顯示建議的動作
nodetool verify keyspace eventlog error: Invalid SSTable /var/lib/cassandra/data/keyspace/eventlog-6365332094dd11e88f324f9c503e4753/mc-40-big-Data.db, please force repair