Tips for DBA: выравнивание кластеров NTFS и блоков RAID-массивов

Недавно Кевин Кляйн в очередной раз поднял тему выравнивания размеров кластера и блока, проблему, которая, казалось бы, давно хорошо всем известна, документирована и не обходит ни один из известных мне списков рекомендаций по оптимизации работы дисковой подсистемы сервера баз данных. Статья Кевина How to Improve Application and Database Performance up to 40% in One Easy Step получила довольно большой резонанс в профессиональной блог-сфере, точно также, как в былые времена об этом писалось множество статей, шумели в форумах или nntp-конференциях… Размышляя о причинах всеобщей забывчивости о подобных проблемах, я склонен к таковым в первую очередь отнести то, что, увы, всё меньше стало возможностей получения систематизированных знаний (так и не образовалось школ администрирования, а техническая литература практически умерла на территории бывшего СССР), и то, что современные модели организации инфраструктуры IT всё меньше способствуют творческому и разностороннему подходу к задачам администрирования серверного парка организации. Узкие специализации и большие, я бы даже сказал масштабные, нагрузки на специалистов поддержки жизнедеятельности центров обработки данных приводят к тому, что ускользают такие детали, как, например, выравнивание размеров кластера и блока… Жизнь показывает, что такие просчёты для серверов баз данных могут стоить до 40% потери производительности дисковых операций.
Давайте перейдём к сути проблемы и начнём с её описания. Сразу хочу отметить, что если вы для размещения файлов баз данных используете RAW-партиции, или это простые диски, не входящие ни в какой RAID-массив с собственным контроллером, то вам беспокоиться не о чем. Не выровненными могут быть только кластеры NTFS и блоки RAID-массива (пусть даже это RAID0 из одного диска). Когда форматируется раздел, вы выбираете размер кластера, который является по сути своей тем же самым, что и блок разметки дисков у RAID-контроллера. Наверняка, в форумах или в рекомендациях разных вендоров вам попадались слова, что размер блока и размер кластера желательно устанавливать одинаковыми, например, для баз данных SQL Server очень часто слышны рекомендации выбирать и там и там 64Кб. Однако, операционная система создает самый первый кластер (блок начальной загрузки) размером в 63Кб. Эта особенность NTFS означает, что каждый последующий кластер будет сдвинут на 1Кб на предыдущий блок. Т.е. кластеры окажутся смещёнными относительно границ блоков массива. Такая ситуация приводит к тому, что одна операция чтения или записи кластера будет затрагивать два сектора и будет приводить к удвоению числа запросов ввода-вывода.
Наиболее наглядно это показал Дэнни Черрай (Denny Cherry) в своей статье Optimize disk configuration in SQL Server. Вот рисунок из его статьи:

А вот выигрыш от выравнивания наиболее наглядно продемонстрировал в статье своего блога Линчи Шеа, которую вы можете посмотреть здесь.

Ещё один подробный тест производительности SQL Server со смещением или без опубликовал в своём блоге Илгиз Мамышев: Выравнивание кластеров NTFS и блоков RAID массива (детальный тест для SQL Server)

Обнаружить и устранить смещение кластеров относительно блоков можно с помощью утилиты из состава Windows Server 2003, которая называется DISKPART.EXE. В Windows 2000 она имела несколько укороченное имя DISKPAR.EXE и входила в состав Windows 2000 Resource Kit.
Существует несколько статей Майкрософт, которые подробно обсуждают эту тему:
- Predeployment I/O Best Practices
- Examining and Tuning Disk Performance
- Disk performance may be slower than expected when you use multiple disks in Windows Server 2003, in Windows XP, and in Windows 2000
- DiskPart
- Описание программы Diskpart с интерфейсом командной строки
- An updated version of the Disk Partition tool for Windows Server 2003 is available
- Improving SQL Disk Performance #1 Partition Alignment
- Tuning SQL Server performance via disk arrays and disk partitioning
Ещё несколько примеров использования DISKPART.EXE для нужд SQL Server вы можете найти в этих статьях:
- Подключение базы данных отчетов как масштабируемой общей базы данных
- Построение и обновление базы данных отчетов
- Необходимо ли в Windows Server 2008 выравнивание кластеров NTFS и блоков RAID массива?
- http://www.itcommunity.ru/blogs/mamyshev/archive/2008/11/14/36335.aspx
Имейте в виду, что когда вы будете применять команды DISKPART для выравнивания границ, данные на этих дисках будут полностью утеряны, так что позаботьтесь об их резервировании загодя.
Для того чтобы проверить существование сдвига, вы можете использовать следующий порядок использования утилиты DISKPART: Перейдите в командную строку и там, получив приглашение командной сроки, наберите и выполните команду: diskpart.exe. После этого вы должны увидеть приглашение запущенной утилиты DISKPART>. С помощью команды LIST DISK просмотрите список имеющихся дисков. Для того чтобы сделать текущим один из исследуемых дисков, введите команду SELECT DISK n, где n - номер выбранного диска по порядку операционной системы. После позиционирования диска, дайте команду LIST PARTITION, которая выведет на экран подробную информацию о разделах диска, включая начальное смещение.
Аналогичную информацию можно получить с помощью утилиты DiskExt, или запросом WMI, например, воспользовавшись методом, предложенным в блоге Боба Даффай, оригинальное сообщение о котором можно посмотреть здесь. Сам запрос имеет очень простой вид:
SELECT * FROM Win32_DiskPartition
Он, как и вызов команды LIST PARTITION, вернёт в числе своих результатов информацию о начальном смещении. Те цифры, которые вы увидите, необходимо будет разделить на величину размера сектора диска, например, так:
32256 / 512 = 63
Если полученный результат деления будет такой, как в примере, а размер блока дискового массива равен 64, значит между кластерами и блоками существует смещение в 1 Кб. Для того, чтобы выровнять раздел, нужно удалить смещённый раздел, а потом для выбранного диска задействовать команду DISKPART> CREATE PARTITION PRIMARY ALIGN=64. Эта команда создает новый раздел со смещением первого кластера на 64КбБ, что позволяет выровнять границы кластеров и блоков и тем самым оптимизировать работу дисковой подсистемы. Опция ALIGN появилась в сервисном пакете Windows 2003 SP1.
Tips for DBA: Database is in transition?!

