Spec-Zone.ru › MariaDB

Полусинхронная репликация

Описание

Стандартная репликация MariaDB является асинхронной, но MariaDB также предоставляет опцию полусинхронной репликации.

При обычной асинхронной репликации реплики запрашивают события из двоичного журнала первичного сервера всякий раз, когда реплики готовы. Первичный сервер не ожидает подтверждения от реплики о получении события.

При полностью синхронной репликации все реплики должны подтвердить, что они получили события. См. Galera Cluster.

Полусинхронная репликация ожидает подтверждения только от одной реплики о получении и записи событий.

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

В MariaDB 10.3 и более поздних версиях полусинхронная репликация встроена в сервер и больше не является плагином, поэтому её можно сразу включить в этих версиях. Это уменьшает некоторые накладные расходы и улучшает производительность. См. MDEV-13073 для получения дополнительной информации.

В MariaDB 10.2 и более ранних версиях полусинхронная репликация требует установки плагина как на первичный, так и на реплицируемый сервер, прежде чем её можно будет включить.

Установка плагина

MariaDB начиная с 10.3.3

В MariaDB 10.3.3 и более поздних версиях функция полусинхронной репликации встроена в сервер MariaDB и больше не предоставляется плагином. Это означает, что установка плагина не поддерживается в этих версиях. В MariaDB 10.3.3 и более поздних версиях вы можете сразу перейти к Включению полусинхронной репликации.

Плагин полусинхронной репликации на самом деле представляет собой два разных плагина — один для первичного, а другой для реплики. Общие библиотеки для обоих плагинов включены в MariaDB. Хотя общие библиотеки плагинов, распространяемые с MariaDB по умолчанию, плагин фактически не устанавливается MariaDB по умолчанию до MariaDB 10.3.3. Существует два способа установки плагина с MariaDB.

Первый метод позволяет установить плагин без перезапуска сервера. Вы можете установить плагин динамически, выполнив INSTALL SONAME или INSTALL PLUGIN.

Например, если это первичный сервер:

INSTALL SONAME 'semisync_master';

Или если это реплика:

INSTALL SONAME 'semisync_slave';

Второй метод позволяет указать серверу загрузить плагин при запуске. Плагин можно установить таким образом, указав опции --plugin-load или --plugin-load-add. Это можно указать в качестве аргумента командной строки для mysqld или в соответствующей группе опций сервера в группе опций в файле файле опций.

Например, если это первичный сервер:

[mariadb]
...
plugin_load_add = semisync_master

Или если это реплика:

[mariadb]
...
plugin_load_add = semisync_slave

Удаление плагина

MariaDB начиная с 10.3.3

В MariaDB 10.3.3 и более поздних версиях функция полусинхронной репликации встроена в сервер MariaDB и больше не предоставляется плагином. Это означает, что удаление плагина не поддерживается в этих версиях.

Вы можете удалить плагин динамически, выполнив UNINSTALL SONAME или UNINSTALL PLUGIN.

Например, если это первичный сервер:

UNINSTALL SONAME 'semisync_master';

Или если это реплика:

UNINSTALL SONAME 'semisync_slave';

Если вы установили плагин, указав опции --plugin-load или --plugin-load-add в соответствующей группе опций сервера в группе опций в файле опций, то эти опции следует удалить, чтобы предотвратить загрузку плагина при следующем запуске сервера.

Включение полусинхронной репликации

Полусинхронную репликацию можно включить, установив соответствующие системные переменные на первичном и реплицируемом сервере.

Если серверу необходимо переключаться между ролью первичного и реплицируемого сервера, вы можете включить обе системные переменные первичного и реплицируемого серверов на сервере. Например, это может потребоваться, если используется MariaDB MaxScale для включения автоматического переключения или переключения ролей с MariaDB Monitor.

Включение полусинхронной репликации на первичном сервере

Полусинхронную репликацию на первичном сервере можно включить, установив системную переменную rpl_semi_sync_master_enabled в значение ON. Её можно установить динамически с помощью SET GLOBAL. Например:

SET GLOBAL rpl_semi_sync_master_enabled=ON;

Её также можно установить в группе опций сервера в файле опций до запуска сервера. Например:

[mariadb]
...
rpl_semi_sync_master_enabled=ON

Включение полусинхронной репликации на реплике

