資料遷移 | 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。完成後,基本上資料就成功搬遷完畢。
額外狀況
如果發現搬遷後,只有部分資料,請注意你的設備/節點是否為多個;
多台機器的情況下,請至每一台都下一次指令,這樣就會把資料慢慢補齊。
註:理論上…。
結語
資料搬遷不外乎就是花時間和踩坑,上面的這個方法並不是最正統的方式,但是確實解決了此次的問題。
建議搬遷資料,還是使用相同資料存儲、相同版本是最無問題且相對簡單的。