Сегодня утром на одном из серверов произошёл "казус" с пользовательской базой данных, которую мои коллеги пытались перевести в OFFLINE, но процесс пошёл не штатно, база попала в переходное состояние, став недоступной и затруднив при этом мониторинг активности других пользовательских и системных баз… Ситуация точно такая же, какая была описана Полом Ибисоном в группе новостей: OFFLINING and "Database 'xxx' is in transition. Try the statement later."
Проблема проявляется тем, что любые попытки подключиться к объектам базы ХХХ заканчиваются следующим сообщением об ошибке:
"Database 'ХХХ' is in transition. Try the statement later."
В журнале ошибок SQL Server есть сообщение типа:
Дата 26.09.2008 8:47:40
Журнал SQL Server (Текущий - 26.09.2008 8:51:00)
Источник spid131
Сообщение Setting database option OFFLINE to ON for database ХХХ.
Обращение к системным метаданным построенное в виде сценария:
|
Возвращает в числе первых процесс, в колонке command которого фигурирует инструкция ALTER DATABASE.
Рецепт, который подсказывает Пол, простой, но действенный. Посмотрите идентификатор процесса, в контексте которого исполняется инструкция ALTER DATABASE, и удалите этот процесс с помощью команды KILL.
Для того чтобы исключить возможность возникновения описываемой проблемы, Пол предлагает предварительно переводить базу данных в однопользовательский режим READONLY или в SINGLE_USER.
Например так:
|
Tips for DBA: Deadlock Event Notifications

