Открыть сервис

Microsoft SQL Server Always On

Microsoft SQL Server Always On — это набор технологий и решений для обеспечения высокой доступности (High Availability, HA) и аварийного восстановления (Disaster Recovery, DR) для экземпляров и баз данных Microsoft SQL Server. Always On объединяет несколько функциональных возможностей, основными из которых являются отказоустойчивые кластеры экземпляров (Failover Cluster Instances, FCI) и группы доступности (Availability Groups, AG). Технология позволяет минимизировать время простоя при плановом обслуживании, аппаратных сбоях или сбоях программного обеспечения, а также обеспечивает защиту данных на уровне отдельных баз данных.

История и развитие

Технология Always On была впервые представлена корпорацией Microsoft в составе SQL Server 2012. До этого основным средством обеспечения высокой доступности в SQL Server были отказоустойчивые кластеры (SQL Server Failover Cluster), которые работали на уровне экземпляра и не обеспечивали гибкого управления отдельными базами данных. С появлением Always On корпорация предложила более продвинутое решение — группы доступности, которые позволяют реплицировать данные на уровне отдельных баз данных на несколько серверов (реплик) и выполнять отказоустойчивое переключение как на уровне экземпляра (FCI), так и на уровне базы данных (AG).

В последующих версиях SQL Server (2014, 2016, 2017, 2019, 2022) функциональность Always On постоянно расширялась. В SQL Server 2016 были добавлены распределенные группы доступности (Distributed Availability Groups), позволяющие создавать географически распределенные решения. В SQL Server 2017 появилась поддержка групп доступности в контейнерах Linux. В SQL Server 2019 была улучшена производительность синхронной репликации и добавлена возможность создания групп доступности без использования доменных служб Active Directory. В SQL Server 2022 были внедрены функции, такие как автоматическое переключение при сбое с использованием кворума в облачных сценариях и улучшенная поддержка Azure SQL Managed Instance.

Основные компоненты и архитектура

Отказоустойчивый кластер экземпляров (Failover Cluster Instance, FCI)

FCI — это решение на уровне экземпляра SQL Server, которое использует технологию отказоустойчивой кластеризации Windows Server (Windows Server Failover Cluster, WSFC). В FCI один экземпляр SQL Server устанавливается на нескольких узлах (серверах) кластера, но в каждый момент времени активен только один узел. Все узлы совместно используют общее хранилище (например, SAN или SMB-файловый сервер). При сбое активного узла кластерная служба автоматически переключает управление на другой узел, который подключается к тому же общему хранилищу и запускает SQL Server. Для клиентов это выглядит как перезапуск службы, но с минимальным временем простоя.

  • Преимущества: Простота настройки, поддержка всех функций SQL Server, автоматическое переключение при сбое.
  • Недостатки: Требуется общее хранилище, что является единой точкой отказа; переключение затрагивает весь экземпляр, а не отдельные базы данных.

Группы доступности (Availability Groups, AG)

Группы доступности — это более гибкое решение, работающее на уровне базы данных. В AG одна или несколько баз данных (называемых базами-источниками, или первичной репликой) реплицируются на один или несколько серверов (вторичных реплик). Каждая реплика может быть расположена на отдельном сервере, в том числе в разных географических регионах. Репликация данных осуществляется в режиме реального времени с использованием синхронного или асинхронного режима.

  • Первичная реплика (Primary replica): Обрабатывает все операции чтения и записи. Клиенты подключаются к ней через специальный прослушиватель (listener).
  • Вторичные реплики (Secondary replicas): Получают копии данных с первичной реплики. В зависимости от настроек, вторичные реплики могут быть доступны только для чтения (readable secondary) или могут использоваться для резервного копирования. В случае сбоя первичной реплики одна из вторичных реплик может быть переведена в роль первичной (ручное или автоматическое переключение).
  • Преимущества: Высокая гибкость, возможность географического распределения, поддержка чтения с вторичных реплик (разгрузка первичной), отсутствие единого хранилища.
  • Недостатки: Более сложная настройка и управление, требует лицензирования Enterprise Edition для использования более одной вторичной реплики (в Standard Edition — только две реплики: одна первичная и одна вторичная), ограниченная поддержка некоторых функций SQL Server (например, распределенных транзакций).

Режимы репликации

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

  • Синхронный режим (Synchronous-commit mode): Транзакция считается завершенной только после того, как она записана в журнал транзакций как на первичной, так и на вторичной реплике. Это гарантирует нулевую потерю данных (zero data loss) при сбое, но увеличивает задержку транзакций.
  • Асинхронный режим (Asynchronous-commit mode): Транзакция считается завершенной сразу после записи на первичной реплике. Вторичная реплика получает данные с некоторой задержкой. Это снижает нагрузку на сеть и позволяет использовать географически удаленные реплики, но при сбое возможна потеря данных (обычно несколько секунд).

