Spec-Zone.ru › MySQL 8.4

20.5.4.5 Как работает распределённое восстановление

Когда процесс распределённого восстановления Group Replication выполняет передачу состояния из двоичного журнала, чтобы синхронизировать присоединяемый член с донором до определённой точки во времени, присоединяемый член и донор используют GTID (см. Раздел 19.1.3, «Репликация с глобальными идентификаторами транзакций»). Однако GTID предоставляют только способ определить, какие транзакции отсутствуют у присоединяемого члена. Они не помогают отметить конкретную точку во времени, до которой сервер, присоединяющийся к группе, должен наверстать упущенное, и не передают информацию о сертификации. Этим занимаются маркеры изменений представлений в двоичном журнале, которые отмечают изменения представлений в потоке двоичного журнала, а также содержат дополнительную метаданную информацию, предоставляя присоединяемому члену недостающие данные, связанные с сертификацией.

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

Представление и изменения представлений

Представление соответствует группе членов, активно участвующих в текущей конфигурации, другими словами, в определённый момент времени. Они функционируют корректно и онлайн в группе.

Изменение представления происходит при изменении конфигурации группы, например, при присоединении или выходе члена. Любое изменение членства в группе приводит к независимому изменению представления, сообщённому всем членам в один и тот же логический момент времени.

Идентификатор представления однозначно идентифицирует представление. Он генерируется всякий раз, когда происходит изменение представления.

На уровне коммуникации между группами изменения представлений с соответствующими идентификаторами представлений обозначают границы обмена данными до и после присоединения члена. Эта концепция реализуется посредством события двоичного журнала: «событие изменения представления в журнале» (VCLE). Идентификатор представления записывается для разграничения транзакций, переданных до и после изменений в членстве группы.

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

Начало: стабильная группа

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

Рисунок 20.8 Стабильная группа

Servers S1, S2, and S3 are members of the group. The most recent item in all of their binary logs is transaction T20.

Изменение представления: присоединение члена

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

Между тем, присоединяемый член выбирает подходящего донора из списка онлайн-серверов, как указано службой членства через абстракцию представления. Член присоединяется к представлению 4, и онлайн-члены записывают событие изменения представления в двоичный журнал.

Рисунок 20.9 Присоединение члена

Server S4 joins the group and looks for a donor. Servers S1, S2, and S3 each queue the view change entry VC4 for their binary logs. Meanwhile, server S1 is receiving new transaction T21.

Передача состояния: наверстывание

Если члены группы и присоединяемый член настроены с плагином клонирования (см. Раздел 20.5.4.2, «Клонирование для распределённого восстановления»), и различие в транзакциях между присоединяемым членом и группой превышает порог, установленный для операции удалённого клонирования (group_replication_clone_threshold), Group Replication начинает распределённое восстановление с операцией удалённого клонирования. Операция удалённого клонирования также выполняется, если необходимые транзакции больше не присутствуют в файлах двоичного журнала любого члена группы. Во время операции удалённого клонирования существующие данные на присоединяемом члене удаляются и заменяются копией данных донора. После завершения операции удалённого клонирования и перезапуска присоединяемого члена выполняется передача состояния из двоичного журнала донора, чтобы получить транзакции, которые группа применила во время выполнения операции удалённого клонирования. Если разрыв в транзакциях не велик или плагин клонирования не установлен, Group Replication переходит непосредственно к передаче состояния из двоичного журнала донора.

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

Рисунок 20.10 Передача состояния: наверстывание

Server S4 has chosen server S2 as the donor. State transfer is executed from server S2 to server S4 until the view change entry VC4 is reached (view_id = VC4). Server S4 uses a temporary applier buffer for state transfer, and its binary log is currently empty.

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

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

Рисунок 20.11 Очередь транзакций

State transfer is complete. Server S4 has applied the transactions up to T20 and written them to its binary log. Server S4 has cached transaction T21, which arrived after the view change, in a temporary applier buffer while recovering.

Завершение: наверстано

Когда сервер, присоединяющийся к группе, распознаёт событие изменения представления в журнале с ожидаемым идентификатором представления, соединение с донором закрывается, и он начинает применять кэшированные транзакции. Несмотря на то, что он служит маркером в двоичном журнале, разделяя изменения представлений, событие изменения представления в журнале также выполняет другую функцию. Оно передаёт информацию о сертификации, воспринятую всеми серверами при вступлении сервера в группу, другими словами, последнее изменение представления. Без него сервер, присоединяющийся к группе, не имел бы необходимой информации для сертификации (обнаружения конфликтов) последующих транзакций.

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

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

Рисунок 20.12 Сервис онлайн

Server S4 is now an online member of the group. It has applied cached transaction T21, so its binary log shows the same items as the binary logs of the other group members, and it no longer needs the temporary applier buffer. New incoming transaction T22 is now received and applied by all group members.

© 2025 Oracle
Licensed under the GPLv2 License.
https://docs.oracle.com/cd/E17952_01/mysql-8.4-en/group-replication-view-changes.html

Spec-Zone.ru

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