Начиная с SQL Server 2005, на службе DBA появилась такая замечательная возможность, как Event Notifications, что в русской версии BOL принято называть уведомлением о событиях. Этот механизм позволяет включить незаметную трассировку системных событий и извлекать информацию о заданных события из очереди для анализа или реакции со стороны администратора. Полный список событий, которые таким образом можно отслеживать, можно найти в статье: События трассировки для использования с уведомлениями о событии
Давайте рассмотрим упрощённый пример организации уведомлений о тупиковой блокировке и сделаем так, чтобы по электронной почте можно было получить письмо с графом блокировок.
Подготовительные действия
Для начала настройте на тестовом сервере Database Mail и убедитесь, что всё работает правильно. С возможными проблемами с почтой поможет статья: Устранение неполадок в работе компонента Database Mail
У меня с настройками возникла только одна проблема, пришлось учесть, что вызов системной хранимой процедуры в следующем ниже примере будет выполняться не в том контексте, в котором я привык работать :) В общем, пришлось на время сделать её доступной всем желающим. Вот один из способов это сделать:
|
Для того, чтобы задействовать очереди событий для интересующих нас баз данных, нужно включить компонент Service Broker. Как это сделать для базы AdventureWorks показано в следующем сценарии:
|
Если в ответ на это действие вы получили сообщение об ошибке: The SQL Server Service Broker for the current database is not enabled Можно включить брокера принудительно, например, так:
|
Создание очереди, службы, сообщения и маршрута
В качестве места базирования наших очередей и сообщений мы выберем системную базу данных tempdb. Она есть на любом сервере и Service Broker для неё включён по умолчанию. Первым делом мы заготавливаем процедуру, которая будет вызываться при регистрации интересующего нас события:
|
После того, как представленный выше сценарий будет успешно применён на тестовом сервере, будет создано всё необходимое для получения почтовых сообщений. В теле письма будет правильный XML, у которого в теге <TextData> лежит стандартный граф взаимоблокировки, который открывается тэгом <deadlock-list>. Если его вырезать и сохранить в файле с расширением xdl, то при открытии такого файла в приложении SQL Server Management Studio, вы увидите привычную схему блокировки, обычно получаемую с помощью SQL Server Profiler.
Удаление созданных для тестовых целей объектов
Удалить следы наших сценариев в базе данных tempdb помогут следующие команды:
|
Бонус
Если Вы хотите, чтобы стандартный файл взаимоблокировки приходил в письме и в качестве вложения, измените процедуру следующим образом:
|
Минимальные требования к размещению файлов пользовательских баз данных
Настоящие требования распространяются на тестовые и пользовательские базы данных, с размерами до 300Гб, без повышенных требований к доступности, готовности и надёжности.
Файлы пользовательских баз данных, журналов транзакций, журналов планов обслуживания и других журналов располагаются в стандартной структуре каталогов, используемой вендором. При наличии нескольких дисков (дисковых массивов), системные и серверные каталоги располагаются на диске C (в предлагаемых программой установке каталогах по умолчанию - C:\Program Files\Microsoft SQL Server), файлы данных располагаются на диске D, а файл журнала транзакций (который рекомендуется иметь один для каждой БД) располагаются на диске E. В корне каждого диска создаётся каталог MSSQL, в котором создаются подкаталоги для размещения соответствующих файлов. Для файлов данных создаётся подкаталог DATA, для файлов журналов подкаталог LOG, для файлов резервных копий подкаталог BACKUP. Нежелательно располагать на одном диске файлы с разным типом доступа, например, файлы данных и файл журнала транзакций. Для повышения живучести приложения баз данных, нежелательно располагать файлы резервных копий на одном диске с файлами данных. Например, для трёх дисков возможна такая, типовая конфигурация размещения файлов баз данных:
- C:\Program Files\Microsoft SQL Server\ - фалы сервера баз данных, системные базы данных, журналы планов обслуживания и т.п.
- D:\MSSQL\DATA\ - Файлы данных пользовательских баз данных.
- E:\MSSQL\LOG\ - Файл журнала регистрации транзакций пользовательской базы данных.
- E:\MSSQL\BACKUP\ - Файлы резервных копий пользовательских и системных баз данных.
Параметры создаваемых баз данных желательно выбирать стандартными, предлагаемыми по умолчанию. Каждое изменение стандартных значений параметров должно быть обосновано и документировано (sp_addextendedproperty).
Для размещения пользовательских данных создаётся отдельная файловая группа (группы), которая делается файловой группой по умолчанию. Предлагается называть такую группу: DATAGROUP. Делается это для того, чтобы разнести по разным файлам системные и пользовательские объекты базы данных.
Если дисков для размещения файлов много, желательно в файловой группе DATAGROUP создавать несколько файлов данных (например, по числу установленных в системе сокетов центральных процессоров). В таком случае файлы размещаются на разных дисках, а SQL Server балансирует нагрузку между ними, что повышает производительность операций ввода-вывода.
Для размещения файлов журналов транзакций необходимо использовать защищённые от отказа диска массивы, например RAID1. Для файлов данных пользовательских БД использование защищённых массивов спецификацией требование ACID не является обязательным при условии использования полной модели восстановления и регулярного резервирования не только баз данных, но и журналов регистрации транзакций.
Для размещения файлов баз данных и особенно журналов транзакций нежелательно использовать массивы RAID5x или RAID6x, в силу крайне низкой скорости записи. Эти типы массивов можно использовать для размещения файлов резервных копий или файлов данных с малым процентом операций записи.
Как правило, SQL Server балансирует нагрузку ввода-вывода эффективнее аппаратных решений. Поэтому предпочтительно размещать базу данных на нескольких файлах и помещать файлы на собственные диски, чем размещать базу в одном файле данных и помещать его на массивы типа RAID10 или SAN. Рекомендуется, для принятия решения о целесообразности использования RAID10 или SAN проводить тестирование разных вариантов конфигурации дисковой подсистемы.
Если после создания БД планируется массовая загрузка данных, желательно при создании установить достаточный размер файлам данных и журнала транзакций. Автоматическое приращение файлов является ресурсоёмкой операцией и может существенно увеличить время загрузки данных. Кроме того, если на разделе диска находятся несколько файлов данных, размер которых может изменяться, это становится причиной файловой фрагментации данных и журналов. Для обеспечения высокой производительности работы приложений необходимо дефрагментировать файлы баз данных на регулярной основе. Уменьшение размеров файлов данных крайне не желательно, эта операция может применяться только для сокращения размера файла журнала транзакций, если это стало необходимо (например, после массовой журналируемой загрузки).
Пример сценария создания пользовательской базы данных:
USE [master]
GO
CREATE DATABASE [ИмяБазыДанных] ON PRIMARY
( NAME = N'ЛогическоеИмяФайлаСистемныхДанных'
, FILENAME = N'D:\MSSQL\DATA\ИмяФайлаСистемныхДанных.mdf'
, SIZE = 131072KB
, MAXSIZE = UNLIMITED
, FILEGROWTH = 131072KB
),
FILEGROUP [DATAGROUP]
( NAME = N'ЛогическоеИмяФайлаДанных'
, FILENAME = N'D:\MSSQL\DATA\ИмяФайлаДанных.ndf'
, SIZE = 131072KB
, MAXSIZE = UNLIMITED
, FILEGROWTH = 131072KB
)
LOG ON
( NAME = N'ЛогическоеИмяФайлаЖурнала'
, FILENAME = N'E:\MSSQL\LOG\ИмяФайлаЖурнала.ldf'
, SIZE = 131072KB
, MAXSIZE = 2048GB
, FILEGROWTH = 131072KB
)
GO
EXEC dbo.sp_dbcmptlevel @dbname=N'ИмяБазыДанных', @new_cmptlevel=90
GO
IF (1 = FULLTEXTSERVICEPROPERTY('IsFullTextInstalled'))
begin
EXEC [ИмяБазыДанных].[dbo].[sp_fulltext_database] @action = 'disable'
end
GO
ALTER DATABASE [ИмяБазыДанных] MODIFY FILEGROUP [DATAGROUP] DEFAULT
ALTER DATABASE [ИмяБазыДанных] SET ANSI_NULL_DEFAULT OFF
ALTER DATABASE [ИмяБазыДанных] SET ANSI_NULLS OFF
ALTER DATABASE [ИмяБазыДанных] SET ANSI_PADDING OFF
ALTER DATABASE [ИмяБазыДанных] SET ANSI_WARNINGS OFF
ALTER DATABASE [ИмяБазыДанных] SET ARITHABORT OFF
ALTER DATABASE [ИмяБазыДанных] SET AUTO_CLOSE OFF
ALTER DATABASE [ИмяБазыДанных] SET AUTO_CREATE_STATISTICS ON
ALTER DATABASE [ИмяБазыДанных] SET AUTO_SHRINK OFF
ALTER DATABASE [ИмяБазыДанных] SET AUTO_UPDATE_STATISTICS ON
ALTER DATABASE [ИмяБазыДанных] SET CURSOR_CLOSE_ON_COMMIT OFF
ALTER DATABASE [ИмяБазыДанных] SET CURSOR_DEFAULT GLOBAL
ALTER DATABASE [ИмяБазыДанных] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [ИмяБазыДанных] SET NUMERIC_ROUNDABORT OFF
ALTER DATABASE [ИмяБазыДанных] SET QUOTED_IDENTIFIER OFF
ALTER DATABASE [ИмяБазыДанных] SET RECURSIVE_TRIGGERS OFF
ALTER DATABASE [ИмяБазыДанных] SET ENABLE_BROKER
ALTER DATABASE [ИмяБазыДанных] SET AUTO_UPDATE_STATISTICS_ASYNC ON
ALTER DATABASE [ИмяБазыДанных] SET DATE_CORRELATION_OPTIMIZATION OFF
ALTER DATABASE [ИмяБазыДанных] SET TRUSTWORTHY OFF
ALTER DATABASE [ИмяБазыДанных] SET ALLOW_SNAPSHOT_ISOLATION OFF
ALTER DATABASE [ИмяБазыДанных] SET PARAMETERIZATION SIMPLE
ALTER DATABASE [ИмяБазыДанных] SET READ_WRITE
ALTER DATABASE [ИмяБазыДанных] SET RECOVERY SIMPLE
ALTER DATABASE [ИмяБазыДанных] SET MULTI_USER
ALTER DATABASE [ИмяБазыДанных] SET PAGE_VERIFY NONE
ALTER DATABASE [ИмяБазыДанных] SET DB_CHAINING OFF
GO
USE [ИмяБазыДанных]
GO
EXEC sp_changedbowner 'sa'
GO
EXEC [ИмяБазыДанных].sys.sp_addextendedproperty @name=N'SET AUTO_UPDATE_STATISTICS_ASYNC ON'
, @value=N'Стандартное значение изменено для снижения необходимости частого обновления статистики в рамках планов обслуживания БД.'
EXEC [ИмяБазыДанных].sys.sp_addextendedproperty @name=N'SET PAGE_VERIFY NONE'
, @value=N'Стандартное значение изменено для повышения производительности IO, включать нужно при обнаружении ошибок DBCC CHECKDB или для критических бизнесу приложений.'
EXEC [ИмяБазыДанных].sys.sp_addextendedproperty @name=N'SET RECOVERY SIMPLE'
, @value=N'Для повышения производительности не критичных приложений. Если нужно восстанавливать данные на заданый момент времени, нужно выбрать другую модель и обеспечить резервное копирование журнала транзакций.'
GO
Полезные ссылки:
- Основные сведения о базах данных
- CREATE DATABASE (Transact-SQL)
- Выбор модели восстановления для базы данных
- Place Data and Log Files on Separate Drives (SQL Server BPA)
- Set PAGE_VERIFY Database Option to CHECKSUM (SQL Server BPA)
FAQ:
Вопрос 1.
В представленном выше примере сценария создания БД, есть установка значений настроек по умолчанию:
ALTER DATABASE [ИмяБазыДанных] SET ANSI_NULLS OFF
ALTER DATABASE [ИмяБазыДанных] SET ANSI_PADDING OFF
ALTER DATABASE [ИмяБазыДанных] SET ANSI_WARNINGS OFF
ALTER DATABASE [ИмяБазыДанных] SET ARITHABORT OFF
ALTER DATABASE [ИмяБазыДанных] SET CONCAT_NULL_YIELDS_NULL OFF
ALTER DATABASE [ИмяБазыДанных] SET QUOTED_IDENTIFIER OFF
Тут значения по умолчанию выставляются в OFF. Чем это обусловлено? Вопрос возник, поскольку неясны причины отклонения от ANSI стандарта, к тому же в другом регламенте рекомендуется выставлять данные настройки в ON:
SET transaction isolation level read committed;
-- Если всё совсем уж плохо - uncommitted
SET nocount -- меньше трафик
,quoted_identifier -- стандартизация кавычек
,ansi_nulls -- стандартизация сравнения с NULL
,ansi_warnings -- вывод ошибок агрегации NULL и деления на 0
,ansi_padding -- стандартизация оконечных пробелов и нулей
,arithabort -- стандартизация отката транзакций
,xact_abort -- стандартизация отката транзакций
,concat_null_yields_null -- сцепление с NULL
ON;
SET numeric_roundabort off; -- стандартизация потери точности
GO
Ответ 1.
Это установки по умолчанию, которые делает для новой базы данных соответствующий мастер SQL Server 2005 Management Studio. В регламенте предлагается документировать все отклонения от стандартных настроек, которые показаны в примере и там же есть образец документирования. На самом деле, если проще изменять установки по умолчанию, а не добавлять их в каждый сценарий создания объектов, можно создать базу с желаемым набором умолчаний. Однако, в таком случае нужно чётко понимать, что изменение настроек не приведёт к конфликтам с системными объектами или при промежуточной материализации в tempdb... Добавление установок в сценарии является более простым, понятным и, главное, управляемым путём настройки.
Tips for DBA: Статистика I/O файлов баз данных
Для оптимального размещения файлов баз данных на дисках необходимо понимать какой объём операций ввода-вывода SQL Server организует для каждого из этих файлов. Для подобных оценок SQL Server располагает всеми необходимыми средствами, о которых и пойдёт речь в этой статье. Приводимые ниже примеры предназначены для использования в SQL Server 2005 и выше. Для применения функции прежних версий ознакомьтесь со статьёй "Соответствия между системными таблицами SQL Server 2000 и системными представлениями SQL Server 2005".
В первом примере используются старые функции, но работоспособен он только начиная с SQL Server 2005 (в силу отличий в возможностях). Этот пример демонстрирует наиболее ресурсоёмкие по объёму ввода-вывода файлы баз данных, обслуживаемые текущим экземпляром SQL Server 2005. Анализируя результаты исполнения представленного ниже сценария можно понять какие файлы создают наиболее весомую нагрузку, какую нагрузку создают разные базы данных и какие именно операции преобладают для каждого из десяти файлов. В примере используется системная таблица sysaltfiles и системная функция fn_virtualfilestats, которая возвращает статистику ввода-вывода для файлов базы данных, включая файлы журналов транзакций.
|
Второй пример демонстрирует суммарную нагрузку ввода-вывода всех файлов баз данных экземпляра на каждый диск, используемый для размещения баз данных. Здесь принято допущение, что каждый логический диск обозначен буквой, т.е. если физические диски смонтированы на каталоги или не обозначены вовсе, представленные в примере сценарий нужно соответствующим образом исправить. Для простоты демонстрации мы ограничимся наиболее типичным случаем монтирования дисков на одну букву. Если на диске несколько разделов, обозначенных каждый своей буквой, это нужно учитывать при анализе результатов, суммируя нагрузку по буквам разделов одного диска. В примере используются новое динамическое административное представление sys.dm_io_virtual_file_stats, которое заменяет функцию fn_virtualfilestats. Кроме того, старую системную таблицу sysaltfiles в примере заменяет общесистемное представление sys.master_files.
|
В качестве бонуса - вариант сценария для SQL Server 2000.
|
Разработка технической документации. Руководство для технических писателей и локализаторов ПО (+CD)
Автор: Глаголев В. А. 1-е издание, 2008 год, 192 стр., формат 17x24 см, мягкая обложка, ISBN 978-5-388-00101-6, 280 руб.
Содержание.
Глава 9. Перевод, локализация, редактирование, придание юридического статуса и оформление переводов иностранной технической документации.
Как включить SQL Server 2005 в кластер
По материалам статьи Рандай Диесс (Randy Dyess): How to Guide: SQL Server 2005 Clustering
Введение
Этот документ, опубликованный в журнале «SQL Server Magazine», предназначен для технических специалистов, которые хотят разобраться с тем, как работает отказоустойчивый кластер, как SQL Server 2005 работает в кластере, как осуществляется установка и настройка SQL Server 2005 в отказоустойчивом кластере, какая практика считается лучшей для обеспечения работоспособности SQL Server 2005 в кластере.
Давно уже наметился переход от использования SQL Server 2005 для небольших решений к решениям корпоративного масштаба, критичным для бизнеса, а также возросла необходимость обеспечения высокой доступности обслуживаемых СУБД данных. В SQL Server 2005 встроены несколько механизмов, позволяющих обеспечить высокую доступность, но ни одно из стандартных средств и распространённых методов не позволяют обеспечить такой уровень доступности данных, который часто называемый «missioncritical». Это достигается только включением SQL Server 2005 в кластер.
Основы кластеризации SQL Server: Что это такое?
Отказоустойчивые кластеры (Failover clusters) – это решение для операционной системы Windows, которое позволяет администраторам создавать функциональные группы серверов, которые для приложений могут быть видимы, как суррогатные хосты, работающие на одном или более сервере, и в случае отказа этого сервера работа переносится на другой сервер группы, согласованно с прикладным уровнем. Проще говоря, кластеры обеспечивают высокую доступность приложений, работающих на серверах. Эта высокая доступность не гарантирует безостановочность работы, потому что существует некоторое время простоя, вызванное отработкой отказа; кроме того, после отказа не гарантируется тот же самый уровень работоспособности, как в штатном режиме. Включение в кластер гарантирует, что приложения кластера будут им контролироваться, и, в случае разного рода отказов, работоспособность таких приложений будет автоматически восстановлена, а они, вместе со своими ресурсами, будут запущены на другом сервере.
Существует несколько типов ресурсов и компонентов, с которыми администратору нужно познакомиться до того, как приступить к планированию решения на основе кластера. Эти ресурсы и компоненты являются основой кластерной среды и представляют собой процессы, необходимые программному обеспечению кластера, ресурсы для хранения прикладного кода и службы, используемые программным обеспечением кластера для управления составляющими кластер элементами.
Существует несколько типов ресурсов, используемых службой кластера Windows, но наиболее проблематичным из них для администраторов, устанавливающих SQL Server 2005, является группа дисковых ресурсов. Эта группа ресурсов (Рисунок 1) представляет собой один или несколько дисков, которые сгруппированы в один функциональный модуль. Группу дисковых ресурсов рассматривают, как модуль отказа кластера, и наличие такой группы ресурсов необходимо для каждого экземпляра SQL Server 2005, работающего в одном кластере.
Каждая группа ресурсов одновременно может принадлежать только одному узлу кластера, и именно перемещение группы для монопольного использования на другой узел называется отработкой отказа (failover). Когда мы имеем дело с работающим в кластере SQL Server 2005, мы говорим о группе ресурсов, которая представляет собой цельный модуль отказа. Поскольку группа ресурсов определяет модуль отказа, каждый индивидуальный экземпляр SQL Server 2005 должен иметь свою собственную группу ресурсов. Можно использовать и несколько групп ресурсов для одной инсталляции, но в таком случае нужно установить зависимости ресурсов в разных группах, так чтобы все такие группы вели себя как единый модуль отказа.
Связанные с дисковой группой ресурсы образуют зависимости, вовлеченные в отработку отказа в кластере. Такие зависимости включают и сетевые имена, и IP – адреса каждого из ресурсов, и будут отрабатывать отказ вместе с дисковой группой ресурсов.
Примечание: Экземпляры, которые размещают базы данных или файлы баз данных на нескольких дисковых массивах (для балансировки ввода-вывода между несколькими массивам), могут связать эти массивы с помощью зависимостей ресурсов. Зависимости ресурсов позволяют нескольким группам ресурсов выступать как единый модуль отказа, и они переносятся на другой узел вместе.
Примечание: есть специальная группа ресурсов, которая принадлежит всем узлам кластера. Эта специальная группа ресурсов называется Кворум - диском, и содержит базу данных, которая используется кластером в качестве контейнера для имён участвующих в кластере узлов, а так же для информации о состоянии каждого из узлов кластера.

