資料遷移 | ScyllaDB to Cassandra
原由
由於設備的變更,需要將原設備的資料,搬遷至新設備的服務;
而且是由Scylla
搬遷至Cassandra
。
重點是版本差異很大的搬遷,使用正常的搬遷方式會遇到很多的錯誤;
而網路上又查不到什麼有用的相關資訊,固以下方法才將其筆記起來。
最終使用了一個ScyllaDB to Cassandra
之邪魔歪道資料遷移大法。
註:上面這個方法的命名是另一位同事提出的,作者已笑翻XD。
搬遷錯誤
第一種:直接使用Scylla
裡面的sstableloader
進行搬移至Cassnadra 4.0.1
的錯誤如下:
1 | org.apache.cassandra.exceptions.ConfigurationException: Invalid value 99p for option 'speculative_retry' |
第二種:使用cassandra-4.0.1
工具於ScyllaDB
機器上運行搬遷的錯誤如下:
1 | com.datastax.driver.core.exceptions.InvalidQueryException: Unknown function scylla_counter_shard_list called |
上述兩種方式都無法正確搬遷資料,以下將會進行邪魔歪道資料遷移大法
教學。
環境
來源端(舊):
- IP:
10.0.0.10
- Version:
Scylla Enterprise 2020.1.12
- Keyspace:
bookstore
- Table:
books
- IP:
暫存端:
- IP:
10.0.0.11
- Version
Cassnadra 3.11.9
- Keyspace:
bookstore
- Table:
books
- IP:
目的端(新):
- IP:
10.0.0.12
- Version
Cassnadra 4.0.1
- Keyspace:
bookstore
- Table:
books
- 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
遷移流程
Scylla Enterprise 2020.1.12
-> Cassnadra 3.11.9
-> Cassnadra 4.0.1
說明:因為版本關係,透過中介
Cassnadra 3.11.9
來當做橋梁做資料搬遷。
資料遷移
進入到來源端。
針對需要遷移的
Keyspace
做snapshot
。
指令概要:1
nodetool snapshot -t {tag} {keyspace_name}
指令範例:
1
nodetool snapshot -t 2021_12_06 bookstore
搜尋
snapshot
檔案的路徑。1
find / -name 2021_12_06
搜尋出大概如下的路徑:
1
2/var/lib/scylla/data/bookstore/books-e7003700570711eabe4c000000000000/snapshots/2021_12_06
/var/lib/scylla/data/bookstore/books_index-e738ac20570711eabe4c000000000000/snapshots/2021_12_06注:可以看到有一個
_index-
的部分,此為View
,並不是Table
,請忽略。
註:路徑依照可能會有所差異,請依自己搜尋到的為主。使用
Scylla
自身的sstableloader
進行資料搬遷。
指令概要:1
sstableloader -d {暫存端IP清單} {快照的路徑(擷取至UUID即可)}
指令範例:
1
sstableloader -d 10.0.0.11 /var/lib/scylla/data/bookstore/books-e7003700570711eabe4c000000000000/
進入到暫存端。
進行
Cassandra to Cassandra
的搬遷動作,請參考前一篇 資料遷移 | Cassandra to Cassandra。完成後,基本上資料就成功搬遷完畢。
額外狀況
如果發現搬遷後,只有部分資料,請注意你的設備/節點是否為多個;
多台機器的情況下,請至每一台都下一次指令,這樣就會把資料慢慢補齊。
註:理論上…。
結語
資料搬遷不外乎就是花時間和踩坑,上面的這個方法並不是最正統的方式,但是確實解決了此次的問題。
建議搬遷資料,還是使用相同資料存儲、相同版本是最無問題且相對簡單的。