본문 바로가기
SW Developer/Iot ThingsBoard

Thingsboard PostgreSQL AWS RDS로 이전 migration 방법

by ashespia 2022. 6. 30.
SMALL

전제조건 Prerequisites:

AWS RDS 인스턴스를 생성해야 합니다. You have to create an RDS instance on AWS.

RDS와 EC2의 인스턴스는 같은 보안 그룹에 있어야 합니다.
The instance should be in the
same security group as your thingsboard instance.

 

PostgreSQL 데이터베이스를 RDS로 마이그레이션하려면 다음 단계를 따라 진행 합니다.

To migrate your PostgreSQL database to RDS follow these steps:

 

Thingsboard 서비스 중지

1.    Stop thingsboard service:
sudo systemctl stop thingsboard

 

DB 백업

2.    Make a backup of your database:
pg_dump -U postgres -h your_host -d thingsboard > dump.sql

 

psql을 사용해서 RDS PostgreSQL 연결하여 thingsboard Database 생성 

3.    Connect to RDS PostgreSQL with psql and create database thingsboard:
psql -U postgres -h rds_host
CREATE DATABASE thingsboard;
\q

 

백업 해 놓은 파일을 RDS에 이전

4.    Restore data from backup to RDS instance:
psql -U postgres -h rds_host -d thingsboard < dump.sql

 

ThingsBoard 구성 파일(thingsboard.conf)에서 PostgreSQL 연결 구성 변경

5.    Change PostgreSQL connection configuration in ThingsBoard configuration file (thingsboard.conf)
sudo nano /etc/thingsboard/conf/thingsboard.conf

 

Insert these text:

export SPRING_DATASOURCE_URL=jdbc:postgresql://rds_host:5432/thingsboard
export SPRING_DATASOURCE_PASSWORD=PUT_YOUR_POSTGRESQL_PASSWORD_HERE

 

Thingsboard 재시작

6.    Start thingsboard:
sudo systemctl start thingsboard

 

 

your_host 

host 명을 따로 설정하지 않은 경우 your_host 는 localhost 입니다.

 

rds_host

rds_host는 RDS의 connectivity & security 정보의 Endpoint 값이다. 

 

 

 

psql -U postgres -h rds_host -h localhost -d thingsboard < dump.sql

 

psql을 사용해서 RDS PostgreSQL 연결하여 thingsboard Database 생성 단계에서 문제 발생

정상적으로 접속 되는 경우 이하처럼 표시된다.

ubuntu@ip-10-0-20-80:~$ psql -U postgres -h sipthingsboard.cwdiezy1kd56.ap-northeast-2.rds.amazonaws.com

Password for user postgres:

psql (12.11 (Ubuntu 12.11-0ubuntu0.20.04.1), server 12.10)

SSL connection (protocol: TLSv1.2, cipher: ECDHE-RSA-AES256-GCM-SHA384, bits: 256, compression: off)

Type "help" for help.

 

postgres=> CREATE DATABASE thingsboard;

ERROR:  database "thingsboard" already exists

postgres=> \q

 

그러나 같은 커맨드로 실행했는데 postgres=> 표시가 되지 않는 경우

EC2 서버의 포트가 접근 가능한지 security group, Port, IP 정보가 정상적으로  추가되어있는지 확인 이 필요 하다.

EC2 AMI 이미지로 최초에 Thingsboard를 생성시에 기본 security group에는 PostgreRDS 기본 포트인 5432포트 가 존재 하지 않는다.

그래서 EC2와 RDS가 접속 가능하도록 보안 그룹 변경이 필요 하다.

 

CREATE  ERROR:  database "thingsboard" already exists 발생 시

DROP DATABASE thingsboard; 명령으로 DB 삭제 후 새로 생성 시 정상동작

 

Database Migration 시 아래 Error 발생 시 

psql -U postgres -h rds_host -h localhost -d thingsboard < dump.sql 

명령어를 확인 해 보자 -h 옵션이 2개 들어 있는 경우에 타겟 PostgresSQL RDS가 아닌 localhost로 dump 파일을 저장하도록 되어있는 것이다. 

-h 옵션은 rds_host로 되어 있는 한 개만 실행 시 해결 할 수 있다. 

 

ERROR:  constraint "fk_default_dashboard_device_profile" for relation "device_profile" already exists

ERROR:  constraint "fk_default_rule_chain_device_profile" for relation "device_profile" already exists

ERROR:  constraint "fk_device_profile" for relation "device" already exists

ERROR:  constraint "fk_domain_oauth2_params" for relation "oauth2_domain" already exists

ERROR:  constraint "fk_entity_alarm_id" for relation "entity_alarm" already exists

ERROR:  constraint "fk_entity_group_device_group_ota_package" for relation "device_group_ota_package" already exists

ERROR:  constraint "fk_firmware_device" for relation "device" already exists

ERROR:  constraint "fk_firmware_device_profile" for relation "device_profile" already exists

ERROR:  constraint "fk_mobile_oauth2_params" for relation "oauth2_mobile" already exists

ERROR:  constraint "fk_ota_package_device_group_ota_package" for relation "device_group_ota_package" already exists

ERROR:  constraint "fk_registration_oauth2_params" for relation "oauth2_registration" already exists

ERROR:  constraint "fk_rule_node_state_node_id" for relation "rule_node_state" already exists

ERROR:  constraint "fk_software_device" for relation "device" already exists

ERROR:  constraint "fk_software_device_profile" for relation "device_profile" already exists

ERROR:  constraint "fk_tenant_profile" for relation "tenant" already exists

 

Thingsboard monolithic Amazon Elastic Kubernetes Service(Amazon EKS)에서 RDS 주소 설정 파일 위치 

/home/ubuntu/thingsboard-pe-k8s/aws/monolith/tb-node-db-configmap.yml

SPRING_DATASOURCE_URL: jdbc:postgresql://thingsboard.corehys0sx6m.ap-northeast-2.rds.amazonaws.com:5432/thingsboard

LIST

댓글