Використання Redash аналітичної бази даних реєстру

Сторінка технічної документації є баченням майбутньої реалізації, актуальність якого може бути застарілою.

Загальний опис

В цьому перехідному дизайні розглядається налаштування Redash таким чином, щоб він використовував вже наявний в реєстрі аналітичний Postgres.

Актори та ролі користувачів

  • Технічний адміністратор Платформи

  • Технічний адміністратор реєстру

Функціональні сценарії

  • Cтворення та налаштування аналітичних звітів та інформаційних панелей

  • Перегляд та маніпуляція відображенням даних реєстру на інформаційних панелях

  • Перегляд та аналіз даних журналу подій аудиту реєстру на інформаційних панелях

  • Резервне копіювання та відновлення реєстру

Поточна реалізація

Кожен екземпляр сервісу аналітичної звітності реєстру Redash (viewer та admin) створюють собі окремі екземпляри Postgres. Така поточна реалізація

  1. Споживає додаткові ресурси віртуальних машин реєстру.

  2. Несе додаткові витрати з точки зору операційного обслуговування. Для кожного потрібен моніторинг, оновлення, резервне копіювання тощо.

  3. Наразі ні моніторингу, ні резервного копіювання для цих екземплярів postgres немає, а оновлення якщо й проводяться, то зі значним запізненням у порівнянні з реєстром аналітичним екземпляром postgres.

Ознайомитись з поточною реалізацією можна на сторінці Підсистема аналітичної звітності реєстру або Підсистема моделювання регламенту реєстру

Загальні принципи та положення

  • Окремі екземпляри СКБД redash-admin-postgresql та redash-viewer-postgresql під екземпляри Redash не створюються

  • Кожний екземпляр Redash використовує свою відповідну базу в аналітичному екземплярі analytical-instance1-xxxx Postgres реєстру

  • Врахувати що redash-admin розгортається тільки коли режим розгортання реєстру є розробницьким (deploymentMode==development)

  • redash-admin та redash-viewer мають окремих користувачів в аналітичному екземплярі СКБД та створюються liquibase скриптом.

  • Адаптувати registry-publication-pipeline

Цільовий дизайн

redash analytical db.drawio

Liquibase скрипти мають бути написані згідно з конвенціями описаних в README.md registry-postgres. Приклад створення бази

--liquibase formatted sql
--changeset platform:create-redash-viewer-db
CREATE DATABASE redash-viewer with owner=${redashAdminUser};

Скрипти для міграції бази:

Create Dump
#!/bin/bash

admin_pod=redash-admin-postgresql-0
viewer_pod=redash-viewer-postgresql-0
pg_ver=9.6
ctr_name=redash-chart-postgresql

AdminVer=$(oc exec $admin_pod -n $NAMESPACE -c $ctr_name -- bash -c 'cat $PGDATA/PG_VERSION')
ViewerVer=$(oc exec $viewer_pod -n $NAMESPACE -c $ctr_name -- bash -c 'cat $PGDATA/PG_VERSION')

# Admin PostgreSQL DB
if oc -n $NAMESPACE get secret redash-chart-postgresql 2> /dev/null && [ "$AdminVer" = "$pg_ver" ]; then oc exec $admin_pod -n $NAMESPACE -c $ctr_name \
-- bash -c 'export PGPASSWORD=$POSTGRES_PASSWORD; pg_dump -Uredash redash -c -f /bitnami/postgresql/redash96dump.sql && mv /bitnami/postgresql/data /bitnami/postgresql/data96'
fi

