Para migrar todos os dados de séries temporais de uma instância do Time Series Database (TSDB) para o mecanismo de séries temporais do Lindorm (LindormTSDB), use a ferramenta de migração do LindormTSDB. A ferramenta lê dados do TSDB, divide a carga de trabalho em subtarefas paralelas e grava os dados no LindormTSDB com o modelo de dados de múltiplos valores.
O TSDB não está mais disponível para venda. A Alibaba Cloud recomenda migrar todos os dados das suas instâncias do TSDB para o LindormTSDB.
Pré-requisitos
Antes de começar, verifique se você tem:
-
Um cliente Linux ou macOS com os seguintes itens instalados:
Java Development Kit (JDK) 1.8 ou posterior
Python 2.x ou 3.x
Uma instância do TSDB executando a versão 2.7.4 ou posterior
Uma instância do Lindorm com o LindormTSDB ativado. Para mais detalhes, consulte Crie uma instância
Funcionamento da ferramenta de migração
A ferramenta processa os dados na seguinte sequência:
Lê todos os dados de séries temporais da instância do TSDB e salva-os em um arquivo local.
Divide a tarefa de migração em grupos de tempo com base em
beginDateTime,endDateTimeesplitIntervalMs. Em cada grupo de tempo, divide a carga de trabalho em subtarefas de leitura conforme o parâmetrooidBatch. Cada subtarefa lê um lote de séries temporais dentro do intervalo especificado e envia os dados ao componente de gravação.Após a conclusão de todas as subtarefas de leitura em um grupo de tempo, registra o ID do grupo, o ID da tarefa de migração e o status da tarefa em uma lista chamada
internal_datax_job<jobName>.O componente de gravação recebe os dados de cada subtarefa de leitura e os grava no LindormTSDB usando o modelo de dados de múltiplos valores.
Um novo grupo de tempo só inicia após a conclusão de todas as subtarefas de leitura do grupo anterior. A migração suporta múltiplas tarefas simultâneas, e o sistema rastreia o ID de cada tarefa na lista de IDs.
Antes de começar
Conectividade de rede
Implante o cliente, a instância do Lindorm e a instância do TSDB na mesma Virtual Private Cloud (VPC) para evitar problemas de latência e conectividade.
Para migrar pela Internet, ative os endpoints públicos das instâncias do Lindorm e do TSDB e adicione o endereço IP do seu cliente às listas de permissões de ambas as instâncias. Para mais detalhes, consulte Configure listas de permissões.
Planejamento de desempenho
Avalie o impacto da migração nos seus negócios antes de iniciar. Os principais fatores incluem:
Especificação da instância do TSDB
Especificação do ambiente (como uma instância do Elastic Compute Service (ECS)) que executa sua aplicação
Quantidade de séries temporais na instância do TSDB
Tamanho total dos dados a migrar
Frequência média de reporte por série temporal
Intervalo de tempo dos dados
Valor de
splitIntervalMs
Consulte Resultados de testes de desempenho para obter valores de throughput de referência por tamanho de instância.
Alterações no modelo de dados e consultas após a migração
Observe as seguintes diferenças no modelo de dados antes de migrar:
|
Item |
TSDB |
LindormTSDB |
Impacto |
|
Comprimento do timestamp |
10 dígitos (segundos) |
13 dígitos (milissegundos) |
O sistema converte automaticamente os timestamps para milissegundos após a migração |
|
Modelo de gravação |
Valor único |
Múltiplos valores |
Consulte dados gravados com o modelo de valor único usando sintaxe de múltiplos valores após a migração |
|
Consultas SQL |
Suportado |
Não disponível para gravações de múltiplos valores |
Crie uma tabela de séries temporais antes de migrar se precisar de consultas SQL |
Configure a tarefa de migração
Salve sua configuração de migração como um arquivo JSON (por exemplo, job.json). A configuração possui três seções: configurações da tarefa, leitor (origem TSDB) e gravador (destino LindormTSDB).
Configurações da tarefa
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Não |
Número de tarefas simultâneas. Padrão: |
|
|
Não |
Quantidade de erros de gravação permitidos antes da falha da tarefa. Padrão: |
Parâmetros do leitor (origem TSDB)
Configure estes parâmetros com base na especificação da sua instância do TSDB e no volume de dados.
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Defina como |
|
|
Sim |
Endpoint da instância do TSDB. Para mais detalhes, consulte Conexão de rede. |
|
|
Sim |
Hora inicial do intervalo de migração. |
|
|
Sim |
Hora final do intervalo de migração. |
|
|
Sim |
Duração de cada grupo de tempo em milissegundos. Controla a quantidade de dados lidos por subtarefa juntamente com |
|
|
Sim |
ID desta tarefa de migração. Se estiver executando múltiplas tarefas simultâneas, liste todos os IDs das tarefas em |
|
|
Sim |
Lista de IDs das tarefas de migração. |
|
|
Sim |
Nome da tarefa de migração. Usado como sufixo da lista de status da tarefa ( |
|
|
Sim |
Caminho para o arquivo contendo todas as séries temporais a migrar na instância do TSDB. |
|
|
Sim |
Quantidade de séries temporais que cada subtarefa de leitura processa de uma vez. Juntamente com |
|
|
Sim |
Indica se as séries temporais devem ser armazenadas em cache na memória. Se você pretende migrar dezenas de bilhões de séries temporais, nem todas poderão ser mantidas em cache na memória. |
|
|
Não |
Métricas específicas a migrar. Este parâmetro não possui valor padrão. Exemplo: |
**Como splitIntervalMs e oidBatch determinam o volume de leitura**
Cada subtarefa de leitura processa oidBatch × splitIntervalMs / reportingInterval pontos de dados. Por exemplo, com oidBatch definido como 100, splitIntervalMs definido como 604800000 e reporte horário:
100 × 604800000 / 3600000 = 16,800 data points per subtask
Parâmetros do gravador (destino LindormTSDB)
|
Parâmetro |
Obrigatório |
Descrição |
|
|
Sim |
Endpoint do LindormTSDB. Para mais detalhes, consulte Visualize endpoints. |
|
|
Sim |
Número máximo de pontos de dados enviados ao LindormTSDB em uma única solicitação de gravação. |
|
|
Sim |
Defina como |
Exemplo de configuração
O exemplo a seguir mostra um arquivo job.json completo:
{
"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
}
}
}
]
}
}
Substitua os espaços reservados pelos seus valores reais:
|
Espaço reservado |
Descrição |
Exemplo |
|
|
Endpoint da instância do TSDB (porta 3242) |
|
|
|
Endpoint do LindormTSDB (porta 8242) |
|
|
|
Caminho para o arquivo de séries temporais na instância do TSDB |
|
Execute a migração
Baixe a ferramenta de migração.
-
Descompacte o pacote:
tar -zxvf tsdb2lindorm.tar.gz -
Inicie a tarefa de migração:
python datax/bin/datax.py --jvm="-Xms8G -Xmx8G" job.json > job.resultSubstitua
jobpelo nome do seu arquivo de configuração. Após a conclusão do comando, verifique se há erros em
job.result. Se o arquivo não contiver saída de erro, a migração foi concluída com sucesso.-
(Opcional) Se a tarefa falhar, consulte a lista de status da tarefa para identificar quais grupos de tempo foram concluídos com sucesso e onde retomar:
curl -u <username>:<password> <tsdb-endpoint>:3242/api/mquery -XPOST -d '{ "start": 1, "queries": [ { "metric": "internal_datax_job<jobName>", "fields": [ { "field": "*", "aggregator": "none" } ] } ] }'Substitua os espaços reservados:
Espaço reservado
Descrição
Exemplo
<username>:<password>Credenciais da conta do TSDB. Consulte Gerencie contas.
admin:mypassword<tsdb-endpoint>ID da instância do TSDB
ts-****<jobName>Nome da tarefa de migração
internal_datax_jobmyjobA resposta lista cada grupo de tempo com seu status de conclusão:
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
Para retomar sem remigrar os grupos de tempo já concluídos, atualize
beginDateTimeemjob.jsonpara o início do primeiro grupo de tempo incompleto antes de reiniciar. Neste exemplo, definabeginDateTimecomo2022-05-06 00:00:00.
Visualize dados migrados
Os dados do TSDB originalmente gravados com o modelo de valor único ficam armazenados no LindormTSDB sob o modelo de dados de múltiplos valores. Use o endpoint /api/mquery e o formato de consulta de múltiplos valores ao ler esses dados.
O exemplo a seguir mostra a diferença de consulta para uma métrica chamada test_metric:
Consulta no TSDB:
curl -u username:password ts-xxxxx:3242/api/query -XPOST -d '{
"start": 1657004460,
"queries": [
{
"aggregator": "none",
"metric": "test_metric"
}
]
}'
Resposta do TSDB:
[
{
"aggregateTags": [],
"dps": {
"1657004460": 1.0
},
"fieldName": "",
"metric": "test_metric",
"tags": {
"tagkey1": "1"
}
}
]
Consulta no LindormTSDB:
curl -u username:password ld-xxxxx:8242/api/mquery -XPOST -d '{
"start": 1657004460,
"queries": [
{
"metric": "test_metric",
"fields": [
{
"field": "*",
"aggregator": "none"
}
],
"aggregator": "none"
}
]
}'
Resposta do LindormTSDB:
[
{
"aggregatedTags": [],
"columns": [
"timestamp",
"value"
],
"metric": "test_metric",
"tags": {
"tagkey1": "1"
},
"values": [
[
1657004460000,
1.0
]
]
}
]
Principais diferenças:
Use
/api/mqueryem vez de/api/query.Especifique os campos explicitamente usando o array
fields.Os timestamps nas respostas do LindormTSDB estão em milissegundos (13 dígitos), enquanto no TSDB estão em segundos (10 dígitos).
Resultados de testes de desempenho
Use os resultados a seguir como referência ao planejar sua migração. O desempenho real depende da especificação da sua instância, do volume de dados e da frequência de reporte.
TSDB Basic Edition II (4 núcleos de CPU, 8 GB de memória) — 2 instâncias
|
Teste |
Séries temporais |
Pontos de dados |
Processos |
Configuração |
Tamanho do arquivo de séries temporais |
Throughput (pontos de dados/s) |
Duração |
Utilização da CPU |
|
1 |
30.000 |
86.400.000 |
1 |
channel: 2, oidCache: true, oidBatch: 100, splitInterval: 6h, mem: -Xms6G -Xmx6G |
1,5 MB |
230.000 |
12 min 30 s |
30% |
|
2 |
6.000.000 |
2.592.000.000 |
1 |
channel: 10, oidCache: true, oidBatch: 100, splitInterval: 6h, mem: -Xms8G -Xmx8G |
292 MB |
200.000 |
2 h 55 min 30 s |
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 |
140.000 |
9 horas |
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 |
250.000 |
5 horas |
90% |
TSDB Standard Edition I (8 núcleos de CPU, 16 GB de memória) — 2 instâncias
|
Séries temporais |
Pontos de dados |
Processos |
Configuração |
Tamanho do arquivo de séries temporais |
Throughput (pontos de dados/s) |
Duração |
Utilização da CPU |
|
40.000.000 |
5.760.000.000 |
3 |
channel: 10, oidCache: false, oidBatch: 100, splitInterval: 6h, mem: -Xms8G -Xmx8G |
2 GB |
150.000–200.000 |
9 horas |
10%–20% |
Próximos passos
Para consultar dados migrados usando SQL, crie uma tabela de séries temporais no LindormTSDB antes de migrar. Consulte a documentação do LindormTSDB para obter instruções sobre como criar tabelas de séries temporais.
Após a migração, valide uma amostra dos seus dados no LindormTSDB usando os exemplos de consulta em Visualize dados migrados.