Руководство по эксплуатации
Настояее Руководство содержит описание функционала, доступного пользователям 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:
- Образ tarantooldb-docker-image-2.0.0.linux.x86_64.tar.gz. В обоих примерах он будет использоваться как образец БД-Источника.
- Образы Prometheus и Grafana в разделе third-party-docker-images.
Инструкции по установке этих образов приводятся ниже.
Пример включает следующие шаги:
- Установка и конфигурация
- Настройка мониторинга в Grafana
- Запуск CDC
- Запуск постоянной нагрузки
- Остановка стенда
Запуск 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 16.4, запущенную в Docker.
- Создайте файл
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)SELECTgs 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
-
Проверьте и убедитесь, что файл с нужным наполнением создан:
tail -10 init.sql -
Откройте отдельное окно терминала для запуска PostgreSQL.
-
Скачайте образ 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 connectionsdoneserver 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 -
Перейдите в основное окно терминала.
Как и для PostgreSQL, в качестве примера мы используем СУБД TarantoolDB 2.0, запущенную в Docker.
-
Установите Docker-образ TarantoolDB:
a. Загрузите ранее скачанный образ TarantoolDB в Docker:
docker image load --input tarantooldb-docker-image-2.0.0.linux.x86_64.tar.gzb. Добавьте для образа Docker тег 2x-latest:
docker image tag tarantooldb:2.0.0 tarantooldb:2x-latest -
Установите Docker-образы Prometheus и Grafana:
a. Загрузите ранее скачанные образы в Docker:
docker image load --input grafana_9.5.14.tar.gzdocker image load --input prometheus_v2.30.3.tar.gzb. Проверьте, что Docker-образы успешно загружены:
docker image list -
Скачайте, перенесите в рабочую директорию и распакуйте исходные файлы примера
up_with_docker_composeдля развертывания тестового кластера TarantoolDB. -
Внутри распакованного архива в директории
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 shardinglocal 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. -
Перейдите в директорию примера
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 отработает штатно.
В отличие от обеих СУБД, запущенных в Docker, образы компонентов Tarantool CDC разворачиваются в minikube.
-
Скачайте главный архив (
tarantool-cdc-bundle-0.9.0.tar.gz) поставки Tarantool CDC, из личного кабинета. -
Перенесите главный архив в рабочую директорию.
-
В рабочей директории cоздайте локальный файл конфигурации для панели мониторинга Grafana на основании файла tarantool-cdc-dashboard_rev3.json.
-
Распакуйте главный архив
tarantool-cdc-bundle-0.9.0.tar.gz. -
Перейдите в директорию распакованного архива и загрузите в
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 -
Настройте
kubectlдля работы сminikube:kubectl config use-context minikubeили установите
kubeconfigчерез переменную окружения:export KUBECONFIG=~/.kube/configkubectl config current-context -
Создайте пространство имен (namespace), в котором будет разворачиваться кластер Tarantool CDC:
kubectl create namespace tarantool-cdc-demo
Теперь Tarantool CDC готов к ссылка. Но сначала нужно настроить мониторинг с помощью Grafana.
-
Добавьте репозиторий с
kube-prometheus-stackвminikube:helm repo add prometheus-community https://prometheus-community.github.io/helm-charts -
Оставьте только нужные компоненты
kube-prometheus-stack. Для этого в рабочей директории создайте файлkube-prometheus-stack-values.yaml:# Disable components that are not neededdefaultRules:create: falsealertmanager:enabled: falsekubeApiServer:enabled: falsekubelet:enabled: falsecAdvisorMetricRelabelings: []kubeControllerManager:enabled: falsecoreDns:enabled: falsekubeDns:enabled: falsekubeEtcd:enabled: falsekubeScheduler:enabled: falsekubeProxy:enabled: falsenodeExporter:enabled: falsekubernetesServiceMonitors:enabled: falseprometheusOperator:enabled: true# Enable Prometheusprometheus:enabled: trueprometheusSpec:podMonitorSelectorNilUsesHelmValues: falseserviceMonitorSelectorNilUsesHelmValues: falsescrapeInterval: "5s" # Set the scrape interval to 5 seconds# Enable Grafanagrafana:enabled: true# Disable additional exporters and serviceskubeStateMetrics:enabled: false# Disable additional monitoringadditionalPrometheusRulesMap: {}additionalScrapeConfigs: [] -
Установите
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 -
Узнайте и сохраните пароль от учетной записи
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. -
В рабочей директории создайте файл
tarantool-cdc-monitors.yaml:---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:name: tqe-grpc-monitornamespace: monitoringspec:namespaceSelector:matchNames:- tarantool-cdc-demoselector:matchExpressions:- key: appoperator: Invalues:- cdc-tqe-api-consumer-0- cdc-tqe-api-publisher- cdc-tqe-api-pubsubpodMetricsEndpoints:- path: /metricsport: monitoring...---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:name: tqe-tarantool-monitornamespace: monitoringspec:namespaceSelector:matchNames:- tarantool-cdc-demoselector:matchExpressions:- key: appoperator: Invalues:- tarantoolpodMetricsEndpoints:- path: /metricsport: http...---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:name: cdc-monitornamespace: monitoringspec:namespaceSelector:matchNames:- tarantool-cdc-demoselector:matchLabels:cdc.tarantool.io/component: workerpodMetricsEndpoints:- path: /actuator/prometheusport: http... -
Подключите PodMonitor к мониторингу:
kubectl apply -f tarantool-cdc-monitors.yaml -
Пробросьте порт от Grafana с помощью
kubectl:kubectl -n monitoring get svckubectl -n monitoring port-forward svc/kube-prometheus-stack-grafana 3000:80 &или воспользуйтесь функцией
port-forwardв K9s (SHIFT-Fна под сgrafana). -
При помощи браузера зайдите в Grafana (
localhost:3000), используя логин и пароль, которые вы узнали в шаге4выше. -
Импортируйте панель мониторинга
tarantool-cdc-dashboard_rev3.json:
a. Нажмите Dashboards в меню слева.
b. Нажмите New. В выпадающем меню выберите пункт Import.
c. Загрузите JSON-файл с панелью мониторинга.
d. Нажмите Import.
В результате отобразится панель мониторинга Tarantool CDC, но данные в ней появятся только после запуска CDC.
-
Откройте новое окно терминала.
-
Перейдите в директорию с распакованным главным архивом:
cd tarantool-cdc-bundle-0.9.0 -
Распакуйте архив с Helm-чартом в новую директорию
helm-chart-cdc:mkdir helm-chart-cdctar -xzf helm-chart-cdc-0.8.2.tar.gz -C helm-chart-cdc --strip-components=1 -
Скачайте архив с примером Helm-чарта по ссылке, переместите его в директорию tarantool-cdc-bundle-0.9 и распакуйте.
-
Скачайте 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. -
Запустите кластер 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 минуты.
-
Проверьте, что кластер Tarantool CDC успешно запустился:
a. В K9s откройте список всех подов в пространстве имен
tarantool-cdc-demo:k9s -n tarantool-cdc-demob. Убедитесь, что все поды находятся в статусе Running или Completed (колонка STATUS).
Если под находится в статусе Init, то нужно подождать еще немного, чтобы он загрузился.

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

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

