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

Uroboros

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

Picodata Enterprise

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

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

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

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

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

Ограничения

  1. Источником может быть только кластер Tarantool Cartridge, где развернуты роли-сайдкары, включенные в поставку.
  2. Роли надо развернуть на всех Vshard-группах, которые планируется реплицировать.
  3. Источник должен быть запущен на форке Tarantool от компании Picodata, для которого должно быть включено расширение для WAL:
local ok, err = cartridge.cfg({}, {
    wal_ext = { new_old = true },
})

Состав плагина

Внутри архива с плагином находится структура вложенных директорий, включающая имя и версию плагина, а также его файлы:

└── uroboros
    └── 1.0.0
        ├── liburoboros.so
        ├── manifest.yaml
        └── migrations
            ├── 0001_state.db
            └── 0002_uroboros_state.db

Основная логика плагина обеспечивается разделяемой библиотекой liburoboros.so. Исходная конфигурация плагина задается в файле манифеста (manifest.yaml). Директория migrations зарезервирована для файлов миграций.

Подключение плагина

Содержимое архива с плагином следует распаковать в любую удобную директорию, которую после этого нужно будет указать как 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

Создайте файл с конфигурацией. Пример:

uroboros:
  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
    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: # vshard-группы, которые следует реплицировать
    - storage
    - group_1
    - group_2
  disabled_spaces: # таблицы из указанных выше vshard-group, которые реплицировать НЕ следует
    - ignored_space_1
    - ignored_space_2
  buckets_per_writer: 300 # степень параллелизации обработки. Не стоит изменять без консультации с разработчиками.
  reconnect_delay: 10 # задержка перед восстановлением коннекта к источнику

Подготовьте плейбук 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

См. также: