Облачная платформаAdvanced

Настройка Read/Write Splitting между Leader и Follower

Язык статьи: Русский
Показать оригинал
Страница переведена автоматически и может содержать неточности. Рекомендуем сверяться с английской версией.

По мере роста бизнеса и экспоненциального увеличения объёмов данных и запросов доступа, монолитная архитектура, в которой один кластер обрабатывает как запросы на запись, так и запросы на чтение, сталкивается с типичными проблемами, такими как конкуренция за ресурсы и перегрузка. Чтобы решить эти проблемы, CSS вводит read/write splitting между кластерами Elasticsearch.

Read/write splitting в Elasticsearch работает за счёт совместной работы кластеров Leader и Follower. Функция предоставляет следующие преимущества:

  • Разделённые нагрузки чтения и записи: кластер Leader обеспечивает производительность загрузки данных, тогда как кластеры Follower предоставляют масштабируемую, высококонкурентную производительность запросов. Конкуренция за ресурсы исчезает, а пиковые нагрузки снижаются.
  • Гибкая масштабируемость: кластеры записи и запросов могут масштабироваться горизонтально и независимо. Поддерживается развертывание кластеров в разных регионах.
  • Гарантия согласованности данных: данные могут синхронизироваться в реальном времени с низкой задержкой. Также поддерживается инкрементальная синхронизация.

Как работает функция

Рисунок 1 Read/write splitting


Как работает read/write splitting между кластерами Elasticsearch:

  1. Запись данных: пользователи отправляют запросы на запись, и кластер Leader обрабатывает эти запросы.
  2. Синхронизация данных.

    Кластер Leader синхронизирует изменения данных с кластером Follower через REST API. Поддерживаются два метода синхронизации:

    • Синхронизация указанного индекса.
    • Синхронизация совпадающих индексов, например индексов, соответствующих шаблону с подстановочным знаком.

  3. Обработка запросов: пользователи отправляют запросы на чтение. Кластер Follower обрабатывает эти запросы и возвращает результаты.

Figure 2 иллюстрирует, как работает разделение чтения/записи.

Figure 2 Как работает разделение чтения/записи


  • Разделение чтения и записи происходит, когда оба кластера доступны (слева): лидер обрабатывает записи, а follower обрабатывает запросы.
  • Переключение leader‑to‑follower при сбое leader (справа): если leader становится недоступным, follower автоматически повышается до leader, чтобы обеспечить непрерывность сервиса. Подробности см. Case: Leader/Follower Switchover.

Ограничения

  • Только кластеры Elasticsearch 7.6.2 и Elasticsearch 7.10.2 поддерживают разделение чтения/записи.
  • Версии кластеров leader и follower должны быть согласованы, иначе могут возникнуть ошибки.

Предварительные условия

Созданы два кластера Elasticsearch одной версии. Один функционирует как leader, другой — как follower. Кластер follower должен иметь возможность доступа к REST API (порт по умолчанию: 9200) кластера leader.

Вход в Kibana

Войдите в Kibana и перейдите на страницу выполнения команд. Кластеры Elasticsearch поддерживают несколько методов доступа. В данном разделе в качестве примера используется Kibana для описания процедур операций.

  1. Войдите в консоль управления CSS.
  2. В левой панели навигации выберите Clusters > Elasticsearch.
  3. В списке кластеров найдите целевой кластер и нажмите Kibana в столбце Operation, чтобы войти в консоль Kibana.
  4. В левой панели навигации выберите Dev Tools.

    Левая часть консоли — это command input box, а треугольный значок в её правом верхнем углу является execution button. Правая часть отображает результат выполнения.

