Uroboros¶
В данном разделе приведены сведения о Uroboros, плагине для СУБД Picodata.
Picodata Enterprise
Функциональность плагина доступна только в коммерческой версии Picodata.
Общие сведения¶
Плагин Uroboros используется для однонаправленной асинхронной логической репликации данных между двумя кластерами Picodata.
Основные задачи Uroboros:
- перенос кластера на новую площадку без простоя
- обеспечение отказоустойчивости путем репликации одного кластера в другой
Принцип работы¶
Для использования Uroboros требуются два кластера: кластер источник и кластер-приемник. Далее необходимо развернуть кластер Picodata с включенным плагином Uroboros. В этом кластере может быть как один инстанс, так и несколько — число инстансов определяет то, сколько исполнителей (процессов копирования) будет выполняться одновременно.
При условии корректной настройки подключения к кластерам Uroboros будет переносить данные из кластера-источника в кластер-приемник с помощью логической репликации (копирования журналов изменений). Этот способ предоставляет необходимую гибкость (позволяет работать с отдельными таблицами) и учитывает семантику данных.
Схема работы плагина показана ниже:
Плагин учитывает топологию кластеров, с которыми он работает. Каждый исполнитель плагина Uroboros реплицирует один или более репликасетов из кластера-источника. На исполнителе создается набор файберов, каждый из которых обрабатывает свою связку <репликасет источник + диапазон сегментов>. Таким образом, получается паралелльная отправка в кластер-приемник записей из различных сегментов. При этом сохраняется упорядоченность записей и изменений в рамках каждого сегмента (не возникает "состояния гонки").
Состав плагина¶
Внутри архива с плагином находится структура вложенных директорий, включающая имя и версию плагина, а также его файлы:
└── uroboros
└── 1.0.0
├── liburoboros.so
├── manifest.yaml
└── migrations
├── 0001_state.db
└── 0002_uroboros_state.db
Основная логика плагина обеспечивается разделяемой библиотекой
liburoboros.so
. Исходная конфигурация плагина задается в файле манифеста
(manifest.yaml
). Директория migrations
зарезервирована для файлов
миграций.
Конфигурация плагина¶
Основные параметры плагина включают в себя:
- имя отдельного пользователя (должно совпадать на кластере-источнике и кластере-приемнике), под которым Uroboros будет подключаться
- группа параметров для подключения к кластеру-источнику (producer) и кластеру-приемнику (consumer)
- группа параметров по настройке репликации (группы шардирования, исключаемые спейсы (таблицы), настройки параллелизма, переподключения и т.д.)
Исходная конфигурация плагина определяется файлом-манифестом:
manifest.yaml
description: Plugin tnt clusters replication
name: uroboros
version: 0.4.2
services:
- name: uroboros
description: uroboros descr
default_configuration:
password: password
producer:
user_url: http://localhost:9001/uroboros/api/v1/user
topology_url: http://localhost:9001/uroboros/api/v1/topology
space_info_url: http://localhost:9001/uroboros/api/v1/space
consumer:
type: tarantool
attributes:
space_info_url: http://localhost:9002/uroboros/api/v1/space
user_url: http://localhost:9002/uroboros/api/v1/user
topology_url: http://localhost:9002/uroboros/api/v1/topology
enabled_groups: ["default"]
disabled_spaces: []
buckets_per_writer: 1000
reconnect_delay: 10
migration:
- migrations/0001_state.db
- migrations/0002_uroboros_state.db
Пользовательская конфигурация плагина определяется отдельным конфигурационным файлом для сервиса плагина:
default_configuration:
producer: # настройки кластера-источника
space_info_url: "http://<source_address>/uroboros/api/v1/space"
user_url: "http://<source_address>/uroboros/api/v1/user"
topology_url: "http://<source_address>/uroboros/api/v1/topology"
consumer: # настройки кластера-приемника
type: "tarantool" # может быть Tarantool, или, в будущем — Kafka или Picodata
attributes:
space_info_url: "http://<destination_address>/uroboros/api/v1/space"
user_url: "http://<destination_address>/uroboros/api/v1/user"
topology_url: "http://<destination_address>/uroboros/api/v1/topology"
enabled_groups: # группы шардирования, которые следует реплицировать
- storage
- group_1
- group_2
disabled_spaces: # таблицы из указанных выше групп шардирования, которые реплицировать НЕ следует
- ignored_space_1
- ignored_space_2
buckets_per_writer: 1000 # степень параллелизации обработки. Не стоит изменять без консультации с разработчиками.
reconnect_delay: 10 # задержка перед восстановлением коннекта к источнику
Для изменения настроек уже запущенного плагина используйте SQL-команду ALTER PLUGIN ...
См. также:
Подключение плагина¶
Содержимое архива с плагином следует распаковать в любую удобную
директорию, которую после этого нужно будет указать как PLUGIN_DIR
для
инстанса Picodata.
При запуске одного инстанса из командной строки директорию плагина можно указать с помощью параметра:
picodata run --plugin-dir=<PLUGIN-DIR> ...
Однако, для полноценной использования плагина рекомендуется запустить кластер с помощью роли Ansible.
После запуска Picodata с поддержкой плагинов в заданной директории подключитесь к административной консоли инстанса Picodata.
Установите плагин, добавьте его к тиру и включите его с помощью следующих SQL-команд:
CREATE PLUGIN uroboros 0.4.1;
ALTER PLUGIN uroboros MIGRATE TO 0.4.1;
ALTER PLUGIN uroboros 0.4.1 ADD SERVICE uroboros TO TIER default;
ALTER PLUGIN uroboros 0.4.1 ENABLE;
Проверка с помощью Ansible¶
Подготовка¶
- Изучите документацию по развертыванию кластера Picodata. Выполнить инструкции по установке роли.
- Скачайте нужную версию плагина
uroboros
и положите пакет в рабочую директорию. - Проверьте наличие конфигурационного файла для плагина
uroboros-config.yml
, проверьте настройки в нем (см. ниже).
Примечание
На сервере, с которого будет происходить установка, необходим Ansible и доступ на серверы кластера с повышением привилегий.
Установка окружения¶
Создайте файл с описанием кластера согласно руководству по
развертыванию кластера. Например,
uroboros.yml
.
---
all:
vars:
user: username # имя пользователя, под которым будут запущены процессы picodata
group: groupname # группа пользователя, под которой будут запущены процессы picodata
password: "<password>"
cluster_name: uroboros
audit: false
log_level: warn
log_to: file
conf_dir: "/opt/picodata/etc"
data_dir: "/opt/picodata/data"
run_dir: "/var/run/picodata"
log_dir: "/opt/picodata/logs"
fd_uniq_per_instance: true
purge: true # при очистке кластера удалять в том числе все данные и логи с сервера
listen_ip: "{{ ansible_default_ipv4.address }}" # ip-адрес, который будет слушать инстанс, по умолчанию ansible_default_ipv4.address
first_bin_port: 13301 # начальный бинарный порт для первого инстанса (он же main_peer)
first_http_port: 18001
first_pg_port: 15001
init_system: "supervisord"
rootless: true
plugins:
uroboros:
path: "uroboros_0.3.0.tar.gz"
tiers:
- default
config: "uroboros-config.yml"
tiers:
default:
instances_per_server: 5
replication_factor: 15
config:
memtx:
memory: 1G
iproto:
max_concurrent_messages: 1500
admin_password: "<password>"
property:
auto_offline_timeout: 30
DC1: # Датацентр (failure_domain)
hosts:
hostname1:
ansible_host: ip1
hostname2:
ansible_host: ip2
hostname3:
ansible_host: ip3
Создайте файл с конфигурацией.
Подготовьте плейбук picodata.yml
:
---
- name: Deploy Picodata cluster
hosts: all
become: true
tasks:
- name: Import picodata-ansible role
ansible.builtin.import_role:
name: picodata-ansible
В результате в рабочем каталоге должно быть 4 файла:
- uroboros.yml
- picodata.yml
- uroboros_config.yml
- uroboros_xxxxx.tar.gz
Запустите раскатку Uroboros:
ansible-playbook -i uroboros.yml picodata.yml
Мониторинг показателей плагина¶
Процесс работы плагина Uroboros можно удобно отслеживать в графическом интерфейсе Grafana, для которого Picodata поставляет файл конфигурации (dashboard).
Для настройки мониторинга импортируйте dashboard с данными Uroboros. Для
этого понадобится файл dashboard.grafana.json, который следует
добавить в меню Dashboards
> New
> Import
:
Панель dashboard для плагина Uroboros отображает ряд графиков, на которых отражена пропускная способность кластера с Uroboros, статистика по скопированным пакетам, а также данные по количеству записей в кластере-источнике и кластере-приемнике.
Внешний вид dashboard для Uroboros показан ниже:
Для настройки dashboard используйте параметры в верхней части экрана:
- Источник данных — по умолчанию
Prometheus
- Кластер уробороса — имя кластера с Uroboros
- Нода уробороса — данные с каких узлов кластера с Uroboros следует отображать (по умолчанию
All
, т.е. со всех узлов) - Кластер источник — имя кластера, с которого Uroboros будет забирать данные (значение по умолчанию —
pustoe
) - Кластер-приемник — имя кластера, в который Uroboros будет записывать данные (значение по умолчанию —
porognee
) - Игнорируемые спейсы — список спейсов, данные которых не будут скопированы
См. также: