пятница, 16 сентября 2011 г.

SQL 2008 R2 Cluster installation step-by-step: пошаговая инструкция по инсталляции кластера SQL 2008 R2

Инсталляция кластера SQL 2008 R2 достаточно проста, но пропустив некоторые шаги можно потом потратить много времени и усилий на исправление, так что неплохо иметь пошаговую инструкцию по инсталляции. Подразумевается, что уже имеется как минимум один узел (node) с установленным Windows 2008 R2 и подключенный к shared storage

1. Настройка MSDTC
Имеется большое количество приложений, использующих распределенные транзакции. Я считаю хорошим тоном ограничивать диапазон портов, которое может использовать MSDTC (по умолчанию это значение равно 1000-65536, что вызывает усталое отвращение у сетевого администратора). Лучше всего сделать это до кластеризации MSDTC.

Идем в Administrative tools - Component Services - правой мышкой на My Computer и затем Default Protocols, Properties.


Добавляем используемый диапазон портов (я делаю 5000-5200). Теперь сетевому администратору понадобится открыть только порты 135,5000-5200 для использования MSTDC.

2. Настройка shared storage (общие диски)

Идем в управление дисками. Картинка будет выглядеть приблизительно так:


Назначаем буквы и названия для диска кворума (Q)

и первого диска для инстанса (R).

Поскольку инстансов может быть много, а букв для дисков только 26, мы используем mounted volume, чтобы разделить по физическим дискам файлы баз данных и их логи. Для этого мы создадим папки на диске R:

и примонтируем следующий общий диск к папке Log:


Диск R должен выглядеть приблизительно так:

Кстати, MS SQL при установке не может назначить разрешения для mounted volumes, поэтому необходимо сделать это вручную (назначив Full Access на корень этого диска для NT SERVICE\MSSQL$(имя инстанса)). Другие проблемы, возникающие при установке на mounted volumes хорошо описаны здесь.

3. Создание Windows failover cluster

Добавляем необходимые компоненты в Server Manager - Failover Clustering and .NET 3.5:



Теперь можно ткнуть правой мышкой на Failover Cluster Manager и Validate a Configuration.

Добавьте в список узлы, которые вы хотите проверить на "подходящесть" к включению в кластер.
По окончанию процесса будет выдан отчет, который надо внимательно поглядеть и устранить фатальные ошибки и, желательно, нефатальные тоже.


Если все замечательно, то можно начинать создавать кластер:


Выбираем узлы - члены кластера:

Далее выбираем имя кластера и его IP-адрес. Он будет использоваться для подключения консоли управления кластером, НО НЕ ДЛЯ MS SQL.

Кластер создан:

Теперь нужно добавить общие диски:

В разделе Storage появляется симпатичная картинка, типа этой:


Поскольку у нас есть раздел, являющийся Mounted Volume, он зависит от того раздела, на котором находится его смонтированная папка. Необходимо сконфигурировать зависимость (чтобы диск с папкой поднимался раньше). Для этого дважды кликаем на зависимый диск (которому мы НЕ присваивали букву) и создаем зависимость:

Далее необходимо настроить кворум. Выбираем Configure Cluster Quorum Settings:


На Technet можно найти описание различных конфигураций для кворума, но для конфигурации с двумя узлами подходит второй режим:

Выбираем диск для кворума:

Ваша картинка с дисками станет приблизительно такой:


4. Установка MS SQL 2008 R2 на первый узел в кластере

Запускаем setup и выбираем

Как устанавливается MSSQL знает каждый ребенок, поэтому остановимся на ключевых моментах:

В отчете имеется предупреждение о том, что отсутствует MSDTC. Это нормально, мы его установим позже.

Здесь мы задаем имя SQL сервера (по которому к нему будем обращаться) и название инстанса (если мы используем не default):


Далее выбираем рабочий диск для нашего инстанса:


Устанавливаем IP-адрес, по которому будем подключаться к SQL Server:


Не забываем установить пути к файлам (на общих дисках):


Остальное все сами знаете, как сделать. После установки окошко Cluster Manager будет выглядеть приблизительно так:


5. Установка MSDTC в кластере