Теперь проверим работу стенда, запустив нагрузочное тестирование с помощью утилиты K6.
-
Создайте скрипт
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 secondtimeUnit: '1s', // Time unit for the rateduration: '10m', // Total duration of the testpreAllocatedVUs: 50, // Pre-allocate VUs for the testmaxVUs: 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 operationconst uid = getRandomUid();// Generate fake dataconst 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 operationlet 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 operationlet 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();} -
Запустите 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. Поместите его в ту же директорию, что и скрипт для нагрузочного тестирования. -
Запустите скрипт с циклической нагрузкой:
Для Linux/macOS
./k6 run load_test_tarantool_const_rps.jsДля Windows (PowerShell)
k6.exe run load_test_tarantool_const_rps.js -
Проконтролируйте работу 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
При прохождении этого примера вы можете переиспользовать исполняемую среду, созданную в ссылка полностью или частично. В случае повторного использования убедитесь в правильности выбранных директорий при вводе команд в терминал.
Этот пример включает следующие шаги:
- Установка и конфигурация. Пример прямой передачи данных
- Настройка мониторинга в Grafana. Пример прямой передачи данных
- Запуск CDC. Пример прямой передачи данных
- Запуск постоянной нагрузки. Пример прямой передачи данных
- Остановка стенда. Пример прямой передачи данных
Требования к окружению данного примера полностью соответствуют требованиям из примера с передачей данных при помощи TQE.
Требования к minikube и процесс его запуска полностью
соответствуют описанию из примера
с передачей данных при помощи TQE.
Подготовка PostgreSQL в качестве Источника полностью соответствует подготовке PostgreSQL из примера с передачей данных при помощи TQE.
Подготовка TarantoolDB 2.x в качестве Источника полностью соответствует подготовке TarantoolDB 2.x из примера с передачей данных при помощи TQE.
-
Скачайте главный архив (
tarantool-cdc-bundle-0.11.0.tar.gz) поставки Tarantool CDC, из личного кабинета. -
Перенесите главный архив в рабочую директорию.
-
В рабочей директории cоздайте локальный файл конфигурации для панели мониторинга Grafana на основании файла tarantool-cdc-dashboard_rev4.json.
-
Распакуйте главный архив
tarantool-cdc-bundle-0.11.0.tar.gz. -
Перейдите в директорию распакованного архива и загрузите в
minikubeвходящий в него образ:minikube image load cdc-worker-all-0.11.0-docker-image.tar.gz -
Настройте
kubectlдля работы сminikube:kubectl config use-context minikubeили установите
kubeconfigчерез переменную окружения:export KUBECONFIG=~/.kube/configkubectl config current-context -
Создайте пространство имен (namespace), в котором будет разворачиваться кластер Tarantool CDC:
kubectl create namespace tarantool-cdc-demo
-
Добавьте репозиторий с
kube-prometheus-stackвminikube:helm repo add prometheus-community https://prometheus-community.github.io/helm-charts -
Оставьте только нужные компоненты
kube-prometheus-stack. Для этого в рабочей директории создайте файлkube-prometheus-stack-values.yaml:# Disable components that are not neededdefaultRules:create: falsealertmanager:enabled: falsekubeApiServer:enabled: falsekubelet:enabled: falsecAdvisorMetricRelabelings: []kubeControllerManager:enabled: falsecoreDns:enabled: falsekubeDns:enabled: falsekubeEtcd:enabled: falsekubeScheduler:enabled: falsekubeProxy:enabled: falsenodeExporter:enabled: falsekubernetesServiceMonitors:enabled: falseprometheusOperator:enabled: true# Enable Prometheusprometheus:enabled: trueprometheusSpec:podMonitorSelectorNilUsesHelmValues: falseserviceMonitorSelectorNilUsesHelmValues: falsescrapeInterval: "5s" # Set the scrape interval to 5 seconds# Enable Grafanagrafana:enabled: true# Disable additional exporters and serviceskubeStateMetrics:enabled: false# Disable additional monitoringadditionalPrometheusRulesMap: {}additionalScrapeConfigs: [] -
Установите
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 -
Узнайте и сохраните пароль от учетной записи
adminдля доступа в графану:kubectl --namespace monitoring get secrets kube-prometheus-stack-grafana -o jsonpath="{.data.admin-password}" | base64 -d ; echoОбратите внимание, что команда возвращает пароль в незашифрованном виде. Команда может отличаться в зависимости от версии чарта
kube-prometheus-stack. При написания этого Руководства использовалась версия 80.0.0. -
В рабочей директории создайте файл
tarantool-cdc-monitors.yaml:---kind: PodMonitorapiVersion: monitoring.coreos.com/v1metadata:name: cdc-monitornamespace: monitoringspec:namespaceSelector:any: trueselector:matchLabels:cdc.tarantool.io/component: workerpodMetricsEndpoints:- path: /actuator/prometheusport: http... -
Подключите PodMonitor к мониторингу:
kubectl apply -f tarantool-cdc-monitors.yaml -
Пробросьте порт от Grafana с помощью
kubectl:kubectl -n monitoring get svckubectl -n monitoring port-forward svc/kube-prometheus-stack-grafana 3000:80 &или воспользуйтесь функцией
port-forwardв K9s (SHIFT-Fна под сgrafana). -
При помощи браузера зайдите в Grafana (
localhost:3000), используя логин и пароль, которые вы узнали в шаге4выше. -
Импортируйте панель мониторинга
universal-workers-dashboard_rev3.json:a. Нажмите Dashboards в меню слева.
b. Нажмите New. В выпадающем меню выберите пункт Import.
c. Загрузите JSON-файл с панелью мониторинга.
d. Нажмите Import.
В результате отобразится панель мониторинга Tarantool CDC, но данные в ней появятся только после запуска CDC.
-
Откройте новое окно терминала.
-
Перейдите в директорию с распакованным главным архивом:
cd tarantool-cdc-bundle-0.11.0 -
В архив входит Helm-чарт. Распакуйте этот архив в новую директорию
helm-chart-cdc:mkdir helm-chart-cdctar -xzf helm-chart-cdc-0.10.0.tar.gz -C helm-chart-cdc --strip-components=1 -
Скачайте архив с примером helm-чарта по ссылке, переместите его в директорию tarantool-cdc-bundle-0.11.0 и распакуйте.
-
Скачайте 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.
- Для запуска на Windows и macOS, в этом файле нужно поменять все вхождения
подстроки
-
Запустите кластер 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 минуты.
-
Проверьте, что кластер Tarantool CDC успешно запустился:
a. В K9s откройте список всех подов в пространстве имен
tarantool-cdc-demo:k9s -n tarantool-cdc-demob. Убедитесь, что все поды находятся в статусе Running или Completed (колонка STATUS).
Если под находится в статусе Init, то нужно подождать еще немного, чтобы он загрузился.

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

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

Для выхода из интерфейса K9s используйте комбинацию клавиш CTRL+C.
Процесс запуска постоянной нагрузки в текущем примере полностью соответствует процедуре запуска из примера с передачей данных при помощи TQE.
Убедитесь, что панель мониторинга в Grafana отображает статистику передачи данных (обновите страницу мониторинга в браузере).

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