Архив метки: MSSQL2008

Нюанс при развертывании MSSQL кластера под Windows Server 2008

Столкнулся с некоторой тонкостью в настройке кластеризованного приложения, в частности MSSQL2008. В один прекрасный день при переключении SQL с ноды на ноду, приложение не захотело стартовать.
На резервной ноде запустились ресурсы Name, Cluster Disk, Analysis Services. А вот сам SQL Server и соответственно SQL Server Agent запуститься отказались. При попытке вернуть их на первую ноду они так-же отказались стартовать.
Журнал ошибок приложений по этому поводу выдал следующее:

Log Name: Application
Source: MSSQLSERVER
EventID: 19019
[sqsrvres] ODBC sqldriverconnect failed

Log Name: Application
Source: MSSQLSERVER
EventID: 19019
[sqsrvres] checkODBCConnectError: sqlstate = 28000; native error = 4818;
message = [Microsoft][SQL Server Native Client 10.0][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.

Log Name: Application
Source: MSSQLSERVER
EventID: 18456
Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'.
Reason: Token-based server access validation failed with an infrastructure error.
Check for previous errors. [CLIENT: 78.109.91.140]

И так на каждой ноде, где приложение пытается стартовать.
Решил покопаться в системном журнале событий кластерных нод с пристрастием, и обнаружил следующие интерсные события:

Log Name: System
Source: FailoverClustering
EventID: 1196
Cluster network name resource 'SQL Network Name (sql)' failed registration of one or more associated DNS name(s) for the following reason:
DNS operation refused.
.
Ensure that the network adapters associated with dependent IP address resources are configured with at least one accessible DNS server.

Log Name: System
Source: FailoverClustering
EventID: 1196
Cluster network name resource 'procDtc' failed registration of one or more associated DNS name(s) for the following reason:
DNS operation refused.
.
Ensure that the network adapters associated with dependent IP address resources are configured with at least one accessible DNS server.

Покопавшись в TechNet по данным событиям, нашел что связано это может быть либо с некорректными записями в реестре, либо с некорректно работающим или отсутствующем DNS.
Записи в реестре оказались на месте. Поэтапная проверка DNS ничего не выявила (DNS сервера работают, на запросы отвечают, ресурсные записи кластерных приложений на месте, имена кластерных приложений резолвятся в прямом и обратном направлениях).
Казалось бы все нормально, но меня смутила запись "DNS operation refused". Стало очевидным, что кластерный сервис просто не может обновить регистрацию кластерных имер ресурсов в DNS.

Решение этой проблемы следующее:
Удалить существующие записи в DNS на все A-записи, касающиеся кластерных ресурсов (в моем случае это были sql и procDtc) и создать их заново, поставив разрешение обновлять DNS записи авторизованным пользователям с общим именем владельца (Allow any authenticated user to update DNS records with the same owner name).
Того что при операции удаления-создания записей что то в кластере упадет, бояться не надо - ничего не упадет.

Соответствующее изменение внесу в свою статью о развертывании SQL кластера.

Развертывание кластера SQL2008

Я производил развертывание на оборудовании HP Blades с общим сторэйджем на баще HP MSA2000sa.

Требования:
1. Развернутый Node and Disk Majority кластер из двух нод
2. Кластеризованный диск для хранения данных SQL (у меня это волюм на 500 гигабайт)
3. Кластеризованный диск размером в 100 мегабайт (размер задавал сам, сколько нужно реально - зависит от нагрузок по транзакциям) для хранения метаданных координатора распределенных транзакций
4. Зарезервированный IP адрес для организации опосредованного кластерного сервера с сервисом MSSQL2008
5. Зарезервированный IP адрес для организации опосредованной кластерной машины для координатора распределнных транзакций
6. Зарезервированные имена для этих серверов
7. Дистрибутив MSSQL2008 Enterprice Edition, доступный на обоих нодах кластера
8. Наличие технологической учетной записи в домене, которой даны права локального администратора на каждой ноде. Пусть это будет SQLSERVICE
9. Установленный на обоих нодах .Net Framework 3.5 SP1

Установка:
1. Кластеризуем координатор распределенных транзакций. В оснастке Failover Cluster Management в services and applications по правой кнопке устанавливаем Distributed Transaction Coordinator. Выбираем наш диск в 500 мегабайт. После завершения смотрим чтобы он был пристыкован к первой ноде. Исправляем по мере необходимости
2. Заходим на первую ноду и запускаем инсталляцию MSSQL2008. Здесь надо обратить внимание, чтобы кластерные диски были пристыкованы к этой ноде. Обращаем внимание так же на наличие prerequistities. То чего не будет хватать - MSSQL2008 сам скажет и доустановит
3. В меню Installation интерактивной формы визарда выбираем New SQL Server failover cluster installation. Ждем окончания прогона первичных тестов
4. Ставим клиентские компоненты, ждем окончания подробных тестов, исправляем ошибки или варнинги. Крайне желательно чтобы все эти тесты были зелеными
5. Выбираем необходимые компоненты MSSQL для установки кластера
6. Задаем сетевое имя сервера SQL - то что мы зарезервировали вначале. Инстанс и пути можем оставить по умолчанию
7. Выбираем кластерный диск где будут храниться данные (зеленым подсветит те, которые можно выбрать)
8. Указываем IP адрес, который мы заранее зарезервировали для кластерного ресурса MSSQL
9. На странице политик безопасности оставляем Service SIDs
10. На странице запуска сервисов указываем на всех незатененных сервисах наш SQLSERVICE как аккаунт от которого службы будут стартовать
11. Режим авторизации можно выбрать любым. я предпочитаю смешанный. В закладке Data Directories проверим что данные будут положены на кластерный диск
12. В настройках служб анализа добавляем администратором служб свою учетную запись, либо учетную запись администратора домена
13. Reporting Services оставляем по умолчанию
14. Error Reporting настраиваем по желанию
15. Ждем завершения инсталляции
16. Заходим на вторую ноду и запускаем инсталляцию MSSQL2008. Важно чтобы нода была пассивной (все диски и сервисы должны принадлежать в этот момент первой ноде)
17. В меню Installation интерактивной формы визарда выбираем Add node to SQL Server failover cluster. Ждем окончания прогона первичных тестов
18. Ставим клиентские компоненты, ждем окончания подробных тестов, исправляем ошибки или варнинги. Крайне желательно чтобы все эти тесты были зелеными
19. В Cluster Node Configuration убеждаемся что выбран правильный кластер
20. В Service Accounts для незатененных полей паролей вводим пароль нашего аккаунта SQLSERVICE
21. Error Reporting настраиваем по желанию
22. Дожидаемся окончания установки второй ноды в кластере

Установка SQL 2008 Failover Cluster завершена.