Like Share Discussion Bookmark Smile

J.J. Huang   2021-12-06   Data migration Cassandra   瀏覽次數:

資料遷移 | Cassandra to Cassandra

原由

由於設備的變更,需要將原設備的資料,搬遷至新設備的服務;且版本由version 3升級至version 4

環境

  • 來源端(舊)

    • IP: 10.0.0.1
    • Version: Cassandra 3.11.9
    • Keyspace: branch
    • Table: users
  • 目的端(新)

    • IP: 10.0.0.2
    • Version Cassnadra 4.0.1
    • Keyspace: branch
    • Table: users

工具

此處使用的版本為 cassandra-4.0.1來做安裝示範。
<2021-12-06當時下載的最新版>

先行作業

  • 來源端KeyspaceTable匯出,並於目的端建立。

    註:KeyspaceTable名稱不可更換,基本上就是原封不動的Schema就是了。

  • 來源端下載apache-cassandra-4.0.1-bin.tar.gz並解壓縮。
    指令範例:

    1
    2
    curl -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

資料遷移

  • 進入到來源端

  • 針對需要遷移的Keyspacesnapshot
    指令概要:

    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: 10.0.0.3
    • Version Cassnadra 3.11.11
    • Keyspace: branch
    • Table: users

指令範例:

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,可能是該版本的一些問題(未證實);造成資料沒有完整搬遷,筆數不一致。
    解決方式:此處的解決辦法是多執行一次該指令即可。

    註:該解決方案,未必適用於所有狀況。