すべてのプロダクト
Search
ドキュメントセンター

Lindorm:TSDB から LindormTSDB への全データの移行

最終更新日:Jan 14, 2025

このトピックでは、Time Series Database (TSDB) インスタンスから Lindorm 時系列エンジン (LindormTSDB) に全データを移行する方法について説明します。

前提条件

  • クライアントに Linux または macOS がインストールされており、次の環境がインストールされていること。

    • Java Development Kit (JDK) 1.8 以降がインストールされていること。

    • Python 2.x または 3.x がインストールされていること。

  • TSDB インスタンスのバージョンが 2.7.4 以降であること。

  • Lindorm インスタンスが作成され、そのインスタンスに対して LindormTSDB がアクティブ化されていること。詳細については、インスタンスの作成をご参照ください。

背景情報

LindormTSDB は Alibaba Cloud によって開発され、TSDB のほとんどの API と互換性があります。TSDB と比較して、LindormTSDB は低コストでより高いパフォーマンスを提供し、より多くの機能をサポートしています。TSDB は販売終了となっています。TSDB インスタンスのすべてのデータを LindormTSDB に移行することをお勧めします。

プロセス

TSDB インスタンスから LindormTSDB に全データを移行するには、次の手順を実行します。

  1. LindormTSDB が提供する移行ツールを使用して、TSDB インスタンス内のすべての時系列データを読み取り、ローカルファイルに保存します。

  2. 開始時刻、終了時刻、間隔などのタスクの構成に基づいて、移行タスクを複数の時間グループに分割します。移行タスクの構成の oidBatch パラメーターの値に基づいて、各時間グループを複数の読み取りサブタスクに分割します。各読み取りサブタスクは、指定された時間範囲で複数の時系列のデータを読み取り、書き込みコンポーネントにデータを送信します。

  3. 時間グループ内のすべての読み取りサブタスクが完了したら、時間グループの ID、移行タスクの ID、およびタスクステータスを、internal_datax_jobjobName という形式の名前のリストに記録します。

    説明

    LindormTSDB が提供する移行ツールは、複数の移行タスクをサポートしています。各移行タスクの ID は、タスク ID リストに記録されます。時間グループのデータの移行は、前の時間グループのすべての読み取りサブタスクが完了するまで開始されません。

  4. 書き込みコンポーネントは、各読み取りサブタスクから送信されたデータを受信し、複数値データモデルを使用して LindormTSDB に書き込みます。

