Перейти к содержанию

Uroboros

В данном разделе приведены сведения о Uroboros, плагине для СУБД Picodata.

Picodata Enterprise

Функциональность плагина доступна только в коммерческой версии Picodata.

Общие сведения

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

Основные задачи Uroboros:

  • перенос кластера на новую площадку без простоя
  • обеспечение отказоустойчивости путем репликации одного кластера в другой

Принцип работы

Для использования Uroboros требуются два кластера: кластер источник и кластер-приемник. Далее необходимо развернуть кластер Picodata с включенным плагином Uroboros. В этом кластере может быть как один инстанс, так и несколько — число инстансов определяет то, сколько исполнителей (процессов копирования) будет выполняться одновременно.

При условии корректной настройки подключения к кластерам Uroboros будет переносить данные из кластера-источника в кластер-приемник с помощью логической репликации (копирования журналов изменений). Этот способ предоставляет необходимую гибкость (позволяет работать с отдельными таблицами) и учитывает семантику данных.

Схема работы плагина показана ниже:

Uroboros replication

Плагин учитывает топологию кластеров, с которыми он работает. Каждый исполнитель плагина 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

Подготовка

  1. Изучите документацию по развертыванию кластера Picodata. Выполнить инструкции по установке роли.
  2. Скачайте нужную версию плагина uroboros и положите пакет в рабочую директорию.
  3. Проверьте наличие конфигурационного файла для плагина 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:

Import Uroboros dashboard

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

Внешний вид dashboard для Uroboros показан ниже:

Uroboros dashboard

Для настройки dashboard используйте параметры в верхней части экрана:

  • Источник данных — по умолчанию Prometheus
  • Кластер уробороса — имя кластера с Uroboros
  • Нода уробороса — данные с каких узлов кластера с Uroboros следует отображать (по умолчанию All, т.е. со всех узлов)
  • Кластер источник — имя кластера, с которого Uroboros будет забирать данные (значение по умолчанию — pustoe)
  • Кластер-приемник — имя кластера, в который Uroboros будет записывать данные (значение по умолчанию — porognee)
  • Игнорируемые спейсы — список спейсов, данные которых не будут скопированы

См. также: