From 09a164be0fde68183f24f3082753e4e504df3e51 Mon Sep 17 00:00:00 2001 From: vparomskiy Date: Tue, 15 Oct 2019 10:57:47 +0300 Subject: [PATCH] Migrator tool: fix dependencies and update docs --- tools/pom.xml | 4 + .../tools/migrator/PgCaLatestMigrator.java | 2 +- .../client/tools/migrator/README.md | 73 +++++++++++++------ 3 files changed, 54 insertions(+), 25 deletions(-) diff --git a/tools/pom.xml b/tools/pom.xml index b980123fb2..0d044365a0 100644 --- a/tools/pom.xml +++ b/tools/pom.xml @@ -56,6 +56,10 @@ cassandra-all 3.11.4 + + com.datastax.cassandra + cassandra-driver-core + commons-io commons-io diff --git a/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaLatestMigrator.java b/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaLatestMigrator.java index 667f5e6d0f..a109b0a5dd 100644 --- a/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaLatestMigrator.java +++ b/tools/src/main/java/org/thingsboard/client/tools/migrator/PgCaLatestMigrator.java @@ -5,7 +5,7 @@ * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 + * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, diff --git a/tools/src/main/java/org/thingsboard/client/tools/migrator/README.md b/tools/src/main/java/org/thingsboard/client/tools/migrator/README.md index da79f39701..70c5dafcaf 100644 --- a/tools/src/main/java/org/thingsboard/client/tools/migrator/README.md +++ b/tools/src/main/java/org/thingsboard/client/tools/migrator/README.md @@ -1,5 +1,6 @@ # Description: -Tool used for migrating ThingsBoard into hybrid mode from Postgres. +This tool used for migrating ThingsBoard into hybrid mode from Postgres. + Performance of this tool depends on disk type and instance type (mostly on CPU resources). But in general here are few benchmarks: 1. Creating Dump of the postgres ts_kv table -> 100GB = 90 minutes @@ -7,56 +8,80 @@ But in general here are few benchmarks: 3. Generation SSTables from dump -> 100GB = 3 hours 4. 100GB Dump file will be converted into SSTable with size about 18GB -# How to build Tool: -Switch to `tools` project in Command Line and execute -`mvn clean compile assembly:single` -It will generate single jar with dependencies. +# Tool build Instruction: +Switch to `tools` module in Command Line and execute -# Instruction: + mvn clean compile assembly:single + +It will generate single jar file with all required dependencies inside `target dir` -> `tools-2.4.1-SNAPSHOT-jar-with-dependencies.jar`. + + +# Prepare requred files and run Tool: + +#### Dump data from the source Postgres Database +*Do not use compression if possible because Tool can only work with uncompressed file + +1. Dump table `ts_kv` table: + + `pg_dump -h localhost -U postgres -d thingsboard -t ts_kv > ts_kv.dmp` + +2. Dump table `ts_kv_latest` table: -1. Dump Telemetry table from the source Postgres table. Do not use compression if possible because Tool can only work with uncompressed file -dump ts_kv table -> `pg_dump -h localhost -U postgres -d thingsboard -t ts_kv > ts_kv.dmp` + `pg_dump -h localhost -U postgres -d thingsboard -t ts_kv_latest > ts_kv_latest.dmp` -2. Dump Latest Telemetry table from the source Postgres table. Do not use compression if possible because Tool can only work with uncompressed file -dump ts_kv_latest -> `pg_dump -h localhost -U postgres -d thingsboard -t ts_kv_latest > ts_kv_latest.dmp` +3. [Optional] move table dumps to the instance where cassandra will be hosted -3. [Optional] - move dumped files to the machine where cassandra will be hosted +#### Prepare directory structure for SSTables +Tool use 3 different directories for saving SSTables - `ts_kv_cf`, `ts_kv_latest_cf`, `ts_kv_partitions_cf` -4. Prepare directory structure: -Tool will use 3 different directories for saving SSTables - ts_kv_cf, ts_kv_latest_cf, ts_kv_partitions_cf Create 3 empty directories. For example: + /home/ubunut/migration/ts /home/ubunut/migration/ts_latest /home/ubunut/migration/ts_partition -5. Run tool: -*Note: if you run this tool on remote instance - don't forget to execute this command in screen to avoid unexpected termination +#### Run tool +*Note: if you run this tool on remote instance - don't forget to execute this command in `screen` to avoid unexpected termination + +``` java -jar ./tools-2.4.1-SNAPSHOT-jar-with-dependencies.jar - -latestFrom ./source/ts_kv_latest.dmp + -latestFrom ./source/ts_kv_latest.dmp -latestOut /home/ubunut/migration/ts_latest -tsFrom ./source/ts_kv.dmp -tsOut /home/ubunut/migration/ts -partitionsOut /home/ubunut/migration/ts_partition - -castEnable false + -castEnable false +``` +Tool execution time depends on DB size, CPU resources and Disk throughput -## After tool finished -1. install Cassandra on the instance -2. Using `cqlsh` create `thingsboard` keyspace and requred tables from this file `schema-ts.cql` +## Adding SSTables into Cassandra +* Note that this this part works only for single node Cassandra Cluster. If you have more nodes - it is better to use `sstableloader` tool. + +1. [Optional] install Cassandra on the instance +2. [Optional] Using `cqlsh` create `thingsboard` keyspace and requred tables from this file `schema-ts.cql` 3. Stop Cassandra 4. Copy generated SSTable files into cassandra data dir: + +``` sudo find /home/ubunut/migration/ts -name '*.*' -exec mv {} /var/lib/cassandra/data/thingsboard/ts_kv_cf-0e9aaf00ee5511e9a5fa7d6f489ffd13/ \; sudo find /home/ubunut/migration/ts_latest -name '*.*' -exec mv {} /var/lib/cassandra/data/thingsboard/ts_kv_latest_cf-161449d0ee5511e9a5fa7d6f489ffd13/ \; sudo find /home/ubunut/migration/ts_partition -name '*.*' -exec mv {} /var/lib/cassandra/data/thingsboard/ts_kv_partitions_cf-12e8fa80ee5511e9a5fa7d6f489ffd13/ \; +``` 5. Start Cassandra service and trigger compaction + +``` trigger compactions: nodetool compact thingsboard check compaction status: nodetool compactionstats +``` -6. Switch Thignsboard to hybrid mode: +## Switch Thignsboard into Hybrid Mode + Modify Thingsboard properites file `thingsboard.yml` + - DATABASE_TS_TYPE = cassandra - - TS_KV_PARTITIONING = MONTHS - - [optional] - connection properties for cassandra + - TS_KV_PARTITIONING = MONTHS -7. Start Thingsboard \ No newline at end of file +# Final steps +Start Thingsboard and verify migration \ No newline at end of file