Ouroboros¶
В данном разделе приведены сведения о Ouroboros, плагине для СУБД Picodata.
Picodata Enterprise
Функциональность плагина доступна только в коммерческой версии Picodata.
Общие сведения¶
Плагин Ouroboros используется для однонаправленной асинхронной логической репликации данных между двумя кластерами Picodata.
Основные задачи Ouroboros:
- перенос кластера на новую площадку без простоя
- обеспечение отказоустойчивости путем репликации одного кластера в другой
Принцип работы¶
Для использования Ouroboros требуются два кластера: кластер источник и кластер-приемник. Далее необходимо развернуть кластер Picodata с включенным плагином Ouroboros. В этом кластере может быть как один инстанс, так и несколько — число инстансов определяет то, сколько исполнителей (процессов копирования) будет выполняться одновременно.
При условии корректной настройки подключения к кластерам Ouroboros будет переносить данные из кластера-источника в кластер-приемник с помощью логической репликации (копирования журналов изменений). Этот способ предоставляет необходимую гибкость (позволяет работать с отдельными таблицами) и учитывает семантику данных.
Схема работы плагина показана ниже:
Плагин учитывает топологию кластеров, с которыми он работает. Каждый исполнитель плагина Ouroboros реплицирует один или более репликасетов из кластера-источника. На исполнителе создается набор файберов, каждый из которых обрабатывает свою связку <репликасет источник + диапазон бакетов>. Таким образом, получается паралелльная отправка в кластер-приемник записей из различных бакетов. При этом сохраняется упорядоченность записей и изменений в рамках каждого бакета (не возникает "состояния гонки").
Состав плагина¶
Внутри архива с плагином находится структура вложенных директорий, включающая имя и версию плагина, а также его файлы:
└── ouroboros
└── 1.1.0
├── deps.toml # файл со списком зависимостей плагина
├── libouroboros.so # основная часть плагина, разделяемая библиотека
├── manifest.yaml # манифест, задающий исходную конфигурацию плагина
├── migrations # файлы миграций плагина
│ ├── 0001_state.db
│ ├── 0002_ouroboros_state.db
│ └── 0003_ouroboros_bucket.db
└── ouroboros-cli # сверяет количество записей между кластерами по таблицам и бакетам
Конфигурация плагина¶
Основные параметры плагина включают в себя:
- имя отдельного пользователя (должно совпадать на кластере-источнике и кластере-приемнике), под которым Ouroboros будет подключаться
- группа параметров для подключения к кластеру-источнику (producer) и кластеру-приемнику (consumer)
- группа параметров по настройке репликации (группы шардирования, исключаемые спейсы (таблицы), настройки параллелизма, переподключения и т.д.)
Исходная конфигурация плагина определяется файлом-манифестом:
manifest.yaml
description: Plugin tnt clusters replication
name: ouroboros
version: 1.1.0
services:
- name: ouroboros
description: ouroboros descr
default_configuration:
password: password
producer:
user_url: http://localhost:9001/ouroboros/api/v1/user
topology_url: http://localhost:9001/ouroboros/api/v1/topology
space_info_url: http://localhost:9001/ouroboros/api/v1/space
version_url: http://localhost:9001/ouroboros/api/v1/version
consumer:
type: tarantool
attributes:
space_info_url: http://localhost:9002/ouroboros/api/v1/space
user_url: http://localhost:9002/ouroboros/api/v1/user
topology_url: http://localhost:9002/ouroboros/api/v1/topology
version_url: http://localhost:9002/ouroboros/api/v1/version
enabled_groups: ["default"]
disabled_spaces: []
buckets_per_writer: 1000
reconnect_delay: 10
reader_buffer_size: 10000
writer_buffer_size: 1000
skip_ddl_replication: false
small_packet_max_size: 1024
small_packets_pool_size: 5000
large_packets_pool_size: 500
migration:
- migrations/0001_state.db
- migrations/0002_ouroboros_state.db
- migrations/0003_ouroboros_bucket.db
Пользовательская конфигурация плагина определяется отдельным конфигурационным файлом для сервиса плагина:
ouroboros:
producer: # настройки кластера-источника
space_info_url: "http://<source_address>/ouroboros/api/v1/space"
user_url: "http://<source_address>/ouroboros/api/v1/user"
topology_url: "http://<source_address>/ouroboros/api/v1/topology"
consumer: # настройки приемника
type: "tarantool" # может быть tarantool, или, в будущем kafka
attributes:
space_info_url: "http://<destination_address>/ouroboros/api/v1/space"
user_url: "http://<destination_address>/ouroboros/api/v1/user"
topology_url: "http://<destination_address>/ouroboros/api/v1/topology"
enabled_groups: # vshard-группы, которые следует реплицировать
- index
- kafka
- storage
disabled_spaces: # спейсы (таблицы) из указанных выше vshard-group, которые реплицировать НЕ следует
- notify_storage_vinyl
- distributed_index_queue_vinyl
- distributed_index_queue_memtx
- _repair_queue_v2
- _tmp_event_storage
- notify_storage_memtx
- event_storage
buckets_per_writer: 300 # степень параллелизации обработки. Не стоит изменять без консультации с разработчиками.
reconnect_delay: 10 # задержка перед восстановлением коннекта к источнику
skip_ddl_replication: false # отключить репликацию DDL
# технические параметры плагина
reader_buffer_size: 10000
writer_buffer_size: 1000
small_packet_max_size: 1024
small_packets_pool_size: 5000
large_packets_pool_size: 500
Для изменения настроек уже запущенного плагина используйте SQL-команду ALTER PLUGIN ...
См. также:
Подключение плагина¶
Содержимое архива с плагином следует распаковать в любую удобную
директорию, которую после этого нужно будет указать как PLUGIN_DIR
для
инстанса Picodata.
При запуске одного инстанса из командной строки директорию плагина можно указать с помощью параметра:
picodata run --plugin-dir=<PLUGIN-DIR> ...
Однако, для полноценной использования плагина рекомендуется запустить кластер с помощью роли Ansible.
После запуска Picodata с поддержкой плагинов в заданной директории подключитесь к административной консоли инстанса Picodata.
Установите плагин, добавьте его к тиру и включите его с помощью следующих SQL-команд:
CREATE PLUGIN ouroboros 1.1.0;
ALTER PLUGIN ouroboros MIGRATE TO 1.1.0;
ALTER PLUGIN ouroboros 1.1.0 ADD SERVICE ouroboros TO TIER default;
ALTER PLUGIN ouroboros 1.1.0 ENABLE;
Проверка с помощью Ansible¶
Подготовка¶
- Изучите документацию по развертыванию кластера Picodata. Выполнить инструкции по установке роли.
- Скачайте нужную версию плагина
ouroboros
и положите пакет в рабочую директорию. - Проверьте наличие конфигурационного файла для плагина
ouroboros-config.yml
, проверьте настройки в нем (см. ниже).
Примечание
На сервере, с которого будет происходить установка, необходим Ansible и доступ на серверы кластера с повышением привилегий.
Установка окружения¶
Создайте файл с описанием кластера согласно руководству по развертыванию кластера. Ниже показан пример для 4-х серверов, расположенных в 3-х группах (DC1, DC2 и DC3). Группа — отдельный домен отказа.
---
all:
vars:
user: username # имя пользователя, под которым будут запущены процессы picodata
group: groupname # группа пользователя, под которой будут запущены процессы picodata
password: "<password>"
cluster_name: ouroboros
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:
ouroboros:
path: "ouroboros_1.1.0.tar.gz"
services:
tiers:
- default
config: "ouroboros-config.yml"
tiers: # описание тиров
arbiter: # имя тира
replicaset_count: 1 # количество репликасетов
replication_factor: 1 # фактор репликации
config:
memtx:
memory: 64M # количество памяти, выделяемое каждому инстансу тира
host_groups:
- ARBITERS # целевая группа серверов для установки инстанса
default: # имя тира
replicaset_count: 3 # количество репликасетов
replication_factor: 3 # фактор репликации
bucket_count: 16384 # количество бакетов в тире
config:
memtx:
memory: 71M # количество памяти, выделяемое каждому инстансу тира
host_groups:
- STORAGES # целевая группа серверов для установки инстанса
admin_password: "<password>"
property:
auto_offline_timeout: 30
GROUP1: # Группа серверов (failure_domain)
hosts: # серверы в группе
server-1-1: # имя сервера в инвентарном файле
ansible_host: '192.168.19.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
host_group: 'STORAGES' # определение целевой группы серверов для установки инстансов
server-1-2: # имя сервера в инвентарном файле
ansible_host: '192.168.19.22' # IP-адрес или fqdn если не совпадает с предыдущей строкой
host_group: 'ARBITERS' # определение целевой группы серверов для установки инстансов
GROUP2: # Группа серверов (failure_domain)
hosts: # серверы в группе
server-2-1: # имя сервера в инвентарном файле
ansible_host: '192.168.20.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
host_group: 'STORAGES' # определение целевой группы серверов для установки инстансов
GROUP3: # Группа серверов (failure_domain)
hosts: # серверы в группе
server-3-1: # имя сервера в инвентарном файле
ansible_host: '192.168.21.21' # IP-адрес или fqdn если не совпадает с предыдущей строкой
host_group: 'STORAGES' # определение целевой группы серверов для установки инстансов
Создайте файл с конфигурацией.
Подготовьте плейбук picodata.yml
:
---
- name: Deploy Picodata cluster
hosts: all
become: true
tasks:
- name: Import picodata-ansible role
ansible.builtin.import_role:
name: picodata-ansible
В результате в рабочем каталоге должно быть 4 файла:
- ouroboros.yml
- picodata.yml
- ouroboros_config.yml
- ouroboros_xxxxx.tar.gz
Запустите раскатку Ouroboros:
ansible-playbook -i ouroboros.yml picodata.yml
Мониторинг показателей плагина¶
Процесс работы плагина Ouroboros можно удобно отслеживать в графическом интерфейсе Grafana, для которого Picodata поставляет файл конфигурации (dashboard).
Для настройки мониторинга импортируйте dashboard с данными Ouroboros. Для
этого понадобится файл dashboard.grafana.json, который следует
добавить в меню Dashboards
> New
> Import
:
Панель dashboard для плагина Ouroboros отображает ряд графиков, на которых отражена пропускная способность кластера с Ouroboros, статистика по скопированным пакетам, а также данные по количеству записей в кластере-источнике и кластере-приемнике.
Внешний вид dashboard для Ouroboros показан ниже:
Для настройки dashboard используйте параметры в верхней части экрана:
- Источник данных — по умолчанию
Prometheus
- Кластер уробороса — имя кластера с Ouroboros
- Нода уробороса — данные с каких узлов кластера с Ouroboros следует отображать (по умолчанию
All
, т.е. со всех узлов) - Кластер источник — имя кластера, с которого Ouroboros будет забирать данные (значение по умолчанию —
pustoe
) - Кластер-приемник — имя кластера, в который Ouroboros будет записывать данные (значение по умолчанию —
porognee
) - Игнорируемые спейсы — список спейсов, данные которых не будут скопированы
См. также: