RDS Connection Broker High Availability не может подключиться к базе данных

Вопрос или проблема

Сценарий

Вы хотите настроить брокера подключений служб удаленного рабочего стола в режиме высокой доступности, используя (по крайней мере) Windows Server 2016.

Вы выполнили и проверили все предварительные требования:

  • база данных доступна по сети (все файрволы и маршрутизация в порядке),
  • разрешения базы данных в порядке (db_creator для группы, содержащей все целевые хосты RDS CB),
  • драйвер SQL установлен, а строка подключения правильная.

Вы начинаете настраивать высокую доступность либо через мастер:

введите описание изображения здесь

либо через PowerShell:

Set-RDConnectionBrokerHighAvailability `
    -ClientAccessName "rds.contoso.com" `
    -DatabaseConnectionString "DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=rdscbha"

Вы пропускаете “Папку для хранения базы данных” или -DatabaseFilePath, потому что это необязательно, и ваш MSSQL уже настроен на то, где по умолчанию хранить новые базы данных.

Проблема

Вы получаете следующее сообщение об ошибке в интерфейсе:

Указанная база данных в строке подключения к базе данных недоступна с сервера брокера подключений RD. Убедитесь, что SQL Server доступен в сети, SQL Server Native Client установлен на сервере брокера подключений RD, а брокер подключений RD имеет права на запись в базу данных.

или следующую ошибку в PowerShell:

Указанная база данных в строке подключения DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=master недоступна с сервера брокера подключений RD RDS-01.CONTOSO.COM. Убедитесь, что сервер базы данных доступен в сети, SQL Server Native Client установлен на всех серверах брокера подключений RD, а учетные записи компьютеров серверов брокера подключений RD являются членами группы серверов управления RDS на сервере базы данных.
    + CategoryInfo          : NotSpecified: (:) [Write-Error], RDManagementException
    + FullyQualifiedErrorId : SetRdmsHighAvailability,Microsoft.PowerShell.Commands.WriteErrorCommand
    + PSComputerName        : localhost

Диагностика

Вы действительно уверены, что всё в порядке. Вы можете запустить PowerShell от имени пользователя SYSTEM с помощью psexec -is powershell и создать базу данных по своему усмотрению с помощью инструментов SQL PowerShell и правильного драйвера.

Ничего не работает.

Однако одно кажется странным. Вы проверяете свой файрвол с помощью мастера интерфейса или команды PowerShell, и вы видите абсолютно никаких попыток подключения к SQL серверу.

Что не так?

Несмотря на то, что говорит Microsoft в интерфейсе или в команде PowerShell…

…путь к базе данных не является необязательным!

Да. Как только вы добавляете путь к базе данных, всё начинает работать!

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

C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA

если ваши журналы имеют другой путь по умолчанию, вновь созданная база данных будет создана правильно:

C:\ClusterStorage\SQL Log\MSSQL13.MSSQLSERVER\MSSQL\DATA

Эта тема может быть немного устаревшей, но мы только недавно обновили до 2016 RD Server Farm, и все другие материалы, которые я нашел при поиске в Google, не сработали; ваш ответ наконец-то указал мне на решение. Поэтому я решил поделиться дополнительной информацией, если кто-то все еще планирует обновление.

Я хотел бы добавить, что также не работало, когда я пытался использовать другой путь, отличающийся от пути к корневой директории базы данных по умолчанию. Вы можете получить ваш путь в параметрах сервера в MS SQL Server Management Studio.

В этой папке есть пользователь учетной записи службы с именем MSSQLSERVER с полными правами, брокер, по-видимому, использует его для создания базы данных. В каждой другой папке на сервере появлялась та же ошибка, описанная выше.

Дополнительная информация:
Когда вы хотите добавить второй сервер к HA брокеру, сначала нужно сопоставить группу безопасности RDS Broker как dbowner для вновь созданной базы данных. Это не происходит автоматически.

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

DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com,1434;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;Database=RDSDB

Дело в разрешениях внутри экземпляра MS SQL. Вы должны перейти в SQL → Безопасность → Учетные записи → RemoteAppBrokersGroup → Свойства → Securables → Создать любую базу данных (вы не получите этот флажок автоматически при назначении разрешений dbcreate)

Потратил некоторое время на эту ошибку, и в моем случае проблема была с именем учетной записи входа в Windows Authentication. Общая рекомендация заключается в том, чтобы добавить сервер брокера RD в группу безопасности, но в моем случае сервер, добавленный в встроенную группу “Серверы управления RDS”, просто не был распространен на базу данных, и вновь созданная группа просто не работала по неизвестной причине. Указание имени компьютера напрямую как DOMAIN\Server$ работает даже несмотря на то, что выбор компьютера недоступен через “Обзор”.

Итак, вот правильный рабочий процесс, который сработал с Server 2016 и SQL 2019:

  • Создайте пустую базу данных
  • Создайте новую учетную запись и добавьте сервер брокера RD как DOMAIN\Server$ (просто введите, не нажимайте “Поиск…”)
  • В учетной записи под сопоставлением пользователей выберите новую БД и роль db_owner
  • На сервере брокера RD установите последнюю версию ODBC (v18 работает)
  • В мастере брокера RD выберите выделенный сервер

Строка подключения:

Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;App=Remote Desktop Services Connection Broker;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;