使用上の注意

  • アプリケーションが ECS インスタンスにデプロイされている場合は、インスタンス間の通信を確保するために、移行元の TSDB インスタンスと同じ VPC に ECS インスタンスと Lindorm インスタンスをデプロイすることをお勧めします。

  • インターネット経由で TSDB インスタンスから LindormTSDB にデータを移行する場合は、Lindorm インスタンスと TSDB インスタンスのパブリックエンドポイントが有効になっており、クライアントの IP アドレスが Lindorm インスタンスと TSDB インスタンスのホワイトリストに追加されていることを確認してください。詳細については、ホワイトリストの構成をご参照ください。

  • 移行プロセス中は、TSDB インスタンスからデータが読み取られ、LindormTSDB に書き込まれます。そのため、データを移行する前に、次の側面から、移行中にビジネスに影響がないかどうかを確認してください。

    • TSDB インスタンスの仕様

    • アプリケーションがデプロイされている環境 (ECS インスタンスなど) の仕様

    • TSDB インスタンスの時系列の数

    • 移行するデータの合計サイズ

    • 各時系列のデータが報告される平均頻度

    • 移行するデータの時間範囲

    • 各移行タスクが分割される間隔

    説明

    パフォーマンス評価の詳細については、パフォーマンステストをご参照ください。

  • 複数値データモデルを使用して書き込まれたデータは、SQL ステートメントを使用してクエリすることはできません。移行されたデータをクエリするために SQL ステートメントを使用するには、データを LindormTSDB に移行する前に時系列テーブルを作成します。

  • デフォルトでは、LindormTSDB で使用されるタイムスタンプの長さは 13 ビットで、ミリ秒単位の時間値を示します。TSDB で使用されるタイムスタンプの長さは 10 ビットで、秒単位の時間値を示します。データが TSDB インスタンスから LindormTSDB に移行されると、データのタイムスタンプは 13 ビットの長さに変換されます。

  • LindormTSDB では、データの書き込みに単一値モデルは推奨されません。そのため、単一値モデルを使用して TSDB インスタンスに書き込まれたデータは、複数値データモデルを使用してクエリする必要があります。次のサンプルコードは、TSDB と LindormTSDB で単一値データモデルを使用して TSDB インスタンスに書き込まれたデータをクエリする方法を示しています。

    // // TSDB でデータをクエリするために使用されるステートメント。
    curl -u username:password ts-xxxxx:3242/api/query -XPOST -d '{
        "start": 1657004460,
        "queries": [
            {
                "aggregator": "none",
                "metric": "test_metric"
            }
        ]
    }'
    // TSDB でのクエリ結果。
    [
        {
            "aggregateTags": [],
            "dps": {
                "1657004460": 1.0
            },
            "fieldName": "",
            "metric": "test_metric",
            "tags": {
                "tagkey1": "1"
            }
        }
    ]
    
    // LindormTSDB でデータをクエリするために使用されるステートメント。
    curl -u username:password ld-xxxxx:8242/api/mquery -XPOST -d '{
        "start":1657004460,
        "queries": [
            {
                "metric": "test_metric",
                "fields": [
                    {
                        "field": "*",
                        "aggregator": "none"
                    }
                ],
                "aggregator": "none"
            }
        ]
    }'
    // LindormTSDB でのクエリ結果。
    [
      {
        "aggregatedTags": [],
        "columns": [
          "timestamp",
          "value"
        ],
        "metric": "test_metric",
        "tags": {
          "tagkey1": "1"
        },
        "values": [
          [
            1657004460000,
            1.0
          ]
        ]
      }
    ]

データ移行タスクの構成

次の 3 つの表で説明されているパラメーターを構成し、構成を job.json などの JSON ファイルとして保存します。

  • タスクに関連するパラメーターを構成します。

    パラメーター

    必須

    説明

    channel

    いいえ

    同時に実行できる同時タスクの数。デフォルト値:1。

    errorLimit

    いいえ

    移行タスク中に許可される書き込みエラーの数。デフォルト値:0。

  • データ読み取りに関連するパラメーターを構成します。TSDB インスタンスの仕様に基づいてパラメーターの値を指定します。

    パラメーター

    必須

    説明

    sinkDbType

    はい

    移行先データベースのタイプ。このパラメーターを LINDORM-MIGRATION に設定します。

    endpoint

    はい

    TSDB インスタンスへの接続に使用するエンドポイント。詳細については、ネットワーク接続をご参照ください。

    beginDateTime

    はい

    移行タスクの開始時刻。

    endDateTime

    はい

    移行タスクの終了時刻。

    splitIntervalMs

    はい

    移行タスクが分割される間隔。値は、移行タスクの合計時間と各時系列のデータが報告される平均頻度に基づいて計算されます。例:604800000(7 日間)。

    • 各時系列のデータが秒以下の頻度で報告される場合は、間隔を 1 日より短い値に設定することをお勧めします。

    • 各時系列のデータが時間単位の頻度で報告される場合は、要件に基づいて間隔をより大きな値に設定できます。

    selfId

    はい

    カスタム移行タスクの ID。

    • 複数の同時タスクを使用してデータを移行する場合は、jobIds パラメーターの値にすべてのタスクの ID を指定します。

    • 1 つのタスクのみを使用してデータを移行する場合は、jobIds パラメーターの値にタスクの ID を指定します。

    jobIds

    はい

    移行タスクの ID。

    jobName

    はい

    移行タスクの名前。移行タスクの名前は、タスクステータスリストのタスクの接尾辞と同じです。複数の同時タスクを使用してデータを移行する場合は、移行タスクの名前を同じにする必要があります。

    oidPath

    はい

    移行するすべての時系列が TSDB インスタンスに格納されているパス。

    oidBatch

    はい

    各読み取りサブタスクが毎回読み取る時系列の数。

    oidCache

    はい

    移行タスクによって移行された時系列をメモリにキャッシュするかどうかを指定します。数十億の時系列を移行する場合、すべての時系列をメモリにキャッシュすることはできません。

    metrics

    いいえ

    移行するテーブル。このパラメーターにはデフォルト値がありません。例:["METRIC_1","METRIC_2"...]

    説明

    移行タスクで毎回読み取られるデータ量は、splitIntervalMs パラメーターと oidBatch パラメーター、および各時系列のデータが報告される平均頻度によって決まります。たとえば、splitIntervalMs の値が 604800000 に設定され、oidBatch の値が 100 に設定され、各時系列のデータが 1 時間ごとに報告される場合、毎回読み取ることができるデータレコードの数は、次の式を使用して計算できます。100 × 604800000/3600000 = 16800。

  • データ書き込みに関連するパラメーターを構成します。

    パラメーター

    必須

    説明

    endpoint

    はい

    LindormTSDB へのアクセスに使用するエンドポイント。詳細については、エンドポイントの表示をご参照ください。

    batchSize

    はい

    一度に LindormTSDB に送信できるデータポイントの最大数。

    multiField

    はい

    複数値データモデルを使用してデータを書き込むかどうかを指定します。複数値データモデルを使用して LindormTSDB にデータを書き込む場合は、このパラメーターを true に設定します。