Какие встречаются типы кластеров?
Служба кластера Windows предлагает несколько различных типов и режимов работы кластера: кластер с одним узлом, несколько узлов в кластере, мажоритарная группа узлов (Majority NodeSet) кластера и кластер с географически разнесёнными узлами. Каждый из этих типов кластера имеет своё предназначение, а большинство кластеров, используемых для обеспечения высокой доступности SQL Server 2005, имеют один или несколько узлов, поэтому, этот документ посвящён соответствующим двум типам кластера. Для получения информации о других типах кластера обратитесь к справочной документации по Windows Server 2003.
Кластер одного узла
Кластер из одного узла (Рисунок 2) – это такая кластерная конфигурация, в которой активен только один сервер, а ещё один или несколько серверов "не активны". Неактивный сервер – это такой сервер, на котором нет активных (выполняющихся) приложений, но операционная система запущена. Неактивный сервер "поджидает", когда активный сервер попадёт в такое состояние, которое обычно вызвано выходом оборудования или программного обеспечения из строя, и начинает сам обслуживать приложение, которое в обычных условиях обслуживается активным сервером. В случае обнаружения состояния отказа, неактивный сервер становится активным сервером, и все необходимые приложениям ресурсы передаются для монопольного управления новому активному серверу, в то время как все подключения, которые существовали на старом активном сервере, повторно переустанавливаются с новым активным сервером.

