VK Docs logo
Помощь
Обновлена 20 апреля 2026 г. в 13:06

Руководство по эксплуатации

Настояее Руководство содержит описание функционала, доступного пользователям Tarantool Change Data Capture (TCDC).

Tarantool Change Data Capture (далее Tarantool CDC) - это решение на основе in-memory платформы Tarantool Enterprise Edition для real-time репликации данных на основе потока событий БД-Источника, обеспечивающее синхронизацию данных в нескольких ИС в реальном времени.

Tarantool CDC позволяет решать следующие задачи:

  • Поддержание актуальности и консистентности данных в ИТ-контуре компании;
  • Снижение нагрузки на оперативные базы данных;
  • Предоставление данных для работы RTDM-сервисов;
  • Наполнение Источников данных для подготовки on-line отчетности и аналитики.
  • Разные сценарии переноса данных, в том числе:
    • Синхронизация данных из Tarantool в другие СУБД;
    • Двусторонняя синхронизация Tarantool ↔ PostgreSQL;
    • Миграция данных из проприетарных СУБД;
    • Наполнение кэш-витрин в Tarantool из мастер-базы (в том числе Oracle без GoldenGate).

Tarantool CDC применяется в высоконагруженных ИТ-решениях в таких сферах, как финтех, real-time маркетинг, логистика, телеком.

Преимущества Tarantool Change Data Capture:

  • Высокая производительность за счет использования in-memory технологии Tarantool;
  • Отказоустойчивость и масштабируемость из коробки, в том числе за счет очереди Tarantool Queue Enterprise;
  • Real-time репликация из Oracle без использования Golden Gate;
  • Нативная совместимость с экосистемой Debezium (готовые коннекторы):
    • из PostgreSQL (Debezium), Oracle + OLR (Debezium);
    • в ClickHouse (KafkaConnect) и в любую СУБД с JDBC-интерфейсом, например PostgreSQL (Debezium).
  • Собственные коннекторы:
    • из Tarantool (Tarantool DB 1x/2x, Tarantool Data Grid 2.11+, Tarantool Queue Enterprise), Kafka;
    • в Tarantool (Tarantool DB 1x/2x, Tarantool Queue Enterprise), Elasticsearch, Kafka.

Документация Tarantool CDC включает следующие руководства:

Руководство для начинающих

В этом руководстве вы познакомитесь с основными возможностями Tarantool CDC на двух примерах.

При прохождении руководства вы развернете кластер Tarantool CDC и две тестовые СУБД (PostgreSQL и TarantoolDB):

  • В первом примере вы настроите передачу данных из PostgreSQL в TarantoolDB ссылка.
  • Во втором примере вы настроите передачу данных из PostgreSQL в TarantoolDB ссылка.

В конце каждого примера вы проверите работу стенда с помощью мониторинга и запустите нагрузочное тестирование.

Для простоты развертывания в примерах используются Docker и minikube.

Требования к окружению

Примеры этого руководства можно запускать в разных ОС (Linux, MacOS, Windows) на архитектуре x86.

Для удобства и наглядности создайте и перейдите в директорию, в которой будет происходить процесс работы с примером:

mkdir quickstart && cd quickstart

Установите локально:

Также необходимо скачать и переместить в рабочую директорию следующие образы Docker:

Инструкции по установке этих образов приводятся ниже.

Передача данных при помощи очереди TQE

Пример включает следующие шаги:

Установка и конфигурация

Запуск minikube

Запуск minikube будет производиться через docker. Для успешного запуска необходимо в настройках docker выделить достаточное количество ресурсов, как минимум:

  • 4CPU+
  • 10Gb+ RAM
  • 50Gb+ Disk

Запустите minikube со следующими параметрами:

minikube start --driver=docker --cpus 4 --memory=10240 --disk-size 50GB

Убедитесь, что minikube успешно запущен:

$ minikube statusminikubetype: Control Planehost: Runningkubelet: Runningapiserver: Runningkubeconfig: Configured

Подготовка БД Источника (PostgreSQL)

В качестве примера мы используем СУБД PostgreSQL 16.4, запущенную в Docker.

  1. Создайте файл init.sql:
