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

С версии 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