# Viewer PostgreSQL DB
if oc -n $NAMESPACE get secret redash-chart-postgresql 2> /dev/null && [ "$ViewerVer" = "$pg_ver" ]; then oc exec $viewer_pod -n $NAMESPACE -c $ctr_name \
-- bash -c 'export PGPASSWORD=$POSTGRES_PASSWORD; pg_dump -Uredash redash -c -f /bitnami/postgresql/redash96dump.sql && mv /bitnami/postgresql/data /bitnami/postgresql/data96'
fi
Load Dump
#!/bin/sh
export PGPASSWORD=$POSTGRES_PASSWORD
if test -f /bitnami/postgresql/redash96dump.sql; then
echo "Load Dump"
psql -Uredash redash -f /bitnami/postgresql/redash96dump.sql
rm -rf /bitnami/postgresql/redash96dump.sql /bitnami/postgresql/data96
else
echo "Dump file not exist, skip and run Postgresql"
fi

Скрипти бекапування та відновлення

В репозиторії backup-management необхідно оновити скрипти відновлення та резервного копіювання та прибрати звідти старі екземпляри Postgres для Redash:

....
  "statefulset,app=postgresql-admin,postgresql-admin"
  "statefulset,app=postgresql-viewer,postgresql-viewer"
....

Скрипти pre-upgrade/post-upgrade

В репозиторії redash-chart необхідно переробити скрипт pre-upgrade для роботи з базою Redash в аналітичному екземплярі postgresql:

  • RenameSystemUser.groovy

Registry publication pipeline

В репозиторії registry-regulations-publications-pipeline необхідно адаптувати наступний функціонал:

  • removeRedashResources() — deleteRegistry.groovy

  • cleanupTrigger.groovy

  • Redash.groovy

  • CreateRedashRoles.groovy

  • RestoreRedashAdminState.groovy

Компоненти системи та їх призначення в рамках дизайну рішення

У даному розділі наведено перелік компонент системи, які задіяні або потребують змін в рамках реалізації дизайну.

Підсистема Компонент Модуль Опис змін

Підсистема аналітичної звітності реєстру

redash-viewer

github:/epam/edp-ddm-redash-chart

Застосування змін конфігурації бази даних: вказання використання зовнішньої бази та URL.

Підсистема моделювання регламенту реєстру

redash-admin

Підсистема управління даними реєстру

registry-postgres

github:/epam/edp-ddm-registry-postgres

Створення бази redash-admin-postgresql та redash-viewer-postgresql для Redash з користувачем.

Підсистема резервного копіювання та відновлення

backup-management

github:/epam/edp-ddm-backup-management

Оновлення скриптів резервного копіювання та відновлення.

Підсистема управління Платформою та реєстрами

control-plane-gerrit

github:/epam/edp-ddm-control-plane-gerrit

Оновлення Network Policies

Підсистема розгортання регламенту реєстру

registry-regulations-publications-pipelines

github:/epam/edp-ddm-registry-regulations-publication-pipeline

Адаптування пайплайнів cleanup та delete registry та класу Redash.

Підтримка зворотної сумісності

В екземплярах redash-viewer і redash-admin можуть бути присутні особові налаштування користувачів, тому для підтримки працездатності необхідно провести міграцію бази вже існуючим скриптом при оновленні реєстру.

Високорівневий план розробки

Технічні експертизи

  • DevOps

Попередній план розробки

  1. Додати функціонал по створенню баз redash-viewer і redash-admin в аналітичному екземплярі registry postgres.

  2. Додати liquibase функціонал по створенню користувача redash в аналітичному екземплярі registry postgres.

  3. У значеннях redash-chart ввімкнути зовнішній postgres та задати відповідну URL бази.

  4. Оновлення Network Policies.

  5. Helm chart Redash підтримує налаштування externalPostgreSQL. Ввімкнення externalPostgreSQL також вимикає створення окремого екземпляру Postgres для кожного з Redash.

  6. Перевикористати міграційний скрипт, що був створений для міграції бази даних з Postgres 9.5 на 14, щоб виконати міграцію під час оновлення реєстру.

  7. Оновити підхід до резервного копіювання та відновлення реєстру.

  8. Оновити відповідні архітектурні діаграми для відображення нової взаємодії.