Было подтверждено, что:

  • Путь к файлам базы данных не требуется
  • Нет необходимости указывать “Создать любую базу данных” в качестве securable
  • Нативный SQL клиент (SNAC) не требуется и даже не возможен на Server 2016+

Вот скрипт PowerShell для тестирования строки подключения. Мастер брокера всегда показывает одну и ту же ошибку по какой-то причине (теплый привет Microsoft…), поэтому скрипт оказался полезным для выявления реальных проблем, таких как синтаксис строки или настройки шифрования на SQL сервере:

# Определить строку подключения
$connectionString = @"
Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;App=Remote Desktop Services Connection Broker;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;
"@

# Запрос для тестирования соединения
$query = "SELECT TOP 1 * FROM sys.tables"

# Создать соединение
try {
    $connection = New-Object System.Data.Odbc.OdbcConnection $connectionString
    $command = New-Object System.Data.Odbc.OdbcCommand $query, $connection

    # Открыть соединение
    $connection.Open()
    Write-Host "Соединение успешно!" -ForegroundColor Green

    # Выполнить запрос
    $reader = $command.ExecuteReader()
    if ($reader.HasRows) {
        while ($reader.Read()) {
            Write-Host ("Имя таблицы: {0}" -f $reader.GetValue(0))
        }
    } else {
        Write-Host "В базе данных не найдено таблиц." -ForegroundColor Yellow
    }

    # Закрыть соединение
    $reader.Close()
    $connection.Close()
} catch {
    Write-Host "Не удалось подключиться!" -ForegroundColor Red
    Write-Host "Ошибка: $($_.Exception.Message)" -ForegroundColor Red
}

Ответ или решение

Проблемы с подключением к базе данных для RDS Connection Broker в режиме высокой доступности

Введение

Конфигурация службы удаленных рабочих столов (Remote Desktop Services) требует уверенности в том, что все компоненты правильно настроены для обеспечения стабильной работы. Одна из распространённых проблем, с которой сталкиваются администраторы, заключается в возникновении ошибок подключения к базе данных при настройке RD Connection Broker в режиме высокой доступности. В этой статье мы подробно рассмотрим общие ошибки, причины их возникновения и возможные решения.

Описание проблемы

При попытке настроить RD Connection Broker в режиме высокой доступности, вы можете столкнуться с сообщением об ошибке, указывающим, что "база данных, указанная в строке подключения, недоступна с сервера RD Connection Broker". Это может происходить независимо от того, что все необходимые предварительные условия, такие как доступность базы данных и корректная установка SQL-драйвера, кажутся выполненными.

Примеры ошибок:

  1. Ошибка в графическом интерфейсе:

    "The database specified in the database connection string is not available from the RD Connection Broker server…"

  2. Ошибка в PowerShell:

    "The database specified in the connection string is not available from the RD Connection Broker server RDS-01.CONTOSO.COM…"

Диагностика проблемы

Несмотря на уверенность в том, что все настройки выполнены правильно, отсутствие попыток подключения к SQL-серверу может указывать на проблему с путём к базе данных. Стандартная практика, основываясь на документации Microsoft, подразумевает, что путь к папке базы данных является необязательным параметром. Однако в реальности это может быть не так.

Что проверить:

  • Убедитесь, что сервер доступен по сети (пинговка SQL-сервера).
  • Проверьте, что пользовательская учетная запись, под которой работает RD Connection Broker, имеет необходимые права на создание и изменение баз данных.
  • Убедитесь, что SQL-драйвер установлен на всех серверах RD Connection Broker.

Решение проблемы

1. Укажите путь к базе данных

Исходя из полученного опыта, добавление явного пути к базе данных может решать указанные проблемы. Например, даже если ваш SQL Server настроен на использование определённого пути для хранения баз данных, явно укажите его в вашей строке подключения:

Set-RDConnectionBrokerHighAvailability -ClientAccessName "rds.contoso.com" -DatabaseConnectionString "DRIVER=SQL Server Native Client 11.0;SERVER=db.contoso.com;Trusted_Connection=Yes;APP=Remote Desktop Services Connection Broker;DATABASE=rdscbha;DatabaseFilePath=C:\ClusterStorage\SQL Data\MSSQL13.MSSQLSERVER\MSSQL\DATA"

2. Настройка прав доступа

Важно, чтобы учетные записи компьютеров, на которых работает RD Connection Broker, были присоединены к группе с правами db_owner на созданной базе данных. Если база данных уже создана, выполните следующие действия:

  1. Откройте SQL Server Management Studio.
  2. Перейдите в раздел «Безопасность» -> «Логины».
  3. Выберите вашу учетную запись RD Connection Broker и убедитесь, что она имеет необходимые права.

3. Используйте актуальные драйвера

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

Driver=ODBC Driver 18 for SQL Server;Server=myserver.mydomain.local;Database=RDCB;Trusted_Connection=Yes;Connect Timeout=30;Trust Server Certificate=False;

Заключение

Настройка RD Connection Broker в режиме высокой доступности может быть сложной задачей, особенно когда возникают проблемы с подключением к базе данных. Убедитесь, что все необходимые предварительные условия выполнены, и не пренебрегайте добавлением пути к базе данных в строку подключения. Настройка прав доступа и использование актуальных драйверов будут способствовать успешной интеграции с SQL Server.

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

Следуя приведенным рекомендациям, вы сможете устранить ошибки подключения и обеспечить надежную работу вашей системы удаленных рабочих столов.

Оцените материал
Добавить комментарий

Капча загружается...