Кластер нескольких узлов
Такой кластер может включать от двух до восьми активных серверов (Рисунок 3), которые работают в одной кластерной группе. Все эти активные серверы обслуживают свои приложения и каждый занят своей работой. Каждый активный сервер может быть настроен хостом приложений для одного или нескольких других активных серверов, в случае их отказа, или каждый активный сервер можно настроить так, чтобы он использовал один активный или неактивный сервер в качестве хоста приложений, если произойдёт отказ (Рисунок 4).

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

Три наиболее значимые проблемы кластеров
При выборе типа кластера для ваших приложений баз данных SQL Server 2005, особое внимание стоит обратить на использование ресурсов каждого отдельного узла кластера. Утилизации ресурсов СУБД нужно уделить особое внимание, а если на сервере несколько кластерных систем, то в случае отказа в модели кластера с несколькими узлами при распределении и использовании ресурсов нужно быть особенно осторожным.
Процессор
Планирование использования процессорных ресурсов - одно из трех основных направлений при создании кластера. Используемая в не кластерных системах практика выбора такой процессорной конфигурации, чтобы процессоры использовались на 60 - 80 процентов все еще приемлема, но эта норма использования теперь должна учитывать и случаи отказа.
Это означает, что если оставить каждому узлу нагрузку процессоров в 60 – 80 процентов, они не смогут обслужить рабочую нагрузку после отработки отказа и перемещения к ним отказавшего экземпляра. Что нужно предпринять? Чтобы правильно оценить величину нагрузки на процессоре после добавление ресурсов с отказавшего узла, нужно обеспечить такой резерв, чтобы суммарная утилизация процессоров вместе с ресурсами отказавшего узла, в самом плохом варианте развития событий, никогда не превышала 80 процентов утилизации процессоров, даже если нормальная утилизация на сервере держится ниже 40 процентов. Это позволит учесть практически все возможные последствия отказов.
Память
В кластере, как и в случае с процессорными ресурсами, для обеспечения его работы в случае отказа очень важно грамотное планирование ресурсов памяти. Администратор должен чётко понимать как память узла будет использоваться приложениями в случае отработки отказа. Интенсивно использующие память прикладные программы, такие как SQL Server 2005, при отказе используют столько памяти, сколько смогут получить, и потому после перемещения отказавший экземпляр SQL Server 2005 будет запущен и начнёт работу с таким количеством памяти, который ему достанется от других экземпляров. Если памяти мало, могут возникнуть проблемы с производительностью приложений.
Примечание: Одним из новшеств SQL Server 2005 является то, что начиная с этой версии появилась возможность использования динамической памяти в кластерной конфигурации.
При настройке SQL Server 2005 в кластере с несколькими узлами, администраторам базы данных советуют установить значение параметра глобальной конфигурации сервера «max server memory» таким, чтобы оставался запас для сервера, который будет запущен на этом узле в случае отказа его оборудования. Также рекомендуется задать значение для «min server memory», чтобы не позволить экземпляру с отказавшего узла захватить всю доступную память и, тем самым, повлиять на производительность уже работающих на узле приложений.
Диски
Часто, при создании кластеров нескольких узлов, администраторы сталкиваются с проблемой недостатка букв алфавита для дисковых устройств. В операционной системе Windows группам ресурсов дают разные имена дисков на разных узлах кластера. Поскольку число групп ресурсов увеличивается вместе с увеличением числа установленных экземпляров SQL Server 2005 или из-за применения дизайна с использованием для базы данных нескольких файловых групп, при увеличения числа узлов в кластере, ограничение в 26 буквенных имен дисков может стать проблемой. Администратор баз данных совместно с системным администратором, который часто устанавливает Windows - кластер до установки туда SQL Server 2005, должны убедиться, что буквенных имен дисков достаточно много, они доступны и размеры этих дисков достаточно велики, чтобы вместить файлы баз данных.
Почему нужен кластер?
Основная цель использования кластера – обеспечение высокой доступности базы данных. Сегодня для приложений всё чаще выдвигаются такие бизнес – требования, чтобы был обеспечен доступ к данным в режиме 24/7, и недоступность базы данных из-за выхода из строя оборудования или из-за необходимости выполнения операций по обслуживанию сервера часто просто недопустима. Использование кластера серверов баз данных может помочь предотвратить недоступность данных из-за выхода из строя сервера, вызванного сбоем в программном обеспечении, необходимостью выполнения операций по обслуживанию сервера или из-за потери сетевого соединения с сервером.
Однако кластер не гарантирует, что никогда не произойдёт отказ сервера, он помогает уменьшать число выходов из строя и предоставляет администраторам базы данных и сервера возможности вывести сервер из состояния отказа без потерь.
Выгоды от кластера - Top 3
Кластер даёт довольно много преимуществ администраторам сервера и баз данных, но главными преимуществами, часто цитируемыми в контексте использования кластера серверов с SQL Server 2005, являются возможность без остановки приложений инсталлировать сервисные пакеты SQL Server 2005 или Windows, а также защита от сбоев операционной системы.
Сервисные пакеты SQL Server 2005
Несмотря на то, что команда разработки и поддержки SQL Server 2005 прилагает максимум усилий к тому, чтобы при установке сервисных пакетов не возникало простоя в работе приложений, все вышедшие на момент написания этой статьи сервисные пакеты к SQL Server 2005 требуют, чтобы администратор баз данных запланировал перезапуск обновляемых служб SQL Server 2005. При использовании кластера администраторы могут установить сервисный пакет практически без простоя приложений, инициируя отказ узла, вследствие которого база данных будет обслуживаться другим узлом, что позволит заняться установкой сервисного пакета на первом узле. В это время база данных будет доступна на втором узле, а экземпляр на первом узле может быть недоступен на время перезагрузок или иных действий.
Сервисные пакеты Windows
Как и при установке сервисных пакетов SQL Server 2005, сервисные пакеты операционной системы Windows становятся причиной простоя приложений, который может возникнуть во время установки и перезагрузки сервера после инсталляции такого пакета. Возможность инициации отказа базы данных, который переместит её ресурсы на другой узел, позволяет избежать простоя в работе с базой данных, пока операционная система Windows будет обслуживаться администратором.
Сбои Windows
Главным преимуществом от установки ваших серверов баз данных в кластер является исключение длительного простоя в работе приложений, вызванного всевозможными не фатальными отказами аппаратных средств, которые весьма вероятны для современных серверов, сложность которых постоянно растёт. Часто совсем маленькая проблема в состоянии вывести операционную систему из строя на длительный срок, причём, подобные отказы не нуждаются в тщательном расследовании или переустановке компонент или даже всего сервера, но они бывают достаточно серьезны, чтобы приложение оказалось неработоспособным на недопустимое время. Кластер может помочь в предотвращении многих подобных проблем в работе приложений, поскольку ресурсы приложения могут быть быстро переброшены на другой узел кластера, и часто сделать это можно даже без потери клиентских подключений.
Как устроен кластер?
Для связи между узлами кластер использует локальную сеть, и по ней же посылаются сигналы «жизни» от сервера к серверу. Такие сигналы нужны для проверки работоспособности узлов и способности их к обслуживанию приложений на уровне операционной системы и на прикладном уровне (SQL Server 2005). На уровне операционной системы этот сигнал служит для постоянного поддержания связи между узлами кластера и проверки правильности их работы.
После установки SQL Server 2005 в кластере, входящий в комплект программного обеспечения кластера Service Control Manager начинает посылать каждые пять секунд сигнал каждому активному экземпляру SQL Server 2005 (Рисунок 5). Этот сигнал, называемый "LooksAlive", практически не требует ресурсов для обработки и не выполняет других действий кроме проверки существования и работоспособности экземпляров SQL Server 2005. В задачу обмена сигналами жизни не входит проверка того, может ли экземпляр исполнять какие – либо более сложные операции. Для определения фактической работоспособности экземпляра SQL Server 2005 и его способности исполнять операции, каждые 60 секунд выполняется более глубокая проверка “IsAlive”, которая включает в себя запрос SELECT @SERVERNAME, и проверку возвращаемого значения. Если ответа нет, проверка IsAlive повторяется еще пять раз, прежде чем кластер попытается запустить ресурс на другом узле.
При отработке состояния отказа, кластер передаёт все необходимые ресурсы в монопольное владение другому экземпляру SQL Server 2005. Каждому экземпляру SQL Server 2005 принадлежит собственный набор дисков, называемый группой ресурсов (resource group), и именно эта группа ресурсов передаётся в монопольное владение другому узлу. После того, как группа ресурсов будет передана, экземпляр SQL Server 2005 инициирует процедуру стартовой регенерации (recovery), после исполнения recovery для системных баз данных, SQL Server 2005 переходит в состояние готовности к работе и обслуживанию запросов пользователей. Служба сервера баз данных должна быть запущена, а это значит, что должна быть доступна и база данных master. После обеспечения доступности базы данных master, служба сервера баз данных начинает запуск и регенерацию пользовательских баз данных.
Клиентские приложения должны будут выполнить повторное подключение, взяв за основу нового подключение конфигурацию приложения. Когда приложение соединяется с экземпляром SQL Server 2005, они используют виртуальный, а не физический IP - адрес. Фактическая принадлежность виртуального IP - адреса управляется кластером, так что приложения никогда не будут знать, на каком узле фактически находится адресуемый экземпляр. Чтобы подключится к службе SQL Server 2005 можно использовать её физический IP - адрес, но если так сделать, к ней невозможно будет подключиться в случае аппаратного отказа, т.е. если узел, являющийся основным для службы SQL Server 2005, откажет по какой – либо причине.

