콘텐츠로 이동

시계열 엔진 전환

개요

이 문서에서는 Guance의 시계열 엔진 전환 방법을 설명합니다. 이 작업은 InfluxDB에서 GuanceDB로 전환할 때 사용됩니다.

전제 조건

  • GuanceDB for Metrics가 이미 배포되어 있어야 합니다. 배포되지 않은 경우 GuanceDB 설치를 참조하세요.

배포 정보

이름 내용
guance-insert 기본 주소 guancedb-cluster-guance-select.middleware
guance-insert 기본 포트 8480
guance-select 기본 주소 guancedb-cluster-guance-select.middleware
guance-select 기본 포트 8481

전환 단계

테이블 백업

CREATE TABLE `main_workspace_bak` LIKE `main_workspace`;


INSERT INTO  `main_workspace_bak` SELECT * FROM `main_workspace`;


CREATE TABLE `main_influx_db_bak` LIKE `main_influx_db`;


INSERT INTO  `main_influx_db_bak` SELECT * FROM `main_influx_db`;

GuanceDB 정보 삽입

  • Guance df_core 데이터베이스에 로그인하여 다음 명령문을 실행합니다.
INSERT INTO `main_influx_instance` (`uuid`, `host`, `authorization`, `configJSON`,`dbcount`, `user`, `pwd`, `dbType`, `priority`, `status`, `creator`, `updator`, `createAt`, `deleteAt`, `updateAt`)
  VALUES
    ('276f8404252347d18e469f65f5a1abdd', 'http://0.0.0.0', '{\"admin\": {\"password\": \"*\", \"username\": \"*\"}}','{"read": {"host": "http://guancedb-cluster-guance-select.middleware:8481"}, "write": {"host": "http://guancedb-cluster-guance-insert.middleware:8480"}}', 0, '', '', 'guancedb', 50, 0, '', '', UNIX_TIMESTAMP(), -1, UNIX_TIMESTAMP());

확인:

select count(1) from main_influx_instance where uuid='276f8404252347d18e469f65f5a1abdd';

+----------+
| count(1) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

조회 결과가 1 이상이면 실행 성공입니다.

GuanceDB로 InfluxDB 정보 교체

  • InfluxDB 상태 변경
update main_influx_instance set status=3 where status=0 and dbType='influxdb';

확인:

select count(1) from main_influx_instance where status=3 and dbType='influxdb';

+----------+
| count(1) |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

조회 결과가 1 이상이면 실행 성공입니다.

  • 모든 워크스페이스에 해당하는 시계열 데이터베이스 정보 일괄 업데이트
update main_influx_db set influxInstanceUUID=(select uuid from main_influx_instance where status=0 and dbType='guancedb' order by priority desc limit 1) , dbType='guancedb' where status=0;

확인:

SELECT count(1)
FROM main_influx_db AS db
JOIN main_influx_instance AS instance ON db.influxInstanceUUID = instance.uuid
WHERE db.status = 0
  AND db.dbType = 'guancedb';

+----------+
| count(1) |
+----------+
|       26 |
+----------+
1 row in set (0.01 sec)

조회 결과가 1 이상이면 실행 성공입니다.

  • main_workspace 테이블의 datastoremetric 값을 일괄 업데이트
update main_workspace set datastore=JSON_SET(datastore, "$.metric", "guancedb") where status=0 and datastore ->> "$.metric" = "influxdb";

확인:

SELECT count(1)
FROM main_workspace
WHERE status = 0
  AND datastore ->> "$.metric" = "guancedb";

+----------+
| count(1) |
+----------+
|       26 |
+----------+
1 row in set (0.00 sec)

조회 결과가 1 이상이면 실행 성공입니다.

  • DB ID 변경
UPDATE df_core.main_influx_db 
SET df_core.main_influx_db.db =(
  SELECT df_core.main_workspace.id
  FROM df_core.main_workspace
  WHERE df_core.main_workspace.dbUUID = df_core.main_influx_db.UUID
);

확인:

SELECT count(1)
FROM df_core.main_influx_db AS db
JOIN df_core.main_workspace AS ws ON ws.dbUUID = db.UUID;

+----------+
| count(1) |
+----------+
|       26 |
+----------+
1 row in set (0.00 sec)

조회 결과가 1 이상이면 실행 성공입니다.

Kodo 모든 서비스 재시작

kubectl delete pods --all -n forethought-kodo

Redis 캐시 비우기

두 가지 방법 중 하나를 선택합니다.

  • Redis 재시작
kubectl get po -n middleware | grep redis
kubectl delete po -n middleware <redis pod 이름>    
  • 캐시 비우기 명령 실행
# "dbinfo:*" 캐시 레코드 모두 삭제, 다음 일괄 삭제 명령 실행
redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> keys dbinfo:* | xargs -r -t -n1 redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> del

# "wkspInfo:*" 캐시 레코드 모두 삭제, 다음 일괄 삭제 명령 실행
redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> keys wkspInfo:* | xargs -r -t -n1 redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> del

# "tkn_info:*" 캐시 레코드 모두 삭제, 다음 일괄 명령 실행
redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> keys tkn_info:* | xargs -r -t -n1 redis-cli -h <host> -p <포트> -n 0 -a <비밀번호> del

문서 평가

이 페이지가 도움이 되었나요?