Полусинхронную репликацию на реплике можно включить, установив системную переменную rpl_semi_sync_slave_enabled в значение ON. Её можно установить динамически с помощью SET GLOBAL. Например:

SET GLOBAL rpl_semi_sync_slave_enabled=ON;

Её также можно установить в группе опций сервера в файле опций до запуска сервера. Например:

[mariadb]
...
rpl_semi_sync_slave_enabled=ON

Если полусинхронная репликация включена на сервере, когда потоки репликации уже работали, необходимо перезапустить поток ввода/вывода реплики, чтобы позволить реплике зарегистрироваться как полусинхронная реплика при подключении к первичному серверу. Например:

STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;

Если этого не сделать, а поток реплики уже запущен, он будет продолжать использовать асинхронную репликацию.

Настройка таймаута первичного сервера

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

[Warning] Timeout waiting for reply of binlog (file: mariadb-1-bin.000002, pos: 538), semi-sync up to file , position 0.
[Note] Semi-sync replication switched OFF.

В этом случае системная переменная Rpl_semi_sync_master_status переключится на значение OFF.

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

[Note] Semi-sync replication switched ON with replica (server_id: 184137206) at (mariadb-1-bin.000002, 215076)

В этом случае системная переменная Rpl_semi_sync_master_status переключится на значение ON.

Количество раз, когда полусинхронная репликация была отключена, можно проверить, посмотрев значение системной переменной Rpl_semi_sync_master_no_times.

Если в вашей среде наблюдается много таких таймаутов, возможно, вам потребуется изменить период таймаута. Период таймаута можно изменить, установив системную переменную rpl_semi_sync_master_timeout. Её можно установить динамически с помощью SET GLOBAL. Например:

SET GLOBAL rpl_semi_sync_master_timeout=20000;

Её также можно установить в группе опций сервера в файле опций до запуска сервера. Например:

[mariadb]
...
rpl_semi_sync_master_timeout=20000

Чтобы определить хорошее значение для системной переменной rpl_semi_sync_master_timeout, вы можете посмотреть значения системных переменных Rpl_semi_sync_master_net_avg_wait_time и Rpl_semi_sync_master_tx_avg_wait_time.

Настройка точки ожидания первичного сервера

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

Точка ожидания настраивается системной переменной rpl_semi_sync_master_wait_point. Доступные значения:

  • AFTER_SYNC
  • AFTER_COMMIT

Её можно установить динамически с помощью SET GLOBAL. Например:

SET GLOBAL rpl_semi_sync_master_wait_point='AFTER_SYNC';

Её также можно установить в группе опций сервера в файле опций до запуска сервера. Например:

[mariadb]
...
rpl_semi_sync_master_wait_point=AFTER_SYNC

Когда эта переменная установлена в AFTER_SYNC, первичный сервер выполняет следующие действия:

  1. Подготавливает транзакцию в движке хранения.
  2. Синхронизирует транзакцию с двоичным журналом.
  3. Ожидает подтверждения от реплики.
  4. Завершает транзакцию в движке хранения.
  5. Возвращает подтверждение клиенту.

Последствия ожидания в точке AFTER_SYNC:

  • Все клиенты видят одинаковые данные на первичном сервере одновременно; после подтверждения реплики и после завершения в движке хранения на первичном сервере.
  • Если первичный сервер аварийно завершит работу, то переключение должно происходить без потерь данных, так как все транзакции, завершенные на первичном сервере, были бы реплицированы на реплику.
  • Однако, если первичный сервер аварийно завершит работу, его двоичный журнал может также содержать события для транзакций, которые были подготовлены движком хранения и записаны в двоичный журнал, но которые фактически никогда не были завершены движком хранения. В рамках процесса автоматического восстановления от сбоя сервера сервер может восстановить эти подготовленные транзакции при перезапуске сервера. Это может привести к тому, что «старый» аварийно завершивший работу первичный сервер станет несовместимым со своими предыдущими репликами, если они были переконфигурированы для замены старого первичного сервера новым. Старый первичный сервер в такой ситуации может быть повторно введен только как полусинхронный репликантор. Восстановление сервера после сбоя, сконфигурированного с rpl_semi_sync_slave_enabled = ON, гарантирует через MDEV-21117, что сервер не будет иметь дополнительных транзакций. Переконфигурированный сервер реплики, как полусинхронный, обрезает свой бинарный журнал, чтобы отбросить транзакции, которые, по доказательствам, не были завершены, в любом из их ветвей, если они многомоторные. Обрезка не выполняется, если существует группа событий, не являющихся транзакциями, за пределами позиции обрезки, в этом случае восстановление сообщает об ошибке. Если восстановление полусинхронной реплики не может быть выполнено, аварийно завершивший работу первичный сервер может потребовать перестройки.

Когда эта переменная установлена в AFTER_COMMIT, первичный сервер выполняет следующие шаги:

  1. Подготавливает транзакцию в движке хранения.
  2. Синхронизирует транзакцию с двоичным журналом.
  3. Завершает транзакцию в движке хранения.
  4. Ожидает подтверждения от реплики.
  5. Возвращает подтверждение клиенту.

Последствия ожидания в точке AFTER_COMMIT:

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

Версии

Версия Статус Введена
N/A N/A MariaDB 10.3.3
1.0 Стабильная MariaDB 10.1.13
1.0 Gamma MariaDB 10.0.13
1.0 Неизвестно MariaDB 10.0.11
1.0 N/A MariaDB 5.5

Системные переменные

rpl_semi_sync_master_enabled

  • Описание: Установите в ON, чтобы включить полусинхронную репликацию первичного сервера. Отключено по умолчанию.
  • Командная строка: --rpl-semi-sync-master-enabled[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: OFF

rpl_semi_sync_master_timeout

  • Описание: Значение таймаута в миллисекундах для полусинхронной репликации на первичном сервере. Если этот таймаут истекает во время ожидания подтверждения с реплики, первичный сервер вернется к асинхронной репликации.
    • При истечении таймаута переменная состояния Rpl_semi_sync_master_status также будет переключена на OFF.
    • См. Настройка таймаута первичного сервера для получения дополнительной информации.
  • Командная строка: --rpl-semi-sync-master-timeout[=#]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: numeric
  • Значение по умолчанию: 10000 (10 секунд)
  • Диапазон: 0 до 18446744073709551615

rpl_semi_sync_master_trace_level

  • Описание: Уровень отслеживания для полусинхронной репликации. Определены четыре уровня:
    • 1: Общий уровень, включая, например, сбои функций времени.
    • 16: Более детальный уровень с более подробной информацией.
    • 32: Уровень ожидания сети, включая более подробную информацию об ожиданиях сети.
    • 64: Уровень функции, включая информацию о входах и выходах функций.
  • Командная строка: --rpl-semi-sync-master-trace-level[=#]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: numeric
  • Значение по умолчанию: 32
  • Диапазон: 0 до 18446744073709551615

rpl_semi_sync_master_wait_no_slave

  • Описание: Если установлено в ON, значение по умолчанию, количество реплик (записанное переменной состояния Rpl_semi_sync_master_clients) может упасть до нуля, и первичный сервер все равно будет ждать в течение периода таймаута. Если установлено в OFF, первичный сервер вернется к асинхронной репликации, как только количество реплик упадет до нуля.
  • Командная строка: --rpl-semi-sync-master-wait-no-slave[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: ON

rpl_semi_sync_master_wait_point

  • Описание: Должна ли транзакция ждать полусинхронного подтверждения после синхронизации двоичного журнала (AFTER_SYNC) или после завершения в движке хранения (AFTER_COMMIT, значение по умолчанию).
    • Когда эта переменная установлена в AFTER_SYNC, первичный сервер выполняет следующие шаги:
      1. Подготавливает транзакцию в движке хранения.
      2. Синхронизирует транзакцию с двоичным журналом.
      3. Ожидает подтверждения от реплики.
      4. Завершает транзакцию в движке хранения.
      5. Возвращает подтверждение клиенту.
    • Когда эта переменная установлена в AFTER_COMMIT, первичный сервер выполняет следующие шаги:
      1. Подготавливает транзакцию в движке хранения.
      2. Синхронизирует транзакцию с двоичным журналом.
      3. Завершает транзакцию в движке хранения.
      4. Ожидает подтверждения от реплики.
      5. Возвращает подтверждение клиенту.
    • В MariaDB 10.1.2 и ранее эта системная переменная не существует. Однако в этих версиях первичный сервер ждет подтверждения от реплик в точке, эквивалентной AFTER_COMMIT.
    • См. Настройка точки ожидания первичного сервера для получения дополнительной информации.
  • Командная строка: --rpl-semi-sync-master-wait-point=value
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: enum
  • Значение по умолчанию: AFTER_COMMIT
  • Допустимые значения: AFTER_SYNC, AFTER_COMMIT
  • Введено: MariaDB 10.1.3

rpl_semi_sync_slave_delay_master

  • Описание: Запись информации о первичном сервере только при необходимости подтверждения.
  • Командная строка: --rpl-semi-sync-slave-delay-master[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: OFF
  • Введено: MariaDB 10.3.3

rpl_semi_sync_slave_enabled

  • Описание: Установите в ON, чтобы включить полусинхронную репликацию реплики. Отключено по умолчанию.
  • Командная строка: --rpl-semi-sync-slave-enabled[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: boolean
  • Значение по умолчанию: OFF

rpl_semi_sync_slave_kill_conn_timeout

  • Описание: Таймаут для подключения mysql, используемого для завершения подключения потока io_thread реплики на первичном сервере. Этот таймаут используется при выполнении команды stop slave.
  • Командная строка: --rpl-semi-sync-slave-kill-conn-timeout[={0|1}]
  • Область: Глобальная
  • Динамическая: Да
  • Тип данных: numeric
  • Значение по умолчанию: 5
  • Диапазон: 0 до 4294967295
  • Введено: MariaDB 10.3.3

rpl_semi_sync_slave_trace_level

  • Описание: Уровень трассировки для полусинхронной репликации. Уровни совпадают с уровнями для rpl_semi_sync_master_trace_level.
  • Командная строка: --rpl-semi-sync-slave-trace_level[=#]
  • Область действия: Глобально
  • Динамично: Да
  • Тип данных: numeric
  • Значение по умолчанию: 32
  • Диапазон: 0 до 18446744073709551615

Параметры

rpl_semi_sync_master

  • Описание: Определяет, как сервер должен обрабатывать плагин при запуске.
    • Допустимые значения:
      • OFF - Отключает плагин, не удаляя его из таблицы mysql.plugins.
      • ON - Включает плагин. Если плагин невозможно инициализировать, сервер продолжит запуск, но плагин будет отключён.
      • FORCE - Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой.
      • FORCE_PLUS_PERMANENT - Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя будет удалить с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
    • Для получения дополнительной информации см. Обзор плагинов: Настройка активации плагина при запуске сервера.
  • Командная строка: --rpl-semi-sync-master=value
  • Тип данных: enumerated
  • Значение по умолчанию: ON
  • Допустимые значения: OFF, ON, FORCE, FORCE_PLUS_PERMANENT
  • Удалено: MariaDB 10.3.3

rpl_semi_sync_slave

  • Описание: Определяет, как сервер должен обрабатывать плагин при запуске.
    • Допустимые значения:
      • OFF - Отключает плагин, не удаляя его из таблицы mysql.plugins.
      • ON - Включает плагин. Если плагин невозможно инициализировать, сервер продолжит запуск, но плагин будет отключён.
      • FORCE - Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой.
      • FORCE_PLUS_PERMANENT - Включает плагин. Если плагин невозможно инициализировать, сервер завершит запуск с ошибкой. Кроме того, плагин нельзя будет удалить с помощью UNINSTALL SONAME или UNINSTALL PLUGIN во время работы сервера.
    • Для получения дополнительной информации см. Обзор плагинов: Настройка активации плагина при запуске сервера.
  • Командная строка: --rpl-semi-sync-slave=value
  • Тип данных: enumerated
  • Значение по умолчанию: ON
  • Допустимые значения: OFF, ON, FORCE, FORCE_PLUS_PERMANENT
  • Удалено: MariaDB 10.3.3

Переменные состояния

Список переменных состояния, добавленных при установке плагина, см. в Переменные состояния плагина полусинхронной репликации.

Содержимое, воспроизведённое на этом сайте, является собственностью соответствующих владельцев, и это содержимое не проверяется предварительно компанией MariaDB. Мнения, информация и мнения, выраженные в этом содержимом, не обязательно отражают позиции MariaDB или любой другой стороны.

© 2023 MariaDB
Licensed under the Creative Commons Attribution 3.0 Unported License and the GNU Free Documentation License.
https://mariadb.com/kb/en/semisynchronous-replication/

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API