Как установить SQL Server 2005 в кластере
При установке SQL Server 2005 без кластера всё происходит просто и понятно, а установка SQL Server 2005 в кластер добавляет только несколько специфических шагов. Поддержка отказоустойчивого кластера осуществляется в SQL Server 2005 Enterprise Edition (поддержка до 8 узлов кластера), Developer Edition (поддержка до 8 узлов кластера) или Standard Edition (поддержка до 2 узлов кластера), а также необходима поддержка кластеризации операционной системой Windows, это следующие редакции: Windows Server 2003 Enterprise Edition, Windows 2003 Datacenter Edition, Windows 2000 Advanced Server или Windows 2000 Datacenter Edition.
Администратор, устанавливающий SQL Server 2005 в кластер, должен координировать свою работу с администраторами сервера, чтобы задать правильные номера групп ресурсов, имена дисков, размеры дисков и IP - адреса, необходимые для подключения к экземпляру SQL Server 2005. Администратор баз данных должен определиться с набором компонент, которые он должен будет установить, и понять, как эти компоненты поведут себя в кластере.
Установка ядра базы данных
Администраторам баз данных, которые только готовятся приступить к установке SQL Server 2005 в отказоустойчивом кластере, будет приятно узнать, что программа установки SQL Server 2005 умеет определять наличие кластера и автоматически устанавливать экземпляр SQL Server 2005 на обоих узлах кластера и правильно всё для этого настраивать.
При установке кластера с несколькими узлами, необходимо установить активный экземпляр на первый узел, а затем активные экземпляры на других узлах.
Примечание: допускается существование в кластере только одного экземпляра по умолчанию, это означает, что в кластере вы должны устанавливать именованные экземпляры на всех узлах, кроме одного.
Примечание: Пожалуйста, перед установкой экземпляра ядра баз данных SQL Server 2005 в кластер, изучите следующую статью SQL Server 2005 Books Online: «Как создать новый отказоустойчивый кластер SQL Server 2005 (программа установки)».
Установка Analysis Services
Как и с ядром баз данных, мастер установки SQL Server 2005 устанавливает экземпляр Analysis Services на обоих узлах кластера. Пожалуйста, предварительно ознакомьтесь с материалами, опубликованными в статье SQL Server 2005 Books Online: «Как установить службы Analysis Services на отказоустойчивом кластере».
Установка Reporting Services
К сожалению, Reporting Services не поддерживается кластером и его нужно устанавливать как автономный компонент на всех узлах. Reporting Services сможет использовать базы данных кластера, но когда случится отказ узла, к которому подключается служба Reporting Services, экземпляры отказавшего узла не будут автоматически переподключаться. Для восстановления подключения нужно соединяться с новым узлом, используя новый IP - адрес.
Установка SQL Server Integration Services
Чтобы установить SSIS, нужно установить SSIS на всех активных узлах, а затем сделать службу SSIS кластерным ресурсом. Чтобы сделать SSIS кластерным ресурсом, нужно выполнить несколько шагов:
- Открыть Cluster Administrator.
- В меню File выбрать пункт New, а затем щелкнуть по Resource
- На странице New Resource мастера ресурсов (Resource Wizard), введите имя нового ресурса и выберите в качестве типа службы “Generic Service”. Измените группу на группу SQL Server. Нажмите Next.
- На странице Possible Owners, добавьте или удалите узлы кластера, которые возможно будут владельцами нового ресурса. Нажмите Next.
- Добавить зависимость можно на странице Dependencies, выбрав из списка Available resources новый ресурс, а затем нажав кнопку Add. В случае отказа, SQL Server 2005 и общий диск, на котором хранятся пакеты SSIS, должны стать доступны до того, как станет активен SSIS. После настройки зависимостей, нажмите кнопку Next.
- На странице Generic Service Parameters, введите в качестве имени службы MsDtsServer, и нажмите кнопку Next.
- На странице Registry Replication нажмите Add, чтобы добавить ключ реестра, который идентифицирует файл конфигурации SSIS.
- Этот файл должен быть расположен на общем диске, который принадлежит той же группе, что и SSIS, и при отказе будет перенесён на тот же узел, что и SSIS.
- В диалоговом окне Registry Key, введите SOFTWARE\Microsoft\MSDTS\ServiceConfigFile. Нажмите OK, а затем нажмите кнопку Finish. Служба SSIS должна добавиться под управление кластера.
- Найдите файл конфигурации по пути %ProgramFiles%\Microsoft SQL Server 2005\90\DTS\Binn\MsDtsSrvr.ini.xml, и скопируйте его на общий диск.
- На общем диске создайте новую папку с именем Packages и дайте на неё права List Folders и Write встроенной группе Users.
- Откройте в текстовом или XML - редакторе файл конфигурации на общем диске и замените значение элемента ServerName на имя виртуального SQL Server 2005, который находится в этой же группе.
- Замените значение элемента StorePath на полностью-квалифицированный путь к созданной ранее папке Packages на общем диске.
- Откорректируйте значение ключа системного реестра HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTS\ServiceConfigFile, записав там полностью квалифицированное имя и путь к файлу конфигурации сервиса на общем диске.
- В приложении Cluster Administrator, выберите службу SSIS, нажмите не ней правую кнопку мыши, и выберите в выпадающем меню пункт Bring Online. Служба SSIS должна стать активной, как и служба кластера.
Установка инструментария и электронной документации
Программа установки SQL Server 2005 не устанавливает компоненты инструментов и документацию по SQL Server 2005 на все узлы кластера. Мастер устанавливает эти компоненты только на том узле, на котором была инициализирована подпрограмма установки. Если инструменты и документация нужны и на других узлах, там их нужно установить вручную после успешного окончания установки SQL Server в кластере.
Установка MSDTC
Microsoft Distributed Transaction Coordinator часто используется SQL Server 2005 для задач поддержки распределенных транзакций. Администраторы баз данных и системные администраторы должны чётко понимать, что MSDTC не будет установлен на кластере без исполнения нескольких дополнительных шагов, которые они должны правильно выполнить. В случае с кластерами серверов Windows 2003, MSDTC может быть установлен на всех серверах кластера. В прежних версиях операционных систем, MSDTC нужно было устанавливать на каждом сервере отдельно. Windows 2003 предоставляет два варианта установки MSDTC: использование для установки MSDTC в кластере программы Cluster Administrator или программы Cluster.exe, с помощью которой тоже можно установить MSDTC в кластере.
Обратите внимание: перед началом установки MSDTC в кластере Windows 2000 или Windows 2003, ознакомьтесь со следующими статьями Microsoft:
- How to configure Microsoft Distributed Transaction Coordinator on a Windows Server 2003 cluster
- How to configure MSDTC in a Windows 2000 cluster environment
- How to Cluster MSDTC
- Как установить координатор распределенных транзакций (Майкрософт)
Хорошая практика
Операционная система Windows Server 2003
- Лучше потратьте больше времени на разработку и планирование кластера, чем на само создание кластера.
- Все аппаратные средства, используемые в кластере, должен входить в лист совместимости (HCL) кластера Windows 2003, причём, в качестве модулей, а не только в качестве самостоятельных частей.
- Каждый узел кластера долж