Тут все просто - выбираем в консоли наш кластер, Services and Applications и в правой части консоли - Add a resource. В списке выбираем Add Distributed Transaction Coordinator.
Затем необходимо добавить зависимости к MSDTC. Ему необходимо сетевое имя и общий диск:


Затем можно правомышкоткнуть на него и Bring this resource online. Оно будет выглядеть приблизительно так:
6. Добавление узла в кластер

Тут тоже все достаточно прозрачно. Для начала желательно сделать Validate a Configuration для имеющейся ноды и той, которую мы планируем включать. Если проверка не выявила никаких проблем, то правой мышкой на раздел Nodes - add node. По окончании установки отчет сообщит, что на свежеподключенной ноде отсутствует MS SQL:

Подключаемся к этой ноде, запускаем setup и выбираем:

Процесс установки аналогичен. Выбираем, к какому кластеру мы ставим узел:
Если вы использовали доменный аккаунт для сервиса (а это рекомендуется), то надо будет еще раз набрать его пароль:

7. Конфигурация Kerberos

В случае, когда в домене используется Kerberos, в качестве сервисного аккаунта использован доменный аккаунт (для встроенных аккаунтов типа Local System конфигурировать Kerberos не требуется) и основной протокол подключения к кластеру TCP/IP (а не Named Pipes), следует дополнительно настроить Kerberos, используя утилиту setspn (подробную информацию и ссылку для скачивания можно найти тут). Вкратце, необходимо выполнить следующие действия:

1. Сделать пинг кластера по FQDN и удостовериться, что имя корректно транслируется DNS сервером:

ping mysqlcluster.mydomain.local

2. Сделать реверсивный пинг и удостовериться, что IP-адрес корректно транслируется DNS сервером в FQDN:

ping -a 10.10.0.1

Если в обоих случаях все получилось хорошо, то

3. Скачать утилиту setspn и сконфигурировать SPN:

setspn -A MSSQLSvc/mysqlcluster.mydomain.local <тут имя доменного аккаунта, под которым стартует сервис>

4. Если SQL cluster instance использует нестандартный порт, то дополнительно надо еще сделать

setspn -A MSSQLSvc/mysqlcluster.mydomain.local:<тут номер порта> <тут имя доменного аккаунта, под которым стартует сервис)

Шаги 1-4 необходимо повторить для каждого установленного инстанса.

По окончанию кластер будет готов.

7 комментариев:

artemk комментирует...

Спасибо за пост! Разжёвано для самых^w очень хорошо, сам бы не допёр наверно, как это поставить.

Andrey комментирует...

Пожалуйста, всегда приятно, когда это кому-то еще пригодилось :) Как я упоминал, в принципе ничего сложного там нет, надо просто не упустить тонкости. Например, этот момент с SPN я добавил относительно недавно, когда очень узкая группа скриптов стала вызывать ошибки аутентификации (до этого несколько лет все работало нормально)

Unknown комментирует...

Добрый день!

Спасибо за статью. Очень помогла при генерации кластера на Win2008. Для того кто долго делал бизнес критикал системы на Win2003 очень хорошо показаны новые окошки и менюшки. Прям курс переквалификации)))

Не совсем понятно про MSDTC. Зачем так заморачиваться если heartbeat - это отдельный провод между нодами или строго изолированная сеть в своём VLAN (или даже в отдельном свитче)? Тем более, что SQL это всегда failover cluster, а их почти никогда не делают территориально распределёнными. Максимум в разных зданиях. Поэтому и heartbeat очень редко выводят в общую сеть. Но всё равно замечание про MSDTC нужное!

Еще раз огромное спасибо!!!

Andrey комментирует...

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

Unknown комментирует...

Спасибо :)
Пригодилось :)

Unknown комментирует...

Оживлю немного, вот тут вообще рекомендация не кластеризовывать MSDTC: https://blogs.msdn.microsoft.com/alwaysonpro/2014/01/15/msdtc-recommendations-on-sql-failover-cluster/ - 5-й вопрос

Andrey комментирует...

Там кажется написано, что либо ставить MSDTC для каждого инстанса или не ставить вообще. У меня как раз вариант с одним инстансом, так что MSDTC тоже один. Без него распределенные транзакции не работают.