전제조건 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
댓글