Прослушиватель (Listener)

Прослушиватель — это виртуальное сетевое имя (DNS-имя) и IP-адрес, которые клиенты используют для подключения к группе доступности. Прослушиватель автоматически перенаправляет запросы на текущую первичную реплику. При переключении (failover) прослушиватель обновляет свою привязку к новой первичной реплике, что делает процесс переключения прозрачным для клиентов.

Классификация и сценарии использования

По типу отказоустойчивости

  • Автоматическое переключение (Automatic failover): Происходит без вмешательства администратора при сбое первичной реплики. Требуется синхронный режим репликации и наличие не менее двух реплик (включая первичную).
  • Ручное переключение (Manual failover): Выполняется администратором вручную, например, для планового обслуживания. Может быть как с потерей данных (forced failover, для асинхронных реплик), так и без потери данных (planned failover, для синхронных реплик).

По географическому расположению

  • Локальные решения (On-premises): Все реплики находятся в одном дата-центре или на одной площадке. Обычно используются для обеспечения высокой доступности в пределах одного здания.
  • Географически распределенные решения (Geo-distributed): Реплики расположены в разных регионах или странах. Используются для аварийного восстановления при катастрофах (например, отключение электроэнергии, пожар, наводнение). В таких сценариях часто применяется асинхронный режим репликации.

По версии SQL Server

  • Enterprise Edition: Поддерживает до 8 вторичных реплик (в SQL Server 2012 — до 4, в SQL Server 2016 — до 8), а также распределенные группы доступности, чтение с вторичных реплик и другие расширенные функции.
  • Standard Edition: Поддерживает только одну вторичную реплику (так называемая «базовая группа доступности»). Ограничена в функциональности (например, нет поддержки распределенных групп доступности и автоматического переключения в некоторых сценариях).

Применение и значение

Технология Always On широко используется в корпоративных средах, где требуется высокая доступность баз данных. Основные сценарии применения:

  • Банковские и финансовые системы: Обеспечение непрерывности операций, защита от потери данных.
  • Электронная коммерция: Обеспечение доступности интернет-магазинов и платежных систем.
  • ERP и CRM системы: Поддержка работы критически важных бизнес-приложений (например, Microsoft Dynamics 365, SAP).
  • Географически распределенные компании: Обеспечение доступа к данным из разных регионов и аварийное восстановление.

Ограничения и критика

Несмотря на широкие возможности, Always On имеет ряд ограничений:

  • Лицензирование: Для использования всех функций (более одной вторичной реплики, распределенные группы доступности) требуется лицензия SQL Server Enterprise Edition, которая значительно дороже Standard Edition.
  • Сложность настройки: Настройка групп доступности требует глубоких знаний в области кластеризации Windows Server, сетевой инфраструктуры и управления SQL Server.
  • Зависимость от сети: Для синхронной репликации требуется низкая задержка и высокая пропускная способность сети. В географически распределенных сценариях это может быть проблемой.
  • Ограничения на уровне базы данных: Некоторые функции SQL Server (например, распределенные транзакции, Service Broker, FILESTREAM) не полностью поддерживаются в группах доступности.
  • Потеря данных при асинхронной репликации: В случае сбоя первичной реплики при асинхронном режиме возможна потеря данных, что неприемлемо для некоторых критически важных систем.

Интересные факты

  • Технология Always On была разработана как ответ на решения конкурентов, такие как Oracle Data Guard и PostgreSQL Streaming Replication.
  • В SQL Server 2016 была добавлена поддержка распределенных групп доступности, что позволило создавать каскадные конфигурации с несколькими уровнями репликации.
  • Начиная с SQL Server 2017, Always On доступен также в версии для Linux, что расширяет возможности развертывания в гетерогенных средах.
  • В SQL Server 2022 была внедрена функция «Contained Availability Groups», которая упрощает управление группами доступности в облачных сценариях, таких как Azure Arc.

Источники

  • Microsoft Docs: «Always On Availability Groups (SQL Server)»
  • Microsoft Docs: «Failover Cluster Instances (SQL Server)»
  • «SQL Server 2012 AlwaysOn» — книга авторов Paul S. Randal, Robert Davis и др.
  • «Pro SQL Server Always On Availability Groups» — книга автора Uttam Parui
  • Технические блоги корпорации Microsoft (SQL Server Team Blog)

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →