⚠️ Эта страница автоматически переведена, и перевод может быть несовершенным.

Introduction to replication for percolate indexes

Начиная с версии 2.8.2 доступна новая крупная функция — репликация для percolate индексов.

Репликация основана на библиотеке Galera (также используемой в форке MySQL от Percona и MariaDB). Мы посчитали, что лучше использовать проверенное решение, чем изобретать велосипед и строить всё с нуля, что заняло бы гораздо больше времени.

Почему только для percolate индексов? Percolate индекс — это модифицированный Real-Time индекс, который легче манипулировать, поэтому он лучше подходит для первоначального тестирования. Но следите за новостями — следующим шагом будет добавление поддержки репликации для Real-Time индексов!

Как это меня касается, если я не хочу использовать репликацию? Функция репликации включена в официальные пакеты, но если вы не планируете её использовать, ничто не помешает вам обновиться до последней версии Manticore. Если вы собираете Manticore самостоятельно, требования к сборке изменились. Обратитесь к документации за подробностями.
Кластеры репликации основаны на индексах. После определения кластера вы можете добавить к нему percolate индексы.
Репликация является мульти-мастерной и синхронной. Это означает, что вы можете писать в любой узел, и изменения сразу же распространятся на все узлы кластера.

<img src="manticore-replication-optimized.webp" alt="img">

Настройка репликации

Требования:

    • Порт API listen должен быть открыт на выделенном интерфейсе (не 0.0.0.0).

      • Диапазон портов, открытых на выделенном интерфейсе для репликации. Рекомендуется использовать как минимум 2 порта на кластер.

      • Открытый порт SphinxQL для выполнения команд по настройке узла.

      • data_dir должен быть указан в конфигурации searchd. Это необходимо для временных данных репликации.

Опционально:

  • server_id — уникальный номер для каждого узла, используемый для инициализации UUID; если не указан, daemon сгенерирует его на основе MAC-адреса

Конфигурация searchd должна выглядеть так:

searchd {
listen = 9306:mysql41
listen = my_ip1:9312
listen = my_ip1:9350-9459:replication
...
data_dir = /var/lib/manticore/data_dir
server_id = 1
...
}

На первом узле мы подключаемся к нему с помощью SphinxQL и создаём кластер:

mysql> CREATE CLUSTER test;

Альтернативно вы можете указать узлы, которые будут подключаться к новому кластеру. Помимо IP необходимо также указать порт API.

mysql> CREATE CLUSTER test  'my_ip1:9312,my_ip2:9312,my_ip3:9312' as nodes;

Определённый список узлов используется при перезапуске кластера. Если узлы не были указаны при создании или добавлены новые узлы, необходимо выполнить команду ALTER CLUSTER cluster_name UPDATE nodes, чтобы обновить список всех активных узлов; иначе при перезапуске узлы, отсутствующие в списке, придётся добавлять обратно в кластер вручную.

Далее мы подключаемся к другим узлам и присоединяем их к кластеру, связывая их с существующим узлом (используя его IP и порт API):

mysql> JOIN CLUSTER test AT 'my_ip1:9312';

На данный момент кластер определён, и следующим шагом является добавление в него индекса (или нескольких). Это можно сделать с любого узла:

mysql> ALTER CLUSTER test ADD pq1;

Чтобы добавить новые сохранённые запросы в индекс pq1, наш обычный INSERT‑запрос требует небольшого изменения: необходимо добавить префикс имени индекса с именем кластера:

mysql> INSERT INTO test:pq1 VALUES('samsung');

Префикс кластера требуется только для операторов записи (INSERT, REPLACE, DELETE, TRUNCATE). Операторы чтения (CALL PQ, SELECT и DESCRIBE) могут использовать обычное имя индекса.

Что дальше?

Для получения более подробной информации обо всех параметрах репликации см. документацию .

В наших онлайн‑курсах вы можете найти курс введение в репликацию и простой курс по восстановлению после отказа .

На момент написания этой статьи репликация для RealTime индексов находится в разработке.

Установить Manticore Search

Установить Manticore Search