Мультисерверное администрирование

ОГЛАВЛЕНИЕ

Мультисерверное администрирование позволяет создавать задания (jobs) и планы обслуживания (maintenance plans) в одном месте, на сервере, именуемом master. Все задания и планы обслуживания, созданные на master-сервере, могут быть выполнены на любом сервере, указанном для него как подчинённые сервера. Состояние таких заданий также может быть проверено на master-сервере. Использование мультисерверного администрирования позволяет централизовать администрирование на одном SQL сервере. Ценность мультисерверного администрирования зависит в значительной степени от того, сколько SQL серверов им охватывается и сколько заданий и/или планов обслуживания будет сосредоточено на центральном сервере.
Эта статья призвана осветить основные вопросы применения мультисерверного администрирования, чтобы помочь Вам использовать эти возможности на своих SQL серверах. Всё описанное в этой статье было проверено для SQL Server 7.0 с SP3. Вероятно, что большинство из того, что автор описывает в этой статье, может быть применимо и на SQL Server 2000.

 

Организация мультисерверного администрирования

Для организации мультисерверного администрирования необходимо иметь минимум два SQL сервера. Один сервер будет выбран как master или MSX, а другие будем обозначать, как подчинённые сервера или TSX. Автору не известно предельное количество подчинённых серверов, которые может обслуживать один master - сервер. Однако существует ограничение, которое оговаривает, что подчинённый SQL Server может иметь только один master - сервер.

Настроить мультисерверное администрирование можно дважды щёлкнув мышкой по папке Management, щёлкнуть правой кнопкой по SQL Server Agent, выбирать Multi Server Administration и выбрать Make this a master. Активизируется визард, который создаст master - сервер и зарегистрирует подчинённые серверы, которые Вы укажете. Пройдите все шаги этого визарда и мультисерверное администрирование будет настроено. После этого Вы сможете добавлять задания и планы обслуживания. Первый экран визарда Make MSX Wizard запрашивает контактную информацию для специального оператора с именем MSXOperator. Это будет единственный оператор, который сможет получать уведомления от многосерверных заданий. Также, если Вы планируете получать уведомления по электронной почте, каждый подчинённый сервер, с которого Вы хотите посылать сообщения электронной почты, должен иметь почтовый профиль для SQL Server Agent. В теме каждого письма электронной почты будет указано, какой из подчинённых серверов послал Вам сообщение.
Автор не знает, могут ли собранные в кластер серверы включатся в мультисерверное администрирование. Он наблюдал одно существенное отличие при попытке подключить сервер из кластера. Список заданий, который исполняет визард, включает физический рестарт SQL Server Agent, который не возможен в кластерной среде, т.к. серверы в кластере используют виртуальный SQL Server Agent.


Управление мультисерверным администрированием

Для управления мультисерверным администрированием можно следовать тем же самым инструкциям по запуску визарда, которые автор дал выше, и выполнять с помощью визарда необходимую конфигурацию. Измениться только то, что опция Make this a master будет недоступна. Дважды щёлкните мышкой по папке Management, потом правой кнопкой щёлкните по SQL Server Agent, выберете Multi Server Administration и потом Manage Target Servers. Вы увидите окно со списком всех ваших подчинённых серверов. Для дальнейшей работы будут доступны две вкладки: Target Server Status и Download Instructions.


 

Target Server Status

На вкладке Target Server Status есть три кнопки. Кнопка Force Poll используется для принудительного исполнения выбранными подчинёнными серверами подготовленных для них команд. Нажатие этой кнопки также сбрасывает счётчик времени между опросами подчинённых серверов (автор более детально разбирает это ниже).

Кнопка Force Defection используется для удаления подчинённого сервера из мультисерверного администрирования. Выполнение такого удаления на master-сервере не удалит многие из заданий на подчинённом сервере. Вы можете удалить оставшееся на подчинённом сервере, щёлкнув правой кнопкой мыши по SQL Server Agent этого сервера, выбирав Multi Server Administration и потом Defect From MSX. Когда автор проверял действие этой кнопки для подчинённого сервера, вся ссылки на него были удалены у master-сервера. Лучшее не использовать кнопку Force Defection, т.к. Вы можете создать специальную команду (defect instruction), которая автоматически очистит большинство связанных с мультисерверным администрированием заданий и т.п. (более подробно о том, что не очищается при нажатии кнопки Force Defection, будет рассказано в других частях этой статьи).

Кнопка Post Instructions позволяет создавать инструкции для подчинённых серверов: defect (дефектовка), change the polling interval (изменить интервал опроса), synchronize clock (синхронизация времени с master-сервером) и инструкции для запуска заданий. Дефектовка предназначена для очистки информации о подчинённости сервера, например, когда действительно с этим сервером есть неразрешимые проблемы. Эта команда будет загружена и выполнена при следующем опросе, который инициирует master-сервер. После получения команды на дефектовку, сервер удалит из списка подчинённый сервер и очистит почти всё связанное с ним из мультисерверного администрирования. Этим автор подразумевает, что будут удалены все задания дефектуемого сервера. Однако, если задания были созданы в рамках плана обслуживания (maintenance plan), этот план не будет удалён. Заглянув в этот план обслуживания, Вы обнаружите, что ни на одной из его вкладок ничего не помечено. Следующие два запроса удалят оставшийся не удалённым план обслуживания:


USE msdb
DELETE mpd
FROM sysdbmaintplan_databases mpd
WHERE mpd.plan_id IN
(
SELECT mp.plan_id
FROM sysdbmaintplans mp
LEFT JOIN sysdbMaintplan_jobs mpj ON mpj.plan_id = mp.plan_id
LEFT JOIN sysjobs j ON
SUBSTRING(name,CHARINDEX('''',name,1) + 1, LEN(name) - 1 - CHARINDEX('''',name,1)) = mp.plan_name
WHERE mpj.plan_id IS NULL
AND mp.plan_name <> 'All ad-hoc plans'
AND j.job_id IS NULL
)
DELETE mp
FROM sysdbmaintplans mp
LEFT JOIN sysdbMaintplan_jobs mpj ON mpj.plan_id = mp.plan_id
LEFT JOIN sysjobs j ON
SUBSTRING(name,CHARINDEX('''',name,1) + 1, LEN(name) - 1 - CHARINDEX('''',name,1)) = mp.plan_name
WHERE mpj.plan_id IS NULL AND mp.plan_name <> 'All ad-hoc plans' AND j.job_id IS NULL

Команда Set Polling Interval позволяет изменять интервал опроса, который, по умолчанию, равен 60 секундам. Интервал опроса может быть различным для каждого подчинённого сервера. Интервал устанавливается в секундах и может быть в интервале между 10 и 28800 (8 часов). Для того, что бы новый интервал опроса вступил в силу немедленно, Вы можете нажимать кнопку Force Poll. При таком форсировании опроса подчинённого сервера для исполнения им новых команд, происходит сброс интервала опроса, и начинается отсчёт с этого времени, когда Вы инициировали опрос подчинённого сервера.

Автор статьи наблюдал, что после дефектовки подчинённого сервера и последующего его же включения в мультисерверное администрирование на том же самом master-сервере, установленный этому подчинённому серверу интервал опроса сохраняется с таким значением, какое было до дефектовки. Это значение не будет сброшено к значению по умолчанию в 60 секунд. Автором статьи были осуществлены замеры сетевого трафика, который порождает Мультисерверное администрирование. Он использовал локальную сеть 100 MB Ethernet, использующую коммутатор для подключения всех серверов. В сети был один master-сервер и три подчинённых сервера. Опрос осуществлялся каждые 10 секунд. Во время опроса автор наблюдал величину сетевого трафика. Утилизация сети была настолько мала, что её можно считать незначительной. Автор полагает, трафик не должен создавать проблемы в любой сети, и Вы всегда можете увеличить интервал опроса, что бы сократить этот трафик. Например, опрос каждый час или каждые два часа по линии T1 не должен создавать никаких проблем, поскольку опрос длится только секунду и даже меньше.

Последняя команда, которую Вы можете использовать, относится к мультисерверным заданиям (multi server job). Мультисерверные задания будут обсуждены ниже в этой статье.

Все эти команды могут быть назначены одному и более серверу или всем подчинённым серверам.


 

Download Instructions

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

В этом окне Вы увидите имя подчинённого сервера, операцию, имя объекта, время почтового уведомления (которая совпадает с датой запуска на исполнение команды) и время завершения загрузки команды.



Добавление подчинённых серверов

Для этого просто щёлкните правой кнопкой по SQL Server Agent master-сервера, к которому Вы планируете добавить подчинённый сервер, выберите Multi Server Administration и потом Add Target Server. В списке, который Вы увидите, будут SQL серверы, которые уже зарегистрированы в Enterprise Manager того компьютера, на котором Enterprise Manager в этот момент запущен. Список будет включать серверы, которые являются подчинёнными серверами и возможно другие master-серверы. Однако, Вы не можете сделать подчинённым сервером тот сервер, который уже исполняет роль master-сервера или те сервера, которые уже являются подчинёнными другому master-серверу. Для того, что бы подчинить такой сервер, сначала Вы должны дефектовать подчинённый сервер на другом master-сервере. Каждый подчинённый сервер может иметь только один master - сервер. Также Вы можете сделать подчинённым сервер непосредственно подключившись к этому серверу, щёлкнуть правой кнопкой мыши по его SQL Server Agent, выбирать Multi Server Administration и потом Make this a Target. Запуститься визард Make TSX Wizard, в котором Вам нужно будет указать имя соответствующего master-сервера.


Мультисерверный план обслуживания

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

Автор заметил, что если изменять только параметр на вкладке оптимизации "free space percentage", это изменение не будет отправлено на подчинённый сервер. Однако, если кроме того изменить опцию Shrink database, то оба изменения будут отправлены на подчинённый сервер. Лучший способ удостовериться в том, что изменение действительно будет отправлено, это повторное открытие maintenance plan и проверка наличия в нём выполненных Вами изменений. Если изменения там отражены, Вы можете проверить отправленные команды для подчинённых серверов.


 

Мультисерверные задания

После успешного создания master-сервера, Вы заметите знак + (плюс) рядом со значком папки заданий в левом окне Enterprise Manager. Когда щёлкните мышкой по этому значку, Вы увидите две папки: Local Server Jobs и Multi Server Jobs. Задания, которые Вы хотите выполнять на master-сервере, должны быть созданы в папке Local Server Jobs.
Мультисерверные задания, созданные на master-сервере не могут выполняться на локальном сервере. Если Вы создавали мультисерверный maintenance plan, который выполняется на подчинённых серверах и на локальном сервере, в папке Local Server Jobs будет находиться задание для maintenance plan, который выполняется на master-сервере. В папке Multi Server Jobs будут такие же задания для того же самого maintenance plan, только они будут выполнятся на подчинённых серверах. Создание новых заданий осуществляется обычным способом, отличие только в том, что для заданий в папке Multi Server Jobs нужно указать один или более подчинённых серверов. В свойства задания, в нижнем, правом углу располагается кнопка Change (обычно не активная для локальных заданий), которая позволяет выбрать подчинённые серверы для мультисерверного задания (один, несколько или все).
Вы можете щёлкнуть правой кнопкой мыши по любому мультисерверному заданию (на master-сервере) и выбрать job status, чтобы увидеть текущее состояние выполнения заданий на каждом подчинённом сервере. Что бы увидеть хронологию исполнения задания выбранного подчинённого сервера, просто щёлкните правой кнопкой по этому серверу и выберете пункт истории исполнения задания. Это очень удобно, т.к. Вы сможете просматривать хронологию заданий для всех подчинённых серверов, вместо того, что бы открывать каждый сервер.
Кнопка Target Server Status открывает то же самое окно, которое описано в предыдущем абзаце.
Кнопка Synchronize Jobs необходима только при восстановлении базы msdb на master-сервере и она восстанавливает те изменения в мультисерверных заданиях, которые произошли после последнего резервного копирования.



Безопасность

Мультисерверные задания и MSXOperator на каждом подчинённом сервере не могут быть изменены локально. Все изменения должны производиться на master-сервере. Это гарантирует, что Вы или другой администратор случайно (или преднамеренно) не изменят или удалят такие задания. Кроме того, Вы можете быть уверены, что все мультисерверные задания будут идентичны.



Удаление мультисерверного администрирования

Для полного удаления мультисерверного администрирования, Вы должны дефектовать все подчинённые серверы. Когда последний подчинённый сервер будет успешно дефектован, master-сервер деинсталлируется. К сожалению, многие задания и MSXOperator не полностью удалятся с бывшего master-сервера, а также не вся информация о мультисерверных планах обслуживания удалиться с бывших подчинённых серверов. Выше уже представлялся скрипт, который удаляем остатки плана обслуживания на бывшем подчинённом сервере. Ниже представлен скрипт, который удалит с бывшего master-сервера оператора MSXOperator:


USE msdb
DELETE j
FROM sysjobs j
WHERE j.category_id = 2 --This is the ID for multi server jobs
IF (EXISTS (SELECT name FROM msdb.dbo.sysoperators
WHERE name = N'MSXOperator'))
---- Delete operator with the same name.
EXECUTE msdb.dbo.sp_delete_operator @name = N'MSXOperator'

С другой стороны, если Вы не удалите мультисерверные задания и потом повторно установите master-сервер, тогда старые задания автоматически появятся в папке заданий этого сервера. Вам останется только указать для них подчинённые сервера, и они будут готовы к использованию. Задания с категорией Uncategorized (multi-server) не могут быть выполнены на бывшем master-сервере, пока Вы не измените категорию на локальную. Так что, если Вы планируете продолжать их использование, Вы должны или выполнить указанные выше рекомендации по удалению или изменить их категорию.