cat > init.sql << 'EOF'-- Create Person tableCREATE TYPE gender AS ENUM ('male', 'female');CREATE TABLE "Person" (    "uid" BIGINT PRIMARY KEY,    "firstname" VARCHAR(256) NOT NULL,    "lastname" VARCHAR(256) NOT NULL,    "gender" gender NOT NULL,    "birthdate" TIMESTAMPTZ NOT NULL,    "age" INT,    "metadata" JSONB,    "description" TEXT,    "enabled" BOOLEAN DEFAULT false);-- Insert 10,000 random tuples into the Person tableINSERT INTO "Person" (uid, firstname, lastname, gender, birthdate, age, metadata, description, enabled)SELECT    gs AS uid,    md5(random()::text || clock_timestamp()::text)::varchar(8) AS firstname,    md5(random()::text || clock_timestamp()::text)::varchar(10) AS lastname,    (ARRAY['male', 'female'])[floor(random() * 2 + 1)]::gender AS gender,    timestamp '1950-01-01' + random() * (timestamp '2000-01-01' - timestamp '1950-01-01') AS birthdate,    (random() * (70 - 18) + 18)::INT AS age,    jsonb_build_object('key1', md5(random()::text)::varchar(5),                       'key2', (random() * 100)::INT,                       'key3', (random() > 0.5)) AS metadata,    md5(random()::text || clock_timestamp()::text)::varchar(50) AS description,    (random() > 0.5) AS enabledFROM generate_series(1, 10000) AS gs;EOF
  1. Проверьте и убедитесь, что файл с нужным наполнением создан:

    tail -10 init.sql
  2. Откройте отдельное окно терминала для запуска PostgreSQL.

  3. Скачайте образ Docker c PostgreSQL 16.4 и запустите контейнер с ним:

    docker run --rm --name postgresql-sourcedb -p 5432:5432 -m 1g \  -e POSTGRES_USER=demouser -e POSTGRES_PASSWORD=demopasswd -e POSTGRES_DB=demo \  -e POSTGRES_INITDB_ARGS="--encoding=UTF-8 --lc-collate=C --lc-ctype=C" \  -v $(pwd)/init.sql:/docker-entrypoint-initdb.d/init.sql \  postgres:16.4 -c wal_level=logical -c max_connections=500

    Здесь мы настраиваем PostgreSQL так, как описано в требованиях к работе с Tarantool CDC.

    Внимание! Увеличенное значение max_connections нужно для корректной работы ссылка.

    В случае успешного запуска в консоли появятся записи такого рода:

    <...>waiting for server to start....2025-02-26 18:16:06.713 UTC [47] LOG:  starting PostgreSQL 16.4 (Debian 16.4-1.pgdg120+2) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14) 12.2.0, 64-bit2025-02-26 18:16:06.716 UTC [47] LOG:  listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"2025-02-26 18:16:06.724 UTC [50] LOG:  database system was shut down at 2025-02-26 18:16:06 UTC2025-02-26 18:16:06.730 UTC [47] LOG:  database system is ready to accept connections doneserver startedCREATE DATABASE/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/init.sqlCREATE TYPECREATE TABLEINSERT 0 10000<...>PostgreSQL init process complete; ready for start up.<...>2025-02-26 18:16:07.744 UTC [1] LOG:  database system is ready to accept connections
  4. Перейдите в основное окно терминала.

Подготовка БД Приемника (TarantoolDB 2.x)

