Uroboros¶
В данном разделе приведены сведения о Uroboros, плагине для СУБД Picodata.
Picodata Enterprise
Функциональность плагина доступна только в коммерческой версии Picodata.
Общие сведения¶
Плагин Uroboros используется для однонаправленной асинхронной репликации данных между двумя кластерами, созданных при помощи фреймворка Vshard.
Основные задачи Uroboros:
- перенос кластера на новую площадку без простоя
- обеспечение отказоустойчивости путем репликации одного кластера в другой
Ограничения¶
- Источником может быть только кластер Tarantool Cartridge, где развернуты роли-сайдкары, включенные в поставку.
- Роли надо развернуть на всех Vshard-группах, которые планируется реплицировать.
- Источник должен быть запущен на форке 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¶
Подготовка¶
- Изучите документацию по развертыванию кластера 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
Создайте файл с конфигурацией. Пример:
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
См. также: