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

Область применения:SQL Server

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

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

  • Полный кворум включает обоих партнёров и свидетеля.

  • Кворум "свидетель — участник" состоит из свидетеля и любого из участников.

  • Кворум "участник-участник" состоит из двух участников.

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

Кворумы: полный состав; свидетель и партнер; оба партнера

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

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

Внимание

Сервер-свидетель следует задавать только если вы планируете использовать режим повышенной безопасности с автоматическим переключением при отказе. В режиме высокой производительности, в котором свидетель никогда не требуется, мы настоятельно рекомендуем установить свойство WITNESS в значение OFF. Сведения о влиянии свидетеля на режим высокой производительности см. в разделе Режимы работы зеркального отображения базы данных.

Кворум в сеансах с режимом высокого уровня безопасности

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

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

  • Полный кворум, состоящий из обоих партнёров и свидетеля.

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

  • Кворум «следящий сервер — участник», состоящий из следящего сервера и любого из участников.

    Если сетевое соединение между партнерами потеряно из-за потери одного из партнеров, возможны следующие случаи:

    • Зеркальный сервер недоступен, а основной сервер и сервер-свидетель сохраняют кворум.

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

    • Основной сервер недоступен, а сервер-свидетель и зеркальный сервер сохраняют кворум.

      В этом случае происходит автоматическое переключение при отказе. Дополнительные сведения см. в статье Database Mirroring Operating Modes.

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

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

  • Кворум "участник-участник" состоит из двух участников.

    Пока партнёры сохраняют кворум, база данных остаётся в состоянии SYNCHRONIZED, и ручное переключение при отказе остаётся возможным. Без свидетеля автоматическое переключение при отказе невозможно; но когда свидетель снова получает кворум, сеанс зеркального отображения возобновляет обычную работу, и автоматическое переключение при отказе снова поддерживается.

  • Сеанс теряет кворум.

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

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

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

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

Внимание

Когда в сеансе имеется только кворум «участник-участник», то при утере кворума одним из участников другой участник также теряет кворум. Поэтому, если ожидается, что следящий сервер будет оставаться отключенным в течение значительного промежутка времени, рекомендуется временно удалить следящий сервер из сеанса. Удаление свидетеля устраняет необходимость в кворуме. Затем, если зеркальный сервер будет отключен, основной сервер может продолжать обслуживать базу данных. Сведения о том, как добавить или удалить свидетеля, см. в разделе Database Mirroring Witness.

Влияние кворума на доступность базы данных

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

Как взаимодействуют следящий сервер и участники

В сценарии 1 показано, как после сбоя исходного основного сервера (Partner_A) свидетель и зеркальный сервер приходят к соглашению о том, что основной сервер, Partner_A, больше недоступен, и образуют кворум. Затем зеркальный сервер Участник Б принимает на себя роль основного сервера. Происходит автоматическое переключение при отказе, и Partner_B переводит свою копию базы данных в оперативный режим. Затем Участник Б отключается, и его база данных переходит в режим "вне сети". Затем бывший основной сервер Partner_A повторно подключается к следящему серверу, восстанавливая кворум, однако при взаимодействии со следящим сервером Partner_A узнаёт, что не может перевести свою копию базы данных в оперативный режим, поскольку роль основного сервера теперь принадлежит Partner_B. Когда Участник Б вновь присоединяется к сеансу, он переводит базу данных обратно в режим "в сети".

В сценарии 2 свидетель теряет кворум, в то время как партнеры Partner_A и Partner_B сохраняют кворум друг с другом, а база данных остается доступной. Затем участники также теряют свой кворум, и база данных переходит в режим «вне сети». Позже основной сервер, Partner_A, повторно подключается к свидетелю, восстанавливая кворум. Свидетель подтверждает, что Partner_A по-прежнему владеет основной ролью, а Partner_A снова переводит базу данных в онлайн-режим.