資料遷移 | Cassandra to Cassandra
原由
由於設備的變更,需要將原設備的資料,搬遷至新設備的服務;且版本由version 3
升級至version 4
。
環境
來源端(舊):
- IP:
10.0.0.1
- Version:
Cassandra 3.11.9
- Keyspace:
branch
- Table:
users
- IP:
目的端(新):
- IP:
10.0.0.2
- Version
Cassnadra 4.0.1
- Keyspace:
branch
- Table:
users
- IP:
工具
此處使用的版本為 cassandra-4.0.1
來做安裝示範。
<2021-12-06當時下載的最新版>
- Download: apache-cassandra-4.0.1-bin.tar.gz
先行作業
來源端的
Keyspace
和Table
匯出,並於目的端建立。註:
Keyspace
與Table
名稱不可更換,基本上就是原封不動的Schema
就是了。來源端下載
apache-cassandra-4.0.1-bin.tar.gz
並解壓縮。
指令範例:1
2curl -OL http://dlcdn.apache.org/cassandra/4.0.1/apache-cassandra-4.0.1-bin.tar.gz
tar xvzf apache-cassandra-4.0.1-bin.tar.gz
資料遷移
進入到來源端。
針對需要遷移的
Keyspace
做snapshot
。
指令概要:1
nodetool snapshot -t {tag} {keyspace_name}
指令範例:
1
nodetool snapshot -t 2021_12_06 branch
搜尋
snapshot
檔案的路徑。1
find / -name 2021_12_06
搜尋出大概如下的路徑:
1
/mnt/ebs/gp3/sdb/branch/users-0906e5f05fd211ebbbc2a97c006259f3/snapshots/2021_12_06
註:路徑依照可能會有所差異,請依自己搜尋到的為主。
使用工具內的
sstableloader
進行資料搬遷。
指令概要:1
apache-cassandra-4.0.1/bin/sstableloader -d {目的端IP清單} {快照的路徑(擷取至UUID即可)}
指令範例:
1
apache-cassandra-4.0.1/bin/sstableloader -d 10.0.0.2 /mnt/ebs/gp3/sdb/branch/users-0906e5f05fd211ebbbc2a97c006259f3/
資料確認
最簡單的確認方式,針對來源端與目的端的Table
使用COUNT
來觀看其筆數是否一致。
補充
針對相同為Version 3
版本的做遷移,只需要用自身的sstableloader
進行搬遷即可。
例子:
來源端(舊):
- IP:
10.0.0.1
- Version:
Cassandra 3.11.9
- Keyspace:
branch
- Table:
users
- IP:
目的端(新):
- IP:
10.0.0.3
- Version
Cassnadra 3.11.11
- Keyspace:
branch
- Table:
users
- IP:
指令範例:
1 | sstableloader -d 10.0.0.3 /mnt/ebs/gp3/sdb/branch/users-0906e5f05fd211ebbbc2a97c006259f3/ |
例外
指令執行過程如發生權限不足,請在前面加上
sudo
即可解決。使用
apache-cassandra-4.0.1
搬遷的目的端如果不為version 4
會有例外為版本不支援;
解決方式:請直接使用相對應的版本或是使用自身的sstableloader
進行嘗試。使用
apache-cassandra-4.0.1
搬遷的時候,會遇到有一些Exception
,可能是該版本的一些問題(未證實);造成資料沒有完整搬遷,筆數不一致。
解決方式:此處的解決辦法是多執行一次該指令即可。註:該解決方案,未必適用於所有狀況。