Подключение кластеров Leader и Follower

  1. В follower cluster выполните следующую команду для настройки информации о leader cluster и их подключения, чтобы данные могли синхронизироваться от leader к follower.
    PUT /_cluster/settings
    {
    "persistent" : {
    "cluster" : {
    "remote.rest" : {
    "{leader_name}" : {
    "seeds" : [
    "http://10.0.0.1:9200",
    "http://10.0.0.2:9200",
    "http://10.0.0.3:9200"
    ] ,
    "username": "test",
    "password": "*****"
    }
    }
    }
    }
    }
    Table 1 Параметры подключения leader и follower кластеров

    Параметр

    Обязательно

    Тип

    Описание

    leader_name

    Yes

    String

    Пользовательское имя задачи конфигурации leader cluster, используемое для идентификации подключения leader cluster в последующей конфигурации синхронизации индексов.

    Разрешены только буквы (как заглавные, так и строчные), цифры, символы подчеркивания (_) и дефисы (-). Пробелы и специальные символы (например . # @) не допускаются.

    seeds

    Yes

    String

    Список адресов для доступа к кластеру‑лидеру.

    • Для кластера без режима безопасности или кластера в режиме безопасности, использующего HTTP, формат адреса: http://xx.xx.xx.xx:9200.
    • Для кластера в режиме безопасности, использующего HTTPS, формат адреса: https://xx.xx.xx.xx:9200.

    username

    Yes

    String

    Имя пользователя кластера‑лидера. Этот параметр требуется только при включённом режиме безопасности для кластера‑лидера.

    password

    Yes

    String

    Пароль кластера‑лидера. Этот параметр требуется только при включённом режиме безопасности для кластера‑лидера.

    Пример ответа:

    {
    "acknowledged" : true, //Whether the operation is successful
    "persistent" : {
    "cluster" : {
    "remote" : {
    "rest" : {
    "leader1" : {
    "seeds" : [
    "http://10.0.0.1:9200",
    "http://10.0.0.2:9200",
    "http://10.0.0.3:9200"
    ] ,
    "username": "test",
    "password": "*****"
    }
    }
    }
    }
    },
    "transient" : { }
    }
  2. После завершения настройки выполните следующую команду в кластере‑подписчике, чтобы проверить соединение между кластерами‑подписчиком и‑лидером:
    GET _remote/rest/info

    Пример ответа:

    {
    "leader1" : {
    "connected" : true //The two clusters are connected.
    }
    }

Настройка синхронизации индекса

  1. Создайте задачу синхронизации индекса. Существует два режима синхронизации: синхронизация указанного индекса и синхронизация соответствующих индексов.
    Table 2 Сравнение двух разных режимов синхронизации

    Режим синхронизации

    Синхронизация указанного индекса

    Синхронизация соответствующих индексов

    Логика синхронизации

    Укажите вручную индекс, который необходимо синхронизировать из кластера‑источника в кластер‑приёмник.

    Укажите шаблон соответствия индексов. Для каждого индекса (включая любые новые индексы, создаваемые в будущем), который соответствует этому шаблону в кластере‑источнике, система автоматически создаёт задачу, которая синхронизирует его с кластером‑приёмником.

    Сценарий

    Когда необходимо точно контролировать область синхронизации индексов (например, синхронизировать только критически важные индексы).

    Когда требуется синхронизировать множество динамически создаваемых индексов (например, индексы, автоматически именуемые по метке времени или предопределённым правилам).

    Изменение политики синхронизации

    Задачу синхронизации можно переотправить для того же индекса. Это позволяет изменить политику синхронизации.

    После запуска задачи синхронизации политику синхронизации изменить нельзя. Можно только создать новую задачу синхронизации индекса, соответствующую шаблону, чтобы заменить существующую. Процедура: Delete an existing task > Stopping Index Synchronization > Create a new task.

    Ниже описано, как настроить задачу каждого типа:

    • Синхронизация указанного индекса

      Выполните следующую команду в кластере‑подписчике, чтобы создать задачу синхронизации одного индекса.

      PUT start_remote_sync
      {
      "remote_cluster": "{leader_name}",
      "remote_index": "{index_name_leader}",
      "local_index": "{index_name_follower}",
      "settings": {
      "number_of_replicas": 4
      },
      "settings_sync_enable": true,
      "settings_sync_patterns": ["*"],
      "settings_sync_exclude_patterns": ["index.routing.allocation.*"],
      "alias_sync_enable": true,
      "state_sync_enable": true
      }
      Table 3 Параметры создания задачи синхронизации одного индекса

      Параметр

      Обязательно

      Тип

      Значение по умолчанию

      Описание

      remote_cluster

      Да

      String

      N/A

      Имя задачи конфигурации кластера‑лидера.

      Значение должно соответствовать значению leader_name, установленному в Connecting the Leader and Follower Clusters, например, leader1.

      remote_index

      Yes

      String

      N/A

      Имя индекса, который будет синхронизирован в кластере‑лидере.

      Введите имя существующего индекса в кластере‑лидере, например, data_leader.

      local_index

      Yes

      String

      N/A

      Имя индекса в кластере‑подписчике после синхронизации из кластера‑лидера, например, data_follower.

      Вы можете оставить его таким же, как remote_index, но это не рекомендуется. Это связано с тем, что использование одинаковых имён индексов в кластерах‑лидере и‑подписчике может вызвать путаницу при управлении индексами.

      settings

      No

      Map

      N/A

      Настройки индекса, которые необходимо изменить, и их целевые значения после синхронизации с кластером‑подписчиком.

      Этот параметр позволяет гибко настраивать параметры индекса (например, количество реплик и интервал обновления), чтобы они соответствовали аппаратным ресурсам или требованиям сервиса в кластере‑подписчике. Если параметр не задан, по умолчанию будут использоваться настройки индекса лидирующего кластера.

      Ключ и значение:

      • ключ: имя параметра, например, number_of_replicas.
      • значение: новое значение, например, 4.

      Следующие параметры нельзя изменять: number_of_shards, version.created, uuid, creation_date и soft_deletes.enabled.

      settings_sync_enable

      No

      Boolean

      false

      Определяет, следует ли периодически синхронизировать настройки индекса из лидирующего кластера.

      Допустимые значения:

      • true: Синхронизировать настройки индекса из лидирующего кластера.
      • false: Не синхронизировать настройки индекса из лидирующего кластера при их обновлении. Вместо этого сохранять исходные настройки.

      settings_sync_patterns

      No

      String

      * (соответствует всем настройкам)

      Настройки индекса Leader-cluster, которые будут синхронизированы в follower cluster.

      Укажите имена настроек, которые необходимо синхронизировать.

      • Одна настройка: введите имя настройки (например, index.max_regex_length).
      • Несколько настроек: введите несколько имен настроек и разделите их запятой (,), например, index.max_regex_length,index.max_refresh_listeners.
      • Подстановочный символ: используйте символ * для сопоставления нескольких настроек. Например, index* соответствует всем настройкам, имя которых начинается с index.

      Ограничения:

      • Этот параметр действует только когда settings_sync_enable установлен в true.
      • Если одна и та же настройка указана как в settings, так и в settings_sync_patterns, приоритет имеет настройка из settings_sync_patterns.
      • Следующие настройки нельзя синхронизировать в follower cluster: index.number_of_shards, index.version.created, index.uuid, index.creation_date, index.history.uuid, index.number_of_replicas, index.auto_expand_replicas и index.version.upgraded.

      settings_sync_exclude_patterns

      No

      String

      Null (исключает none)

      Настройки индекса leader‑cluster, не синхронизируемые с follower‑cluster.

      Укажите имена настроек, которые не будут синхронизированы.

      • Одна настройка: введите имя настройки (например, index.max_regex_length).
      • Несколько настроек: введите несколько имён настроек и разделите их запятой (,), например, index.max_regex_length,index.max_refresh_listeners.
      • Подстановочный символ: используйте символ * для сопоставления нескольких настроек. Например, index* соответствует всем настройкам, имя которых начинается с index.

      Ограничения:

      • Этот параметр действует только когда settings_sync_enable установлен в true.
      • Если одновременно настроены settings_sync_patterns и settings_sync_exclude_patterns, то будут синхронизированы только настройки, которые находятся в settings_sync_patterns, но не находятся в settings_sync_exclude_patterns, и будут синхронизированы с follower‑cluster.
      • Если индексы, которые вы планируете синхронизировать, включают холодные индексы, убедитесь, что в follower‑cluster есть узлы данных для холодных индексов. В противном случае синхронизация данных завершится неудачей. Для синхронизации холодных индексов с узлами данных в follower‑cluster требуется следующая конфигурация (в этом случае эти индексы перестают быть холодными в follower‑cluster):
        "settings_sync_exclude_patterns": ["index.routing.allocation.require.box_type"]

      alias_sync_enable

      No

      Boolean

      false

      Нужно ли периодически синхронизировать псевдонимы индексов из лидирующего кластера.

      Значение может быть:

      • true: Периодически синхронизировать псевдонимы индексов из лидирующего кластера.
      • false: Не выполнять периодическую синхронизацию псевдонимов индексов из лидирующего кластера.

      state_sync_enable

      No

      Boolean

      false

      Нужно ли периодически синхронизировать статус индекса из лидирующего кластера.

      Значение может быть:

      • true: Периодически синхронизировать статус индекса из лидирующего кластера.
      • false: Не выполнять периодическую синхронизацию статуса индекса из лидирующего кластера.

    • Синхронизация совпадающих индексов

      Выполните следующую команду в кластере‑подписчике для создания задачи синхронизации индексов по шаблону:

      PUT auto_sync/pattern/${pattern_name}
      {
      "remote_cluster": "{leader_name}",
      "remote_index_patterns": "{index_name}",
      "local_index_pattern": "{{remote_index}}-sync",
      "apply_exist_index": true,
      "settings": {
      "number_of_replicas": 4
      },
      "settings_sync_enable": true,
      "settings_sync_patterns": [
      "*"
      ],
      "settings_sync_exclude_patterns": [
      "index.routing.allocation.*"
      ],
      "alias_sync_enable": true,
      "state_sync_enable": true
      }
      Table 4 Параметры создания задачи синхронизации индексов по шаблону

      Параметр

      Обязательно

      Тип

      Значение по умолчанию

      Описание

      pattern_name

      Да

      String

      N/A

      Имя шаблона, соответствующего имени индекса.

      remote_cluster

      Да

      String

      N/A

      Имя задачи конфигурации лидирующего кластера.

      Значение должно быть согласовано со значением leader_name, установленным в Connecting the Leader and Follower Clusters, например, leader1.

      remote_index_patterns

      Yes

      String

      N/A

      Шаблон сопоставления индексов leader-cluster.

      • Один индекс: введите имя индекса, например, my_index.
      • Подстановочный символ: используйте подстановочный символ (*) для сопоставления нескольких индексов. Например, myindex* соответствует всем индексам, имя которых начинается с myindex.

      local_index_pattern

      Yes

      String

      N/A

      Шаблон именования индексов в follower cluster после синхронизации из leader cluster.

      Поддерживается замена шаблона. Например, если этот параметр установлен в {{remote_index}}-sync, имя индекса log1 изменяется на log1-sync после синхронизации.

      ВНИМАНИЕ:

      Если переключение leader/follower, вероятно, произойдёт, установите этот параметр в {{remote_index}}, чтобы обеспечить использование одинаковых имён индексов в кластерах leader и follower.

      apply_exist_index

      Yes

      Boolean

      true

      Нужно ли синхронизировать существующие индексы из кластера leader.

      Значение может быть:

      • true: Синхронизировать как существующие, так и новые индексы, при условии, что они соответствуют шаблону, который вы задаёте.
      • false: Синхронизировать только новые индексы. Пропуск синхронизации существующих индексов может привести к несоответствию данных между кластерами leader и follower. Определите, как установить этот параметр в соответствии с потребностями вашего сервиса.

      settings

      No

      Map

      N/A

      Настройки индекса, которые необходимо изменить, и их целевые значения после синхронизации в кластер follower.

      Этот параметр позволяет гибко настраивать параметры индекса (например, количество реплик и интервал обновления), чтобы они соответствовали аппаратным ресурсам или требованиям сервиса в кластере follower. Если не настроено, по умолчанию будут использованы параметры индекса кластера leader.

      Ключ и значение:

      • key: имя параметра, например, number_of_replicas.
      • value: его новое значение, например, 4.

      Следующие параметры нельзя изменить: number_of_shards, version.created, uuid, creation_date и soft_deletes.enabled.

      settings_sync_enable

      No

      Boolean

      false

      Определяет, следует ли периодически синхронизировать настройки индекса из ведущего кластера.

      Значение может быть:

      • true: Синхронизировать настройки индекса из ведущего кластера.
      • false: Не синхронизировать настройки индекса из ведущего кластера при их обновлении. Вместо этого сохранять исходные настройки.

      settings_sync_patterns

      No

      String

      * (соответствует всем настройкам)

      Настройки индекса кластера‑лидера, которые будут синхронизированы с кластером‑фолловером.

      Укажите имена настроек, которые необходимо синхронизировать.

      • A single setting: Enter the setting name (for example, index.max_regex_length).
      • Multiple settings: Enter multiple setting names and separate them with a comma (,), for example, index.max_regex_length,index.max_refresh_listeners.
      • Wildcard: Use the wildcard * to match multiple settings. For example, index* matches all settings whose name starts with index.

      Ограничения:

      • This parameter takes effect only when settings_sync_enable is set to true.
      • If the same setting is configured both in settings and settings_sync_patterns, the setting in settings_sync_patterns takes effect.
      • Следующие настройки нельзя синхронизировать с кластером‑фолловером: index.number_of_shards, index.version.created, index.uuid, index.creation_date, index.history.uuid, index.number_of_replicas, index.auto_expand_replicas и index.version.upgraded.

      settings_sync_exclude_patterns

      No

      String

      Null (не исключает ничего)

      Настройки индекса кластера‑лидера, которые не будут синхронизированы с кластером‑фолловером.

      Укажите имена настроек, которые не следует синхронизировать.

      • Одна настройка: введите имя настройки (например, index.max_regex_length).
      • Несколько настроек: введите несколько имен настроек и разделите их запятой (,), например, index.max_regex_length,index.max_refresh_listeners.
      • Подстановочный символ: используйте символ * для сопоставления нескольких настроек. Например, index* соответствует всем настройкам, имя которых начинается с index.

      Ограничения:

      • Этот параметр действует только когда settings_sync_enable установлен в значение true.
      • Если одновременно настроены settings_sync_patterns и settings_sync_exclude_patterns, то будут синхронизированы только настройки, которые находятся в settings_sync_patterns, но не находятся в settings_sync_exclude_patterns, будут синхронизированы в follower cluster.
      • Если индексы, которые вы планируете синхронизировать, включают холодные индексы, убедитесь, что в follower cluster есть узлы холодных данных. В противном случае синхронизация данных завершится неудачей. Для синхронизации холодных индексов с узлами данных в follower cluster требуется следующая конфигурация (в этом случае эти индексы перестают быть холодными индексами в follower cluster):
        "settings_sync_exclude_patterns": ["index.routing.allocation.require.box_type"]

      alias_sync_enable

      No

      Boolean

      false

      Определяет, следует ли периодически синхронизировать псевдонимы индексов из leader cluster.

      Значение может быть:

      • true: Периодически синхронизировать псевдонимы индексов из leader cluster.
      • false: Не выполнять периодическую синхронизацию псевдонимов индекса из ведущего кластера.

      state_sync_enable

      No

      Boolean

      false

      Определяет, следует ли периодически синхронизировать статус индекса из ведущего кластера.

      Допустимые значения:

      • true: Периодически синхронизировать статус индекса из ведущего кластера.
      • false: Не выполнять периодическую синхронизацию статуса индекса из ведущего кластера.
  2. Проверьте статус синхронизации индекса, чтобы подтвердить успешную настройку.

    После включения синхронизации индекс в кластере‑подписчике становится только для чтения. Синхронизация выполняется периодически для обеспечения согласованности данных. Интервал синхронизации по умолчанию составляет 30 секунд. Чтобы изменить его, см. Changing the Index Synchronization Interval.

    Выполните следующую команду в кластере‑подписчике, чтобы получить статус синхронизации указанного индекса:

    GET {index_name}/sync_stats

    Пример вывода приведён ниже:

    {
    "indices" : {
    "data1_follower" : {
    "shards" : {
    "0" : [
    {
    "primary" : false, // Whether it is a primary shard
    "total_synced_times" : 27, // Total synchronization times
    "total_empty_times" : 25, // Total number of times when no data is synchronized between the leader and follower clusters because they have identical shards and data
    "total_synced_files" : 4, // Number of synchronized files
    "total_synced_bytes" : 3580, // Total size of synchronized files
    "total_paused_nanos" : 0, //Duration of synchronization pauses due to traffic throttling
    "total_paused_times" : 0, //Number of synchronization pauses due to traffic throttling
    "current" : {
    "files_count" : 0, //Number of files that are being synchronized
    "finished_files_count" : 0, //Number of files that have been synchronized
    "bytes" : 0, //Size of files that are being synchronized
    "finished_bytes" : 0 //Size of files that have been synchronized
    }
    },
    {
    "primary" : true, // Whether it is a primary shard
    "total_synced_times" : 28, // Total synchronization times
    "total_empty_times" : 26, // Total number of times when no data is synchronized between the leader and follower clusters because they have identical shards and data
    "total_synced_files": 20, // Number of synchronized files
    "total_synced_bytes": 17547, // Total size of synchronized files
    "total_paused_nanos" : 0, //Duration of synchronization pauses due to traffic throttling
    "total_paused_times" : 0, //Number of synchronization pauses due to traffic throttling
    "current" : {
    "files_count" : 0, //Number of files that are being synchronized
    "finished_files_count" : 0, //Number of files that have been synchronized
    "bytes" : 0, //Size of files that are being synchronized
    "finished_bytes" : 0 //Size of files that have been synchronized
    }
    }
    ]
    }
    }
    }
    }
  3. Включить принудительную синхронизацию индекса.

    По умолчанию в архитектуре разделения чтения/записи система определяет необходимость синхронизации metadata на основе количества документов в индексах ведущего кластера. Если ведущий кластер только обновляет существующие документы, но количество документов остаётся неизменным, эти обновления не будут синхронизированы в кластер‑подписчик.

    Для принудительной синхронизации метаданных индекса из лидирующего кластера в кластер‑подписчик в каждом цикле синхронизации (даже если количество документов остаётся прежним) выполните следующую команду:

    PUT _cluster/settings
    {
    "persistent": {
    "remote_sync.force_synchronize": true
    }
    }

Управление синхронизацией индексов по шаблону

Вы можете выполнять запросы и удалять существующие задачи синхронизации индексов по шаблону.

  • Query существующие задачи синхронизации индексов по шаблону.
    • Выполните следующую команду в кластере‑подписчике, чтобы запросить существующие задачи синхронизации индексов по шаблону:
      GET auto_sync/pattern
    • Выполните следующую команду в кластере‑подписчике, чтобы запросить детали указанной задачи синхронизации индексов по шаблону:
      GET auto_sync/pattern/{pattern_name}

    Пример ответа:

    {
    "patterns" : [
    {
    "name" : "pattern1",
    "pattern" : {
    "remote_cluster" : "leader",
    "remote_index_patterns" : [
    "log*"
    ],
    "local_index_pattern" : "{{remote_index}}-sync",
    "settings" : { }
    }
    }
    ]
    }
  • Delete существующую задачу синхронизации индексов по шаблону.
    Caution

    Удаление задачи синхронизации индексов по шаблону только предотвращает создание новых задач синхронизации для совпадающих индексов. Это не останавливает уже созданные задачи синхронизации. Чтобы остановить эти задачи, выполните вручную Stopping Index Synchronization.

    1. Выполните следующую команду в кластере‑подписчике, чтобы удалить указанную задачу синхронизации индексов по шаблону:
      DELETE auto_sync/pattern/{pattern_name}
    2. Выполните следующую команду, чтобы запросить список задач синхронизации индексов по шаблону и подтвердить успешное удаление.
      GET auto_sync/pattern

Изменение интервала синхронизации индекса

Интервал синхронизации индекса между лидирующим и кластером‑подписчиком по умолчанию составляет 30 секунд. Чтобы изменить его для указанного индекса, выполните следующую команду:

PUT {index_name}/_settings
{
"index.remote_sync.sync_interval": "2s"
}
Table 5 Параметры изменения интервала синхронизации индекса

Параметр

Тип

Значение по умолчанию

Описание

index_name

String

N/A

Указывает один или несколько индексов.

  • Один индекс: введите имя индекса, например, my_index.
  • Несколько индексов: введите несколько имен индексов и используйте запятую (,) для их разделения, например, my_index1,my_index2.
  • Подстановочный символ: используйте подстановочный символ (*) для совпадения с несколькими индексами. Например, myindex* указывает все индексы, имя которых начинается с myindex.

index.remote_sync.sync_interval

String

30s (recommended)

Интервал синхронизации индекса.

Формат значения: число + единица измерения

  • Number: натуральное число
  • Unit: nanos (nanosecond), micros (microsecond), ms (millisecond), s (second), m (minute), h (hour), or d (day)

Минимальное значение: 1s

Вы можете уменьшить этот интервал, если приоритетом является своевременность данных, но это увеличит нагрузку на CPU кластера.

Изменение скорости синхронизации

Вы можете изменить скорость синхронизации данных между лидирующим и ведомым кластерами, настроив некоторые параметры уровня кластера.

Ниже приведён пример:

PUT _cluster/settings
{
"persistent": {
"remote_sync.chunk_size": "2MB",
"remote_sync.max_concurrent_file_chunks": 20,
"remote_sync.max_bytes_per_sec": "100MB"
}
}
Table 6 Параметры изменения скорости синхронизации индекса

Parameter

Type

Default Value

Description

remote_sync.chunk_size

String

1MB

Размер отдельного фрагмента для синхронизации индекса.

Формат значения: число + единица измерения

  • Число: натуральное число
  • Единица: B, K, KB, M, MB, G, GB, T, TB, P или PB (без учёта регистра)

Минимальное значение: 1 MB (значение ниже этого снижает эффективность)

remote_sync.max_concurrent_file_chunks

Integer

10

Максимальное количество фрагментов документов, синхронизируемых одновременно на одном узле.

Диапазон значений: от 1 до 100.

Установите этот параметр, исходя из доступной пропускной способности узла и ресурсов CPU.

remote_sync.max_bytes_per_sec

String

40MB

Максимальный объём данных, передаваемых в секунду на одном узле во время синхронизации. Вы можете установить этот параметр, чтобы предотвратить исчерпание сетевой пропускной способности задачами синхронизации данных.

Формат значения: число + единица измерения

  • Number: натуральное число
  • Unit: B, K, KB, M, MB, G, GB, T, TB, P, or PB (без учёта регистра)

Значение 0 указывает отсутствие ограничения.

Когда нагрузка запросов вашего кластера низка, вы можете увеличить значение, но это может увеличить сетевую нагрузку.

Stopping Index Synchronization

Выполните следующую команду в follower cluster, чтобы немедленно остановить задачу синхронизации отдельного индекса:

PUT {index_name}/stop_remote_sync

После выполнения этой команды:

  • Любые последующие изменения индекса в leader cluster больше не будут синхронизироваться с follower cluster.
  • Индекс в follower cluster будет снят с режима только для чтения, что позволит записывать в него новые данные.
Caution

Остановить Index synchronization нельзя, пока для индекса создаётся snapshot. Чтобы остановить синхронизацию, необходимо дождаться завершения создания snapshot.

Case: Leader/Follower Switchover

Когда leader cluster выходит из строя, вы можете выполнить leader/follower switchover, чтобы follower cluster взял на себя обслуживание и обеспечить непрерывность сервиса. Чтобы это происходило плавно и гарантировать согласованность данных, используйте одинаковые имена индексов в leader и follower кластерах при настройке Index synchronization.

  1. Определите режим Index synchronization между leader и follower кластерами.

    Выполните следующую команду в follower cluster, чтобы проверить задачи синхронизации индексов, соответствующие шаблону:

    GET auto_sync/pattern

    • Если таких задач нет, синхронизация выполняется для указанных индексов между leader и follower кластерами. В этом случае перейдите к 3.
    • Если такие задачи существуют, синхронизация индексов между кластерами leader и follower основана на шаблоне соответствия индексов. В этом случае выполните следующий шаг.
  2. Выполните следующую команду в кластере follower, чтобы удалить указанную задачу синхронизации индексов, соответствующую шаблону:
    DELETE auto_sync/pattern/{pattern_name}
  3. Остановите синхронизацию индексов в кластере follower и переключите чтение и запись на него. Убедитесь, что кластер follower может обрабатывать запросы независимо.

    Выполните следующую команду в кластере follower, чтобы остановить задачи синхронизации отдельных индексов для указанных индексов:

    PUT */stop_remote_sync
  4. После восстановления кластера leader настройте информацию о кластере follower в кластере leader и снова подключите кластеры leader и follower. Подробности см. Connecting the Leader and Follower Clusters.
  5. В кластере leader выполните Configuring Index Synchronization для синхронизации данных из кластера follower в кластер leader, а затем выполните переключение leader/follower для возврата.