Как и для PostgreSQL, в качестве примера мы используем СУБД TarantoolDB 2.0, запущенную в Docker.

  1. Установите Docker-образ TarantoolDB:

    a. Загрузите ранее скачанный образ TarantoolDB в Docker:

    docker image load --input tarantooldb-docker-image-2.0.0.linux.x86_64.tar.gz

    b. Добавьте для образа Docker тег 2x-latest:

    docker image tag tarantooldb:2.0.0 tarantooldb:2x-latest
  2. Установите Docker-образы Prometheus и Grafana:

    a. Загрузите ранее скачанные образы в Docker:

    docker image load --input grafana_9.5.14.tar.gzdocker image load --input prometheus_v2.30.3.tar.gz

    b. Проверьте, что Docker-образы успешно загружены:

    docker image list
  3. Скачайте, перенесите в рабочую директорию и распакуйте исходные файлы примера up_with_docker_compose для развертывания тестового кластера TarantoolDB.

  4. Внутри распакованного архива в директории cluster/migrations/scenario/ создайте файл 003_create_space_person.lua со скриптом из примера ниже. Это скрипт миграции, который создает новый спейс Person, повторяющий схему данных в БД-Источнике (файл init.sql).

    local helpers = require('tt-migrations.helpers')local function up()    -- table with the same fields as in Person table in PostgreSQL,    -- plus bucket_id field for sharding    local space = box.schema.space.create('Person', {        if_not_exists = true,        format = {            { name = 'uid', type = 'number' },            { name = 'firstname', type = 'string' },            { name = 'lastname', type = 'string'},            { name = 'gender', type = 'string' },            { name = 'birthdate', type = 'datetime' }, -- since sink connector doesn't work with logical types            { name = 'age', type = 'number', is_nullable = true },            { name = 'metadata', type = 'any', is_nullable = true },            { name = 'description', type = 'string', is_nullable = true },            { name = 'enabled', type = 'boolean'},            { name = 'bucket_id', type = 'unsigned'},        }    })    space:create_index('pk', {        parts = { 'uid' },        if_not_exists = true    })    space:create_index('bucket_id', {        parts = { 'bucket_id' },        unique = false,        if_not_exists = true    })    helpers.register_sharding_key(space.name, { 'uid' })endreturn {    apply = {        scenario = up    }}

    Здесь мы настраиваем TarantoolDB так, как описано в требованиях к работе с Tarantool CDC.

    Внимание! Для примера мы не создаем отдельного пользователя для Tarantool CDC, а используем существующего по умолчанию пользователя admin.

  5. Перейдите в директорию примера up_with_docker_compose и запустите кластер TarantoolDB:

    cd up_with_docker_composemake start

    В случае успешного запуска в консоли появятся записи такого рода:

    $ make start45dc73a20f5142057688c7200a1e581fdca25491651b22e6e1a4047426ce6b82[+] Running 6/6 ✔ Container tools-prometheus-1  Started                                                                                                                                                               1.7s ✔ Container tools-grafana-1     Started                                                                                                                                                               1.8s ✔ Container tools-tcm-1-1       Started                                                                                                                                                               1.6s ✔ Container tools-etcd1-1       Started                                                                                                                                                               1.8s ✔ Container tools-etcd2-1       Started                                                                                                                                                               1.6s ✔ Container tools-etcd3-1       Started                                                                                                                                                               2.0sLoad config done[+] Running 9/9 ✔ Container cluster-tarantool-router-spb-1     Started                                                                                                                                                4.1s ✔ Container cluster-tarantool-storage-1-spb-1  Started                                                                                                                                                3.9s ✔ Container cluster-tarantool-storage-2-spb-1  Started                                                                                                                                                3.4s ✔ Container cluster-tarantool-router-msk-1     Started                                                                                                                                                3.6s ✔ Container cluster-tarantool-storage-2-brn-1  Started                                                                                                                                                3.6s ✔ Container cluster-tarantool-storage-1-brn-1  Started                                                                                                                                                3.1s ✔ Container cluster-tarantool-storage-2-msk-1  Started                                                                                                                                                3.9s ✔ Container cluster-tarantool-storage-1-msk-1  Started                                                                                                                                                3.7s ✔ Container cluster-init_host-1                Started

При повторном прохождении сценария вы можете получить ошибку Error response from daemon: network with name <network_name> already exists. В таком случае вам необходимо остановить и удалить предыдущий кластер:

make stopmake clean

После этих действий команда make start отработает штатно.

Подготовка Tarantool CDC к запуску

В отличие от обеих СУБД, запущенных в Docker, образы компонентов Tarantool CDC разворачиваются в minikube.

  1. Скачайте главный архив (tarantool-cdc-bundle-0.9.0.tar.gz) поставки Tarantool CDC, из личного кабинета.

  2. Перенесите главный архив в рабочую директорию.

  3. В рабочей директории cоздайте локальный файл конфигурации для панели мониторинга Grafana на основании файла tarantool-cdc-dashboard_rev3.json.

  4. Распакуйте главный архив tarantool-cdc-bundle-0.9.0.tar.gz.

  5. Перейдите в директорию распакованного архива и загрузите в minikube все входящие в него образы:

    minikube image load sink-worker-all-0.9.0-docker-image.tar.gz \                    tt-docker-image-2.10.0.tar.gz \                    source-worker-all-0.9.0-docker-image.tar.gz \                    message-queue-ee-2.5.3-docker-image.tar.gz
  6. Настройте kubectl для работы с minikube:

    kubectl config use-context minikube

    или установите kubeconfig через переменную окружения:

    export KUBECONFIG=~/.kube/configkubectl config current-context
  7. Создайте пространство имен (namespace), в котором будет разворачиваться кластер Tarantool CDC:

    kubectl create namespace tarantool-cdc-demo

Теперь Tarantool CDC готов к ссылка. Но сначала нужно настроить мониторинг с помощью Grafana.

Настройка мониторинга в Grafana

  1. Добавьте репозиторий с kube-prometheus-stack в minikube:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. Оставьте только нужные компоненты kube-prometheus-stack. Для этого в рабочей директории создайте файл kube-prometheus-stack-values.yaml:

    # Disable components that are not neededdefaultRules:  create: falsealertmanager:  enabled: falsekubeApiServer:  enabled: falsekubelet:  enabled: false  cAdvisorMetricRelabelings: []kubeControllerManager:  enabled: falsecoreDns:  enabled: falsekubeDns:  enabled: falsekubeEtcd:  enabled: falsekubeScheduler:  enabled: falsekubeProxy:  enabled: falsenodeExporter:  enabled: falsekubernetesServiceMonitors:  enabled: falseprometheusOperator:  enabled: true# Enable Prometheusprometheus:  enabled: true  prometheusSpec:    podMonitorSelectorNilUsesHelmValues: false    serviceMonitorSelectorNilUsesHelmValues: false    scrapeInterval: "5s"  # Set the scrape interval to 5 seconds# Enable Grafanagrafana:  enabled: true# Disable additional exporters and serviceskubeStateMetrics:  enabled: false# Disable additional monitoringadditionalPrometheusRulesMap: {}additionalScrapeConfigs: []
  3. Установите kube-prometheus-stack в minikube или используйте уже установленный:

    helm upgrade kube-prometheus-stack --install --namespace monitoring --create-namespace \prometheus-community/kube-prometheus-stack -f kube-prometheus-stack-values.yaml

    Запуск подов может занять 1-2 минуты. Убедитесь, что они находятся в статусе Running:

    $ kubectl -n monitoring get podNAME                                             READY   STATUS    RESTARTS         AGEkube-prometheus-stack-grafana-6bbf7df694-lc8rv   3/3     Running   12 (2m45s ago)   13dkube-prometheus-stack-operator-df7db7df9-n6zt4   1/1     Running   25 (118s ago)    13dprometheus-kube-prometheus-stack-prometheus-0    2/2     Running   14 (2m45s ago)   13d
  4. Узнайте и сохраните пароль от учетной записи admin для доступа в Grafana:

    kubectl --namespace monitoring get secrets kube-prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo

    Внимание! Обратите внимание, что команда возвращает пароль в незашифрованном виде. Команда может отличаться в зависимости от версии чарта kube-prometheus-stack. При написания этого Руководства использовалась версия 80.0.0.

  5. В рабочей директории создайте файл tarantool-cdc-monitors.yaml:

    ---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:  name: tqe-grpc-monitor  namespace: monitoringspec:  namespaceSelector:    matchNames:    - tarantool-cdc-demo  selector:    matchExpressions:    - key: app      operator: In      values:        - cdc-tqe-api-consumer-0        - cdc-tqe-api-publisher        - cdc-tqe-api-pubsub  podMetricsEndpoints:    - path: /metrics      port: monitoring...---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:  name: tqe-tarantool-monitor  namespace: monitoringspec:  namespaceSelector:    matchNames:    - tarantool-cdc-demo  selector:    matchExpressions:    - key: app      operator: In      values:        - tarantool  podMetricsEndpoints:    - path: /metrics      port: http...---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:  name: cdc-monitor  namespace: monitoringspec:  namespaceSelector:    matchNames:    - tarantool-cdc-demo  selector:    matchLabels:      cdc.tarantool.io/component: worker  podMetricsEndpoints:    - path: /actuator/prometheus      port: http...
  6. Подключите PodMonitor к мониторингу:

    kubectl apply -f tarantool-cdc-monitors.yaml
  7. Пробросьте порт от Grafana с помощью kubectl:

    kubectl -n monitoring get svckubectl -n monitoring port-forward svc/kube-prometheus-stack-grafana 3000:80 &

    или воспользуйтесь функцией port-forward в K9s (SHIFT-F на под с grafana).

  8. При помощи браузера зайдите в Grafana (localhost:3000), используя логин и пароль, которые вы узнали в шаге 4 выше.

  9. Импортируйте панель мониторинга tarantool-cdc-dashboard_rev3.json:

a. Нажмите Dashboards в меню слева.

b. Нажмите New. В выпадающем меню выберите пункт Import.

c. Загрузите JSON-файл с панелью мониторинга.

d. Нажмите Import.

В результате отобразится панель мониторинга Tarantool CDC, но данные в ней появятся только после запуска CDC.

Запуск CDC

  1. Откройте новое окно терминала.

  2. Перейдите в директорию с распакованным главным архивом:

    cd tarantool-cdc-bundle-0.9.0
  3. Распакуйте архив с Helm-чартом в новую директорию helm-chart-cdc:

    mkdir helm-chart-cdctar -xzf helm-chart-cdc-0.8.2.tar.gz -C helm-chart-cdc --strip-components=1
  4. Скачайте архив с примером Helm-чарта по ссылке, переместите его в директорию tarantool-cdc-bundle-0.9 и распакуйте.

  5. Скачайте YAML-файл cdc-pg-tdb-example.yaml с примером конфигурации для Helm-чарта. Сохраните файл вместо имеющегося в директории распакованного выше архива k8s/samples/quickstart/.

    * Для запуска на Windows и macOS, в этом файле нужно поменять все вхождения подстроки  `minikube.host.internal` на `host.docker.internal`.* При прохождении примера на macOS рекомендуется перейти в рабочую  директорию и выполнить команду `find . -name ".DS_Store" -type f -delete`.  Эта команда удалит скрытые файлы `.DS_Store`, которые могут создаваться  операционной системой автоматически в рабочей директории и в ее дочерних директориях.  Эти файлы помешают процессу миграции данных в базу данных Tarantool.
  6. Запустите кластер Tarantool CDC.

    Удалите PVC от предыдущих запусков:

    kubectl -n tarantool-cdc-demo delete pvc --all

    Установите кластер:

    helm install -n tarantool-cdc-demo -f k8s/samples/quickstart/cdc-pg-tdb-example.yaml cdc helm-chart-cdc/

    Запуск всех подов может занять 1-2 минуты.

  7. Проверьте, что кластер Tarantool CDC успешно запустился:

    a. В K9s откройте список всех подов в пространстве имен tarantool-cdc-demo:

    k9s -n tarantool-cdc-demo

    b. Убедитесь, что все поды находятся в статусе Running или Completed (колонка STATUS).

    Если под находится в статусе Init, то нужно подождать еще немного, чтобы он загрузился.

K9s - Статусы всех подов

c. Убедитесь, что в журналах обработчиков (worker) отсутствуют ошибки подключения к БД (в списке выберите по очереди каждый из подов, у которого в имени есть worker, и нажмите клавишу L).

K9s - Журналы обработчика

  1. Проверьте, что данные о кластере Tarantool CDC появились на панели мониторинга в Grafana (обновите страницу мониторинга в браузере).

Grafana - Метрики TCDC

Запуск постоянной нагрузки

Теперь проверим работу стенда, запустив нагрузочное тестирование с помощью утилиты K6.

  1. Создайте скрипт load_test_tarantool_const_rps.js для нагрузочного тестирования:

    import { check, sleep } from 'k6';import exec from 'k6/execution';import faker from "k6/x/faker";import sql from "k6/x/sql";import driver from "k6/x/sql/driver/postgres";// Database connection configurationconst db = sql.open(driver, 'postgres://demouser:demopasswd@localhost:5432/demo?sslmode=disable');// k6 optionsexport const options = {    scenarios: {        constant_rps: {            executor: 'constant-arrival-rate',            rate: 150, // 150 iterations per second            timeUnit: '1s', // Time unit for the rate            duration: '10m', // Total duration of the test            preAllocatedVUs: 50, // Pre-allocate VUs for the test            maxVUs: 200, // Maximum VUs to allow for the test        },    },    thresholds: {        http_req_duration: ['p(95)<500'], // 95% of requests should complete below 500ms    },};// Define the range of UIDs to useconst UID_START = 1;const UID_END = 100;// Function to get a random UID within the specified rangefunction getRandomUid() {    return Math.floor(Math.random() * (UID_END - UID_START + 1)) + UID_START;}export default function () {    // Randomly select a UID for each operation    const uid = getRandomUid();    // Generate fake data    const firstname = faker.person.firstName();    const lastname = faker.person.lastName();    const gender = faker.person.gender();    const birthDate = faker.time.date("RFC3339");    const age = faker.numbers.int16();    const metadata = JSON.stringify({        key1: faker.word.word(),        key2: faker.numbers.int8(),        key3: faker.numbers.boolean(),    });    const description = faker.word.sentence(5);    const enabled = faker.numbers.boolean();    // Insert operation (using a unique value to avoid conflicts)    let insertResult = db.exec(        'INSERT INTO "Person" (uid, firstname, lastname, gender, birthdate, age, metadata, description, enabled) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9) ON CONFLICT (uid) DO NOTHING',        uid + 1000, firstname, lastname, gender, birthDate, age, metadata, description, enabled    );    // console.log('[INSERT] res: ', insertResult);    check(insertResult, {        'insert successful': (r) => r.err == '',    });    // Update operation    let updateResult = db.exec(        'UPDATE "Person" SET firstname = $1, lastname = $2, age = $3 WHERE uid = $4',        firstname, lastname, age, uid + 1000    );    // console.log('[UPDATE] res: ', updateResult);    check(updateResult, {        'update successful': (r) => r.err == '',    });    // Delete operation    let deleteResult = db.exec('DELETE FROM "Person" WHERE uid = $1', uid + 1000);    // console.log('[DELETE] res: ', updateResult);    check(deleteResult, {        'delete successful': (r) => r.err == '',    });}export function teardown() {    db.close();}
  2. Запустите Docker-контейнер с K6 SQL:

    Для Linux

    docker run --rm -it -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" \   grafana/xk6 build v0.57.0 \   --with github.com/grafana/xk6-sql@v1.0.4 \   --with github.com/grafana/xk6-sql-driver-postgres \   --with github.com/grafana/xk6-faker@v0.4.2

    Для macOS

    docker run --rm -it -e GOOS=darwin -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" \   grafana/xk6 build v0.57.0 \   --with github.com/grafana/xk6-sql@v1.0.4 \   --with github.com/grafana/xk6-sql-driver-postgres \   --with github.com/grafana/xk6-faker@v0.4.2

    Для Windows (PowerShell)

    docker run --rm -it -e GOOS=windows -u "$(id -u):$(id -g)" -v "${PWD}:/xk6" `   grafana/xk6 build v0.57.0 --output k6.exe `   --with github.com/grafana/xk6-sql@v1.0.4 `   --with github.com/grafana/xk6-sql-driver-postgres `   --with github.com/grafana/xk6-faker@v0.4.2

    В результате будет создан исполняемый файл k6 или k6.exe. Поместите его в ту же директорию, что и скрипт для нагрузочного тестирования.

  3. Запустите скрипт с циклической нагрузкой:

    Для Linux/macOS

    ./k6 run load_test_tarantool_const_rps.js

    Для Windows (PowerShell)

    k6.exe run load_test_tarantool_const_rps.js
  4. Проконтролируйте работу CDC с помощью Grafana.

    В панели мониторинга Tarantool CDC отображаются основные параметры работы системы:

    • количество обработанных событий CDC в секунду;
    • объем трафика, проходящего через систему;
    • ошибки.

Остановка стенда

Чтобы корректно остановить Tarantool CDC и обе СУБД, выполните следующие команды:

# Остановите кластер Tarantool CDC:helm uninstall cdc -n tarantool-cdc-demominikube stop# Остановите кластер TarantoolDB (из директории up_with_docker_compose):make stop# Остановите PostgreSQL:docker stop postgresql-sourcedb

Передача данных напрямую

При прохождении этого примера вы можете переиспользовать исполняемую среду, созданную в ссылка полностью или частично. В случае повторного использования убедитесь в правильности выбранных директорий при вводе команд в терминал.

Этот пример включает следующие шаги:

Требования к окружению данного примера полностью соответствуют требованиям из примера с передачей данных при помощи TQE.

Установка и конфигурация. Пример прямой передачи данных

Запуск minikube. Пример прямой передачи данных

Требования к minikube и процесс его запуска полностью соответствуют описанию из примера с передачей данных при помощи TQE.

Подготовка БД Источника (PostgreSQL). Пример прямой передачи данных

Подготовка PostgreSQL в качестве Источника полностью соответствует подготовке PostgreSQL из примера с передачей данных при помощи TQE.

Подготовка БД Приемника (TarantoolDB 2.x). Пример прямой передачи данных

Подготовка TarantoolDB 2.x в качестве Источника полностью соответствует подготовке TarantoolDB 2.x из примера с передачей данных при помощи TQE.

Подготовка Tarantool CDC к запуску. Пример прямой передачи данных

  1. Скачайте главный архив (tarantool-cdc-bundle-0.11.0.tar.gz) поставки Tarantool CDC, из личного кабинета.

  2. Перенесите главный архив в рабочую директорию.

  3. В рабочей директории cоздайте локальный файл конфигурации для панели мониторинга Grafana на основании файла tarantool-cdc-dashboard_rev4.json.

  4. Распакуйте главный архив tarantool-cdc-bundle-0.11.0.tar.gz.

  5. Перейдите в директорию распакованного архива и загрузите в minikube входящий в него образ:

    minikube image load cdc-worker-all-0.11.0-docker-image.tar.gz
  6. Настройте kubectl для работы с minikube:

    kubectl config use-context minikube

    или установите kubeconfig через переменную окружения:

    export KUBECONFIG=~/.kube/configkubectl config current-context
  7. Создайте пространство имен (namespace), в котором будет разворачиваться кластер Tarantool CDC:

    kubectl create namespace tarantool-cdc-demo

Настройка мониторинга в Grafana. Пример прямой передачи данных

  1. Добавьте репозиторий с kube-prometheus-stack в minikube:

    helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
  2. Оставьте только нужные компоненты kube-prometheus-stack. Для этого в рабочей директории создайте файл kube-prometheus-stack-values.yaml:

    # Disable components that are not neededdefaultRules:  create: falsealertmanager:  enabled: falsekubeApiServer:  enabled: falsekubelet:  enabled: false  cAdvisorMetricRelabelings: []kubeControllerManager:  enabled: falsecoreDns:  enabled: falsekubeDns:  enabled: falsekubeEtcd:  enabled: falsekubeScheduler:  enabled: falsekubeProxy:  enabled: falsenodeExporter:  enabled: falsekubernetesServiceMonitors:  enabled: falseprometheusOperator:  enabled: true# Enable Prometheusprometheus:  enabled: true  prometheusSpec:    podMonitorSelectorNilUsesHelmValues: false    serviceMonitorSelectorNilUsesHelmValues: false    scrapeInterval: "5s"  # Set the scrape interval to 5 seconds# Enable Grafanagrafana:  enabled: true# Disable additional exporters and serviceskubeStateMetrics:  enabled: false# Disable additional monitoringadditionalPrometheusRulesMap: {}additionalScrapeConfigs: []
  3. Установите kube-prometheus-stack в minikube или используйте уже установленный:

    helm upgrade kube-prometheus-stack --install --namespace monitoring --create-namespace \prometheus-community/kube-prometheus-stack -f kube-prometheus-stack-values.yaml

    Запуск подов может занять 1-2 минуты. Убедитесь, что они находятся в статусе Running:

    $ kubectl -n monitoring get podNAME                                             READY   STATUS    RESTARTS         AGEkube-prometheus-stack-grafana-6bbf7df694-lc8rv   3/3     Running   12 (2m45s ago)   13dkube-prometheus-stack-operator-df7db7df9-n6zt4   1/1     Running   25 (118s ago)    13dprometheus-kube-prometheus-stack-prometheus-0    2/2     Running   14 (2m45s ago)   13d
  4. Узнайте и сохраните пароль от учетной записи admin для доступа в графану:

    kubectl --namespace monitoring get secrets kube-prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echo

    Обратите внимание, что команда возвращает пароль в незашифрованном виде. Команда может отличаться в зависимости от версии чарта kube-prometheus-stack. При написания этого Руководства использовалась версия 80.0.0.

  5. В рабочей директории создайте файл tarantool-cdc-monitors.yaml:

    ---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:  name: cdc-monitor  namespace: monitoringspec:  namespaceSelector:    any: true  selector:    matchLabels:      cdc.tarantool.io/component: worker  podMetricsEndpoints:    - path: /actuator/prometheus      port: http...
  6. Подключите PodMonitor к мониторингу:

    kubectl apply -f tarantool-cdc-monitors.yaml
  7. Пробросьте порт от Grafana с помощью kubectl:

    kubectl -n monitoring get svckubectl -n monitoring port-forward svc/kube-prometheus-stack-grafana 3000:80 &

    или воспользуйтесь функцией port-forward в K9s (SHIFT-F на под с grafana).

  8. При помощи браузера зайдите в Grafana (localhost:3000), используя логин и пароль, которые вы узнали в шаге 4 выше.

  9. Импортируйте панель мониторинга universal-workers-dashboard_rev3.json:

    a. Нажмите Dashboards в меню слева.

    b. Нажмите New. В выпадающем меню выберите пункт Import.

    c. Загрузите JSON-файл с панелью мониторинга.

    d. Нажмите Import.

    В результате отобразится панель мониторинга Tarantool CDC, но данные в ней появятся только после запуска CDC.

Запуск CDC. Пример прямой передачи данных

  1. Откройте новое окно терминала.

  2. Перейдите в директорию с распакованным главным архивом:

    cd tarantool-cdc-bundle-0.11.0
  3. В архив входит Helm-чарт. Распакуйте этот архив в новую директорию helm-chart-cdc:

    mkdir helm-chart-cdctar -xzf helm-chart-cdc-0.10.0.tar.gz -C helm-chart-cdc --strip-components=1
  4. Скачайте архив с примером helm-чарта по ссылке, переместите его в директорию tarantool-cdc-bundle-0.11.0 и распакуйте.

  5. Скачайте YAML-файл cdc-pg-tdb-universal-worker-example.yaml с примером конфигурации для Helm-чарта. Сохраните файл вместо имеющегося в директории распакованного выше архива k8s/samples/quickstart/.

    Внимание!

    • Для запуска на Windows и macOS, в этом файле нужно поменять все вхождения подстроки minikube.host.internal на host.docker.internal.
    • При прохождении примера на macOS рекомендуется перейти в рабочую директорию и выполнить команду find . -name ".DS_Store" -type f -delete. Эта команда удалит скрытые файлы .DS_Store, которые могут создаваться операционной системой автоматически в рабочей директории и в ее дочерних директориях. Эти файлы помешают процессу миграции данных в базу данных Tarantool.
  6. Запустите кластер Tarantool CDC.

    Удалите PVC от предыдущих запусков:

    kubectl -n tarantool-cdc-demo delete pvc --all

    Установите кластер:

    helm install -n tarantool-cdc-demo -f k8s/samples/quickstart/cdc-pg-tdb-example.yaml cdc helm-chart-cdc/

    Запуск всех подов может занять 1-2 минуты.

  7. Проверьте, что кластер Tarantool CDC успешно запустился:

    a. В K9s откройте список всех подов в пространстве имен tarantool-cdc-demo:

    k9s -n tarantool-cdc-demo

    b. Убедитесь, что все поды находятся в статусе Running или Completed (колонка STATUS).

    Если под находится в статусе Init, то нужно подождать еще немного, чтобы он загрузился.

K9s - Статусы всех подов

c. Убедитесь, что в журнале универсального обработчика отсутствуют ошибки подключения к БД (в списке выберите под с именем cdc-pg-1-0-tdb2-1-0, и нажмите клавишу L).

K9s - Журналы Обработчика

  1. Проверьте, что данные о кластере Tarantool CDC появились на панели мониторинга в Grafana (обновите страницу мониторинга в браузере).

Grafana - Метрики TCDC

Для выхода из интерфейса K9s используйте комбинацию клавиш CTRL+C.

Запуск постоянной нагрузки. Пример прямой передачи данных

Процесс запуска постоянной нагрузки в текущем примере полностью соответствует процедуре запуска из примера с передачей данных при помощи TQE.

Убедитесь, что панель мониторинга в Grafana отображает статистику передачи данных (обновите страницу мониторинга в браузере).

Grafana - Передача данных

Остановка стенда. Пример прямой передачи данных

Процесс остановки стенда в текущем примере полностью соответствует процедуре остановки из примера с передачей данных при помощи TQE.