次の例は、job.json ファイルに含まれる内容を示しています。

{
    "job": {
        "setting": {
            "speed": {
                "channel": 1
            },
            "errorLimit": {
                "record": 0,
                "percentage": 0.00
            }
        },
        "content": [
            {
                "reader": {
                    "name": "tsdbreader",
                    "parameter": {
                        "sinkDbType": "LINDORM-MIGRATION",
                        "endpoint": "ts-xxxx:3242",  // TSDB のエンドポイント
                        "beginDateTime": "2022-5-2 00:00:00", // 移行開始日時
                        "endDateTime": "2022-7-2 00:00:00",   // 移行終了日時
                        "splitIntervalMs": 86400000,        // 分割間隔(ミリ秒)
                        "jobName":"myjob",                  // ジョブ名
                        "selfId":1,                        // タスクID
                        "jobIds":[1],                       // ジョブIDのリスト
                        "oidPath":"{$myworkplace}/oidfile", // OIDファイルのパス
                        "oidBatch":100,                     // バッチサイズ
                        "oidCache":true                     // OIDキャッシュの有効化
                    }
                },
                "writer": {
                    "name": "tsdbwriter",
                    "parameter": {
                        "endpoint": "ld-xxxx:8242",    // LindormTSDB のエンドポイント
                        "multiField":true,             // 複数値モデルの使用
                        "batchSize":500                // バッチサイズ
                    }
                }
            }
        ]
    }
}
                

データ移行タスクの開始

  1. 時系列データ用移行ツール をダウンロードします。

  2. 次のコマンドを実行して、ダウンロードした移行ツールの圧縮パッケージを解凍します。

    tar -zxvf tsdb2lindorm.tar.gz
  3. 次のコマンドを実行して、データ移行タスクを開始します。

    python datax/bin/datax.py  --jvm="-Xms8G -Xmx8G" job.json > job.result
    説明

    上記のコマンドの job を、実際の移行タスクの構成ファイルの名前に置き換えます。

    コマンドの実行後、job.result ファイルにエラー情報が記録されているかどうかを確認します。エラー情報が返されない場合、移行タスクは成功です。

  4. (オプション)移行タスクが失敗した場合、次の複数値ステートメントを実行して、TSDB インスタンスのタスクステータスリストをクエリできます。

    curl -u username:password ts-****:3242/api/mquery -XPOST -d '{
        "start": 1,
        "queries": [
            {
                "metric": "internal_datax_jobjobName", // ジョブ名を含むメトリクス名
                "fields": [
                    {
                        "field": "*",
                        "aggregator": "none"
                    }
                ]
            }
        ]
    }'
    説明
    • username:password: この値を、TSDB インスタンスにアクセスするために使用するアカウントとパスワードに置き換えます。詳細については、アカウントの管理をご参照ください。

    • ts-****: この値を TSDB インスタンスの ID に置き換えます。

    • jobName: この値を実際の移行タスクの名前に置き換えます。例:internal_datax_jobmyjob

    次の表は、返されるタスクステータスリストを示しています。

    タイムスタンプ (endtime)

    jobId (Tag)

    状態 (field)

    1651795199999 (2022-05-05 23:59:59.999)

    3

    ok

    1651795199999 (2022-05-05 23:59:59.999)

    2

    ok

    1651795199999 (2022-05-05 23:59:59.999)

    1

    ok

    1651881599999 (2022-05-06 23:59:59.999)

    2

    ok

    実行済みの移行タスクが再度実行されないようにするには、タスクを開始する前に、job.json ファイルの beginDateTime の値を変更します。この例では、beginDateTime の値は 2022-05-06 00:00:00 に変更されています。

パフォーマンステスト

TSDB インスタンスからデータを移行する前に、TSDB インスタンスのパフォーマンスを評価する必要があります。次の表は、参考として、TSDB ベーシックエディションインスタンスと TSDB スタンダードエディションインスタンスのパフォーマンステスト結果を示しています。

  • それぞれ 4 CPU コアと 8 GB のメモリを搭載した 2 つの TSDB ベーシックエディション II インスタンスのテスト結果

    テスト

    データ量

    タスクのプロセス数

    構成

    時系列ファイルのサイズ

    1 秒あたりに移行されるデータポイント数

    移行時間

    TSDB リソース使用率

    1

    • 時系列の総数:30,000

    • データポイントの総数:86,400,000

    1

    • channel:2

    • oidCache:true

    • oidBatch:100

    • splitInterval:6h

    • mem:-Xms6G -Xmx6G

    1.5 MB

    230000

    12 分 30 秒

    CPU 使用率:30%

    2

    • 時系列の総数:6,000,000

    • データポイントの総数:2,592,000,000

    1

    • channel:10

    • oidCache:true

    • oidBatch:100

    • splitInterval:6h

    • mem:-Xms8G -Xmx8G

    292 MB

    200000

    2 時間 55 分 30 秒

    CPU 使用率:70% ~ 90%

    3

    • 時系列の総数:30,000,000

    • データポイントの総数:4,320,000,000

    1

    • channel:10

    • oidCache:false

    • oidBatch:100

    • splitInterval:6h

    • mem:-Xms28G -Xmx28G

    1.5 GB

    140000

    9 時間

    CPU 使用率:40% ~ 80%

    4

    • 時系列の総数:30,000,000

    • データポイントの総数:4,320,000,000

    3

    • channel:10

    • oidCache:false

    • oidBatch:100

    • splitInterval:6h

    • mem:-Xms8G -Xmx8G

    1.5 GB

    250000

    5 時間

    CPU 使用率:90%

  • それぞれ 8 CPU コアと 16 GB のメモリを搭載した 2 つの TSDB スタンダードエディション I インスタンスのテスト結果

    データ量

    タスクのプロセス数

    構成

    時系列ファイルのサイズ

    1 秒あたりに移行されるデータポイント数

    移行時間

    TSDB リソース使用率

    • 時系列の総数:40,000,000

    • データポイントの総数:5,760,000,000

    3

    • channel:10

    • oidCache:false

    • oidBatch:100

    • splitInterval:6h

    • mem:-Xms8G -Xmx8G

    2 GB

    150000~200000

    9 時間

    CPU 使用率:10% ~ 20%