Hyesung Oh

Kubernetes에서 Open Source Redash Helm Chart로 운영하기 본문

Data Engineering/DevOps

Kubernetes에서 Open Source Redash Helm Chart로 운영하기

혜성 Hyesung 2022. 5. 12. 23:07
반응형

TroubleShooting

worker failed

# redash.prod.values.yaml
# 워커 수 상향 조정
adhocWorker:
  env:
    QUEUES: "queries,celery,schemas,default,periodic,scheduled_queries"
    WORKERS_COUNT: 6

scheduledWorker:
  env:
    QUEUES: "scheduled_queries,schemas"
    WORKERS_COUNT: 1

browser timeout

# redash.prod.values.yaml
# falsk webserver(gunicorn)의 timeout 값 상향 조정
server:
  env:
    GUNICORN_CMD_ARGS: "--timeout 600"

scheduling failed

# QUEUES에 schemas 추가
scheduledWorker:
  env:
    QUEUES: "scheduled_queries,schemas"
    WORKERS_COUNT: 1

 

Architecture

Helm Chart 참고

Webserver (UI)

  • React Native
  • axios로 flask에 요청
  • 반환된 결과를 UI에 그려줌

Backend Sever(Flask)

  • queue에 job을 push
  • 완료된 job에 대한 query_result를 반환 postgres에서 조회하여 client에 반환

Worker

 

Worker architecture question

Following on from ☝this GH issue, I’m trying to setup a deployment with specific workers servicing specific data sources. Any help would be appreciated

discuss.redash.io

Redis

  • It is used as queue for worker to pulling tasks from. 정확히는 Celery, RQ의 broker.

PostgreSQL

 

Mechanism

Summary

  1. client(RN) axios request
  2. backend(Flask)
    1. model(PostgreSQL)에서 datasource id에 해당하는 정보 불러옴
    2. get_query_runner에서 datasource type별 query_runner class를 동적으로 import
    3. run_query 호출 -> enqueue_query 호출 -> RQ queue(Redis)에 job push
  3. RQ Worker
    1. query를 athena에 요청하는 프로세스 실행
    2. 반환된 결과를 PostgreSQL DB의 QueryResults라는 테이블에 write
  4. client에 job id 반환
  5. client는 job id에 대한 query_result를 다시 flask backend에 요청
  6. backend(Flask)
    1. model에서 해당 쿼리 결과를 load
    2. serialize 후 client에 반환.
  7. client는 UI에 데이터를 그려줌

endpoint 호출 순서

  1. https://redash.ridi.io/api/query_results POST → 데이터소스, 쿼리 해쉬값을 이용해 해당 쿼리 결과물이 있는지 확인하고 있으면 반환, 없으면 queue에 job push 후 job id 반환
  2. https://redash.ridi.io/api/jobs/<job_id> GET → jobs 스케줄링 (reds query에 jobs push) redis 큐를 찔러서 해당 job의 상태를 트래킹. query_result_id가 있을 때 까지 일정 간격을 두고 반복적으로 여러 번 호출
    1. https://redash.ridi.io/api/event POST → 이벤트가 발생한 이력일 DB에 남기는 것 정도. (건너뛰어도 되는 내용)
  3. https://redash.ridi.io/api/query_results/<query_result_id> GET → query_result_id가 반환이 되면 해당 id로 DB를 조회하여 query_result 받아옴

redash/redash/handlers/api.py 참고

 

Quick Start with Helm chart

redash helm chart

default values.yaml

 

GitHub - getredash/contrib-helm-chart: Community maintained Redash Helm Chart

Community maintained Redash Helm Chart. Contribute to getredash/contrib-helm-chart development by creating an account on GitHub.

github.com

redash.yaml
https://artifacthub.io/packages/helm/redash/redash

 

Deployment

cluster에 대한 인증을 제 로컬 피씨에 설정 후 진행 (aws access key처럼)

# helm repo 추가
helm repo add redash <https://getredash.github.io/contrib-helm-chart/>
helm update repo
# install helm chart
helm upgrade --install -f ./redash.dev.values.yaml redash-10-0-0 redash/redash -n redash --create-namespace

 

Note

DataSources

Cassandra 연동

  1. EC2에 docker run시 9042포트 포워딩
  2. EC2 SG에 9042 port 열기
  3. EC2 public ip에 회사 ip 열어주기
  4. EC2 public ip에 Redash ip 열어주기
  5. (옵션) username: cassandra, password: cassandra

Cross data sources Query

Redash forum

 

Querying Existing Query Results

 

redash.io

Query Results Data Source (QRDS) (Postgresql 테이블 중 하나임 참고)

  1. Your other queries are like “tables” to the QRDS. Each one is aliased as query_ followed by its query_idwhich you can see in the URL bar of your browser from the query editor. For example, a query at /queries/49588 has the alias query_49588.
  2. SELECTb.countJOIN query_456 AS b
  3. ON a.id = b.id
  4. FROM query_123 AS a
  5. a.name,
반응형
Comments