背景資訊
時序引擎由阿里雲自主研發,相容了TSDB的大部分API。時序引擎相比TSDB具有高效能、低成本、多功能等優勢。目前TSDB已停止售賣,建議您將TSDB的全量資料移轉至Lindorm時序引擎。
遷移流程
TSDB全量遷移至Lindorm時序引擎的遷移流程如下:
通過時序資料移轉工具讀取TSDB所有的時間軸資料,並將資料儲存至本地檔案。
根據遷移任務配置(指定開始時間、結束時間和時間切分周期)將遷移任務劃分成多個時間分組。按照遷移任務配置中指定的oidBatch(即時間軸數量)參數將每個時間分組再次劃分為多個子讀任務,每個子讀任務負責讀取多個時間軸中指定時間範圍的資料。
每個子讀任務將讀取的資料轉寄給寫入端,當一個時間分組內所有的子讀任務讀取完成後,記錄目前時間分組、遷移任務ID和任務狀態到任務狀態表中(表名的格式為:internal_datax_jobjobName
)。
說明
時序資料移轉工具支援多任務協同遷移,每個遷移任務的ID記錄在任務ID列表中,只有當一個時間分組內所有的子讀任務遷移完成,才會開始下一個時間分組的遷移工作。
寫入端收到子讀任務轉寄的資料後,使用多值資料寫入方式將資料寫入到時序引擎。
注意事項
如果應用部署在ECS執行個體,建議Lindorm執行個體、ECS執行個體和TSDB執行個體使用相同的專用網路,以保證網路的連通性。
如果您使用公網將TSDB遷移至Lindorm時序引擎,請確保Lindorm執行個體和TSDB執行個體已開通外網地址,並將用戶端IP地址添加至Lindorm執行個體和TSDB執行個體的白名單中,添加方法請參見設定白名單。
由於遷移過程中會讀取TSDB的資料並將資料寫入時序引擎,所以遷移前請評估以下內容在遷移過程中對當前業務是否有影響。
TSDB規格
應用部署的規格(例如ECS規格)
時間軸數量
資料總量
平均每條時間軸資料的上報頻率
需要遷移的資料總時間範圍
每個遷移作業切分周期的間隔時間
由於多值資料寫入方式不能直接通過SQL查詢,如果需要使用SQL查詢,請先建立時序資料表再進行資料移轉。
在時序引擎中預設使用13位Unix時間戳記(單位為毫秒),TSDB中使用10位時間戳記(單位為秒),遷移後TSDB的時間戳記會自動化佈建為13位Unix時間戳記(單位為毫秒)。
由於在時序引擎中不推薦使用單值資料寫入方式,採用多值資料寫入方式。如果之前寫入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"
}
}
]
//在時序引擎中查詢的語句
curl -u username:password ld-xxxxx:8242/api/mquery -XPOST -d '{
"start":1657004460,
"queries": [
{
"metric": "test_metric",
"fields": [
{
"field": "*",
"aggregator": "none"
}
],
"aggregator": "none"
}
]
}'
//在時序引擎中查詢的結果
[
{
"aggregatedTags": [],
"columns": [
"timestamp",
"value"
],
"metric": "test_metric",
"tags": {
"tagkey1": "1"
},
"values": [
[
1657004460000,
1.0
]
]
}
]
配置遷移任務
遷移任務的檔案是將以下三部分參數由使用者自訂並儲存成JSON格式檔案,例如:job.json檔案。
樣本: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",
"beginDateTime": "2022-5-2 00:00:00",
"endDateTime": "2022-7-2 00:00:00",
"splitIntervalMs": 86400000,
"jobName":"myjob",
"selfId":1,
"jobIds":[1],
"oidPath":"{$myworkplace}/oidfile",
"oidBatch":100,
"oidCache":true
}
},
"writer": {
"name": "tsdbwriter",
"parameter": {
"endpoint": "ld-xxxx:8242",
"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"
}
]
}
]
}'
查詢的任務狀態表結果如下。
Timestamp (endtime) | jobId (Tag) | state(field) |
Timestamp (endtime) | jobId (Tag) | state(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基礎版執行個體和標準版執行個體的效能測試資料請參考以下樣本。