Высокий уровень доступности и защита данных для конфигураций группы доступности
Область применения: SQL Server — Linux
Эта статья описывает поддерживаемые конфигурации развертывания для групп доступности Always On SQL Server на серверах Linux. Группа доступности поддерживает высокую доступность и защиту данных. Автоматическое обнаружение сбоев, автоматическая отработка отказа и прозрачное переподключение после отработки отказа обеспечивают высокую доступность. Синхронизированные реплики обеспечивают защиту данных.
В отказоустойчивом кластере Windows Server (WSFC) для типичной конфигурации высокой доступности используются две синхронные реплики и третий сервер или файловый ресурс-свидетель для обеспечения кворума. Файловый ресурс-свидетель проверяет конфигурацию группы доступности, например состояние синхронизации и роль реплики. Эта конфигурация гарантирует, что вторичная реплика, выбранная в качестве цели отработки отказа, будет иметь актуальные изменения конфигурации группы доступности и данных.
WSFC синхронизирует метаданные конфигурации для арбитража отработки отказа между репликами группы доступности и файловым ресурсом-свидетелем. Если группа доступности не включена в WSFC, экземпляры SQL Server хранят метаданные конфигурации в master
базе данных.
Например, группа доступности в кластере Linux имеет CLUSTER_TYPE = EXTERNAL
. Нет WSFC для арбитража отработки отказа. В этом случае метаданные конфигурации управляются и поддерживаются экземплярами SQL Server. Так как в этом кластере нет следящего сервера, для хранения метаданных состояния конфигурации требуется третий экземпляр SQL Server. Вместе все три экземпляра SQL Server предоставляют распределенное хранилище метаданных для кластера.
Диспетчер кластеров может запрашивать экземпляры SQL Server в группе доступности и управлять отработкой отказа для обеспечения высокой доступности. В кластере Linux Pacemaker является диспетчером кластеров.
SQL Server 2017 (14.x) CU 1 обеспечивает высокий уровень доступности для группы доступности с CLUSTER_TYPE = EXTERNAL
двумя синхронными репликами, а также только репликой конфигурации. Только реплика конфигурации может размещаться в любом выпуске SQL Server 2017 (14.x) с накопительным пакетом обновления 1 или более поздней версии (включая выпуск SQL Server Express). Только реплика конфигурации сохраняет сведения о конфигурации группы доступности в master
базе данных, но не содержит пользовательские базы данных в группе доступности.
Влияние конфигурации на параметры ресурсов по умолчанию
SQL Server 2017 (14.x) представляет REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
параметр ресурса кластера. Этот параметр гарантирует, что указанное число вторичных реплик записывает транзакционные данные в журнал до фиксации каждой транзакции первичной репликой. При использовании внешнего диспетчера кластеров этот параметр влияет как на высокую доступность, так и на защиту данных. Значение по умолчанию для этого параметра зависит от архитектуры на момент создания ресурса кластера. При установке агента ресурсов SQL Server mssql-server-ha
и создании ресурса кластера для группы доступности диспетчер кластеров определяет конфигурацию группы доступности и задает REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
соответствующим образом.
Если это поддерживается конфигурацией, параметру REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
агента ресурсов присваивается значение, обеспечивающее высокую доступность и защиту данных. Дополнительные сведения см в статье Агент ресурсов SQL Server для Pacemaker.
В следующих разделах описано поведение по умолчанию для ресурса кластера.
Выберите структуру группы доступности, соответствующую конкретным бизнес-требования по обеспечению высокой доступности, защиты данных и масштабирования для чтения.
Следующие конфигурации описывают конструктивные шаблоны группы доступности и возможности каждого из них. Эти конструктивные шаблоны применяются к группам доступности с CLUSTER_TYPE = EXTERNAL
для решений высокой доступности.
- Три синхронные реплики
- Две синхронные реплики
- Две синхронные реплики и реплика, поддерживающая только конфигурацию
Три синхронные реплики
Эта конфигурация состоит из трех синхронных реплик. По умолчанию она обеспечивает высокую доступность и защиту данных. Она также может обеспечить масштабирование для чтения.
Группа доступности с тремя синхронными репликами может обеспечивать масштабирование для чтения, высокую доступность и защиту данных. В следующей таблице описан режим доступности.
Режим доступности | Масштабирование для чтения | Высокая доступность и защита данных |
Защита данных |
---|---|---|---|
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= |
0 | 1 1 | 2 |
Сбой первичной реплики | Автоматический переход на другой ресурс. Возможна потеря данных. Новая первичная реплика доступна для чтения и записи. | Автоматический переход на другой ресурс. Новая первичная реплика доступна для чтения и записи. | Автоматический переход на другой ресурс. Новые первичные данные недоступны для транзакций обновления пользователей до тех пор, пока бывшая первичная группа доступности не восстанавливается и присоединяется к ней в качестве вторичной. |
Сбой одной вторичной реплики | Первичная реплика доступна для чтения и записи. | Первичная реплика доступна для чтения и записи. | Основной ресурс недоступен для транзакций обновления пользователей до тех пор, пока не удалось восстановить вторичный экземпляр и присоединиться к группе доступности. |
1 По умолчанию
Две синхронные реплики
Эта конфигурация обеспечивает защиту данных. Как и в других конфигурациях групп доступности, она может включать масштабирование для чтения. Конфигурация двух синхронных реплик не обеспечивает автоматическую высокую доступность. Две конфигурации реплики применимы только к SQL Server 2017 (14.x) RTM и больше не поддерживаются с более высокими версиями (CU1 и более поздних версий) SQL Server 2017 (14.x).
Группа доступности с двумя синхронными репликами обеспечивает масштабирование для чтения и защиту данных. В следующей таблице описан режим доступности.
Режим доступности | Масштабирование для чтения | Защита данных |
---|---|---|
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= |
0 1 | 1 |
Сбой первичной реплики | Автоматический переход на другой ресурс. Возможна потеря данных. Новая первичная реплика доступна для чтения и записи. | Автоматический переход на другой ресурс. Новые первичные данные недоступны для транзакций обновления пользователей до тех пор, пока бывшая первичная группа доступности не восстанавливается и присоединяется к ней в качестве вторичной. |
Сбой одной вторичной реплики | Первичная реплика доступна для чтения и записи и подвержена риску потери данных. | Основной параметр недоступен для транзакций обновления пользователей, пока не будет восстановлен вторичный. |
1 По умолчанию
Две синхронные реплики и реплика, поддерживающая только конфигурацию
Группа доступности с двумя (или более) синхронными репликами и только репликой конфигурации обеспечивает защиту данных, а также обеспечивает высокий уровень доступности. Эта архитектура представлена на следующей схеме.
- Синхронная репликация пользовательских данных на вторичную реплику. Она также включает метаданные конфигурации группы доступности.
- Синхронная репликация метаданных конфигурации группы доступности. Он не содержит пользовательские данные.
На схеме группы доступности первичная реплика передает данные конфигурации во вторичную реплику и реплику, поддерживающую только конфигурацию. Вторичная реплика также получает пользовательские данные. Только реплика конфигурации не получает пользовательские данные. Вторичная реплика находится в режиме синхронной доступности. Только реплика конфигурации не содержит базы данных в группе доступности — только метаданные о группе доступности. Данные конфигурации на реплике, поддерживающей только конфигурацию, фиксируются синхронно.
Примечание.
Группа доступности с только репликой конфигурации является новой для SQL Server 2017 (14.x) CU 1. Все экземпляры SQL Server в группе доступности должны быть SQL Server 2017 (14.x) с накопительным пакетом обновления 1 или более поздней версии.
Значение по умолчанию для REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT
равно 0. В следующей таблице описан режим доступности.
Режим доступности | Высокая доступность и защита данных |
Защита данных |
---|---|---|
REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT= |
0 1 | 1 |
Сбой первичной реплики | Автоматический переход на другой ресурс. Новая первичная реплика доступна для чтения и записи. Возможна потеря данных. | Автоматический переход на другой ресурс. Новые первичные значения недоступны для транзакций обновления пользователей. |
Сбой вторичной реплики | Основное значение — R/W, запущенное при потере данных (если первичный сбой и не может быть восстановлен). Также отсутствие автоматической отработки отказа при сбое первичной реплики. | Основное значение недоступно для транзакций обновления пользователей. Также отсутствие реплики для отработки отказа при сбое первичной реплики. |
Сбой реплики, поддерживающей только конфигурацию | Первичная реплика доступна для чтения и записи. Также отсутствие автоматической отработки отказа при сбое первичной реплики. | Первичная реплика доступна для чтения и записи. Также отсутствие автоматической отработки отказа при сбое первичной реплики. |
Синхронный сбой вторичной реплики и реплики, поддерживающей только конфигурацию | Основное значение недоступно для транзакций обновления пользователей. Отсутствие автоматической отработки отказа. | Основное значение недоступно для транзакций обновления пользователей. Также отсутствие реплики для отработки отказа при сбое первичной реплики. |
1 По умолчанию
Примечание.
Экземпляр SQL Server, на котором размещена реплика, поддерживающая только конфигурацию, может также содержать другие базы данных. Он также может использоваться в качестве базы данных, поддерживающей только конфигурацию, для нескольких групп доступности.
Требования
- Все реплики в группе доступности с только репликой конфигурации должны быть SQL Server 2017 (14.x) CU 1 или более поздней версии.
- Реплика, поддерживающая только конфигурацию, может размещаться в любом выпуске SQL Server, включая SQL Server Express.
- В дополнение к первичной реплике для группы доступности требуется по меньшей мере одна вторичная реплика.
- Только реплики конфигурации не учитывают максимальное количество реплик на экземпляр SQL Server. Выпуск SQL Server Standard поддерживает до трех реплик, SQL Server Enterprise — до 9.
Рекомендации
- Не более одной реплики, поддерживающей только конфигурацию, для каждой группы доступности.
- Только реплика конфигурации не может быть первичной репликой.
- Невозможно изменить режим доступности только реплики конфигурации. Чтобы переключиться с реплики, поддерживающей только конфигурацию, на синхронную или асинхронную вторичную реплику, удалите реплику, поддерживающую только конфигурацию, и добавьте вторичную реплику с требуемым режимом доступности.
- Реплика, поддерживающая только конфигурацию, синхронна с метаданными группы доступности. Пользовательские данные отсутствуют.
- Группа доступности с одной первичной репликой и одной только репликой конфигурации, но не является допустимой вторичной репликой.
- Невозможно создать группу доступности в экземпляре выпуска SQL Server Express.
Общие сведения об агенте ресурсов SQL Server для Pacemaker
SQL Server 2017 (14.x), представленный sequence_number
для sys.availability_groups
отображения актуальной реплики SYNCHRONOUS_COMMIT
. sequence_number
— это монотонно возрастающий BIGINT, который показывает, насколько актуальна локальная реплика группы доступности относительно остальных реплик в этой группе доступности. Это число обновляется при отработках отказа, добавлении или удалении реплик, а также выполнении других операций в группах доступности. Сначала оно обновляется в первичной реплике, а затем во вторичных. Таким образом, вторичная реплика, которая является актуальной, имеет то же самое, sequence_number
что и первичная.
Когда Pacemaker решает повысить уровень реплики до первичной, сначала отправляет уведомление всем репликам, чтобы извлечь порядковый номер и сохранить его (это уведомление называется предварительным уведомлением). Затем, когда Pacemaker пытается повысить уровень реплики до первичной, реплика только способствует себе, если его порядковый номер является самым высоким из всех порядковых чисел со всех реплик, в противном случае он отклоняет операцию повышения. Таким образом, до первичной реплики может быть обновлена только реплика с наибольшим значением порядкового номера, что позволяет избежать потери данных.
Повышение уровня гарантируется только тем, что хотя бы одна реплика, доступная для продвижения, имеет тот же номер последовательности, что и предыдущая первичная. Поведение по умолчанию предназначено для агента ресурсов Pacemaker, чтобы автоматически задать REQUIRED_COPIES_TO_COMMIT
такую, что по крайней мере одна вторичная реплика синхронной фиксации обновлена и доступна, чтобы быть целью автоматической отработки отказа. При каждом действии мониторинга значение REQUIRED_COPIES_TO_COMMIT
вычисляется (и, если нужно, обновляется) как ("число реплик синхронной фиксации"/2). Затем во время отработки отказа агент ресурсов требует (total number of replicas
- required_copies_to_commit
реплики) для реагирования на предварительное уведомление, чтобы иметь возможность повысить уровень одного из них до основного. Реплика с самым высоким значение sequence_number
повышается до первичной.
Рассмотрим, например, вариант группы доступности с тремя синхронными репликами — одной первичной и двумя вторичными репликами синхронной фиксации.
REQUIRED_COPIES_TO_COMMIT
— это 3 / 2 = 1Количество реплик, которые должны отреагировать на предварительное действие: 3 – 1 = 2. Поэтому для активации отработки отказа необходимо включить две реплики. При возникновении первичного сбоя, если одна из вторичных реплик не отвечает, и только один из вторичных файлов отвечает на действие предварительного повышения, агент ресурсов не может гарантировать, что вторичный, который ответил, имеет наибольшее значение
sequence_number
, и отработка отказа не активируется.
Пользователь может переопределить поведение по умолчанию и настроить ресурс группы доступности, чтобы не задать REQUIRED_COPIES_TO_COMMIT
автоматически, как показано ранее.
Внимание
Когда REQUIRED_COPIES_TO_COMMIT
возникает 0
риск потери данных. В случае сбоя первичной реплики агент ресурсов не запустит отработку отказа автоматически. Пользователю придется либо дождаться восстановления первичной реплики, либо выполнить отработку отказа вручную.
Чтобы задать значение REQUIRED_COPIES_TO_COMMIT
, выполните следующую 0
команду:
sudo pcs resource update <ag_cluster> required_copies_to_commit=0
Эквивалентная команда с помощью crm (в SLES) — это:
sudo crm resource param <ag_cluster> set required_synchronized_secondaries_to_commit 0
Чтобы восстановить вычисляемое значение по умолчанию, выполните следующую команду:
sudo pcs resource update <ag_cluster> required_copies_to_commit=
Примечание.
При обновлении свойств ресурсов все реплики останавливаются и перезапускаются. Это означает, что первичный ресурс временно будет понижен до дополнительного, а затем снова повышен, что приведет к временной недоступности записи. Новое значение REQUIRED_COPIES_TO_COMMIT
будет задано только после перезапуска реплик, поэтому он не будет мгновенным при выполнении команды pcs .
Балансируйте высокий уровень доступности и защиту данных
Приведенное выше поведение по умолчанию также относится к двум синхронным репликам (первичным и вторичным). Pacemaker по умолчанию REQUIRED_COPIES_TO_COMMIT = 1
гарантирует, что вторичная реплика всегда обновлена для максимальной защиты данных.
Предупреждение
При этом возникает высокий риск недоступности первичной реплики из-за плановых и внеплановых простоев вторичной реплики. Пользователь может изменить поведение агента ресурсов по умолчанию и переопределить его следующим REQUIRED_COPIES_TO_COMMIT
0
образом:
sudo pcs resource update <ag1> required_copies_to_commit=0
После переопределения агент ресурсов использует новый параметр для REQUIRED_COPIES_TO_COMMIT
и останавливает вычисление. Пользователям необходимо вручную обновить его (например, если они увеличивают количество реплик).
В следующих таблицах описывается результат сбоя для первичных или вторичных реплик в разных конфигурациях ресурсов группы доступности:
Группа доступности — две реплики синхронизации
Настройка | Сбой первичной реплики | Сбой одной вторичной реплики |
---|---|---|
REQUIRED_COPIES_TO_COMMIT = 0 |
Пользователь должен выдавать вручную FAILOVER .Возможна потеря данных. Новая первичная реплика доступна для чтения и записи. |
Первичная реплика доступна для чтения и записи и подвержена риску потери данных. |
REQUIRED_COPIES_TO_COMMIT = 1 1 |
Автоматические проблемы с кластером FAILOVER Потери данных нет. Новый первичный отклоняет все подключения до тех пор, пока бывшая первичная группа доступности не будет восстановлена и присоединяется к группе доступности в качестве вторичной. |
Основной отклоняет все подключения, пока не будет восстановлен вторичный. |
1 агент ресурсов SQL Server для поведения Pacemaker по умолчанию.
Группа доступности — три реплики синхронизации
Настройка | Сбой первичной реплики | Сбой одной вторичной реплики |
---|---|---|
REQUIRED_COPIES_TO_COMMIT = 0 |
Пользователь должен выдавать вручную FAILOVER .Возможна потеря данных. Новая первичная реплика доступна для чтения и записи. |
Первичная реплика доступна для чтения и записи. |
REQUIRED_COPIES_TO_COMMIT = 1 1 |
Кластер автоматически выдает проблемы FAILOVER .Потери данных нет. Новая первичная реплика доступна для чтения и записи. |
Первичная реплика доступна для чтения и записи. |
1 агент ресурсов SQL Server для поведения Pacemaker по умолчанию.