Введение в репликацию для индексов перколяторов

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

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

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

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

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

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

Требования:

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

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

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

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

Дополнительно:

  • server_id - уникальный номер для каждого узла, используемый для инициализации UUID, если он отсутствует, демон сгенерирует его на основе 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) могут использовать обычное имя индекса.

Что дальше?

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

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

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

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

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