Реклама

Компоненты высокого уровня доступности для Microsoft SQL Server остаются стабильными со времени появления групп доступности AlwaysOn в редакции Enterprise Edition в SQL Server 2012. С тех пор вносились некоторые изменения (например, ограниченный вариант групп доступности AlwaysOn вошел в редакцию Standard Edition SQL Server 2016), но средства высокой доступности, обеспечивающие доставку журналов, кластеризацию и зеркальное отображение, похоже, достигли зрелости. Чтобы наиболее эффективно задействовать возможности высокого уровня доступности, администраторы баз данных должны понимать, какие основные проблемы возникают при работе с агентом SQL Server (https://docs.microsoft.com/en-us/sql/ssms/agent/sql-server-agent) и группами доступности AlwaysOn (https://technet.microsoft.com/en-us/library/hh510230 (v=sql.110).aspx).

Архитектура групп доступности

Прежде чем продолжить, я хочу напомнить вам основные принципы построения групп доступности AlwaysOn. Группы доступности (AG) состоят из двух или нескольких отдельных серверов, на которых размещается экземпляр SQL Server. Эти серверы именуются репликами. На каждой реплике размещается экземпляр одной или нескольких баз данных, которые состоят в группе доступности. Для любой AG только на одной реплике будут размещены базы данных в пригодном для чтения и записи состоянии; эта реплика называется основной. Другие экземпляры реплики баз данных, участвующих в группе доступности, пригодны или непригодны для чтения, в зависимости от способа структурирования AG при ее построении.

В случае отработки отказа все базы данных, участвующие в AG, будут отрабатывать отказ вместе, даже если вызвавшее отказ событие существует лишь для одной базы данных в AG. Отработки отказов могут быть настроены для запуска вручную или автоматически. Когда происходит отработка отказа AG — особенно рано утром, когда администраторы баз данных, скорее всего, спят, — желательно сократить число шагов для переключения на другой ресурс, в частности исключить корректировку состояния «доступно» задания агента SQL Server.

Несогласованная настройка задания SQL Server

Агент SQL Server не является частью группы доступности. Этот компонент и базы данных, содержащие метаданные, используемые в его процессах, а именно msdb и master, существуют независимо от AG на каждой реплике. Я располагаю поддерживаемыми средами с экземпляром SQL Server, имеющим задания, которые запланированы в агенте SQL Server и должны выполняться только на доступном для записи экземпляре баз данных или на базе данных, размещенной вне группы доступности на первичной реплике.

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

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

Гибкий рабочий процесс для заданий агента SQL...

Это не вся статья. Полная версия доступна только подписчикам журнала. Пожалуйста, авторизуйтесь либо оформите подписку.

Поделитесь материалом с коллегами и друзьями

Купить номер с этой статьей в PDF