このトピックでは、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 に全データを移行するには、次の手順を実行します。
LindormTSDB が提供する移行ツールを使用して、TSDB インスタンス内のすべての時系列データを読み取り、ローカルファイルに保存します。
開始時刻、終了時刻、間隔などのタスクの構成に基づいて、移行タスクを複数の時間グループに分割します。移行タスクの構成の oidBatch パラメーターの値に基づいて、各時間グループを複数の読み取りサブタスクに分割します。各読み取りサブタスクは、指定された時間範囲で複数の時系列のデータを読み取り、書き込みコンポーネントにデータを送信します。
時間グループ内のすべての読み取りサブタスクが完了したら、時間グループの ID、移行タスクの ID、およびタスクステータスを、
internal_datax_jobjobNameという形式の名前のリストに記録します。説明LindormTSDB が提供する移行ツールは、複数の移行タスクをサポートしています。各移行タスクの ID は、タスク ID リストに記録されます。時間グループのデータの移行は、前の時間グループのすべての読み取りサブタスクが完了するまで開始されません。
書き込みコンポーネントは、各読み取りサブタスクから送信されたデータを受信し、複数値データモデルを使用して 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 // バッチサイズ
}
}
}
]
}
}
データ移行タスクの開始
時系列データ用移行ツール をダウンロードします。
次のコマンドを実行して、ダウンロードした移行ツールの圧縮パッケージを解凍します。
tar -zxvf tsdb2lindorm.tar.gz次のコマンドを実行して、データ移行タスクを開始します。
python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" job.json > job.result説明上記のコマンドの
jobを、実際の移行タスクの構成ファイルの名前に置き換えます。コマンドの実行後、job.result ファイルにエラー情報が記録されているかどうかを確認します。エラー情報が返されない場合、移行タスクは成功です。
(オプション)移行タスクが失敗した場合、次の複数値ステートメントを実行して、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%