Развертывание нескольких кластеров больших данных SQL Server в одном домене Active Directory

Область применения: SQL Server 2019 (15.x)

В этой статье описываются обновления для SQL Server 2019 с накопительным пакетом обновления 5 (CU5), что позволяет настроить несколько кластеров больших данных SQL Server 2019. Теперь можно развернуть различные кластеры больших данных и интегрировать их с тем же доменом Active Directory.

Important

Кластеры больших данных Microsoft SQL Server 2019 прекращены. Поддержка кластеров больших данных SQL Server 2019 закончилась с 28 февраля 2025 г. Дополнительные сведения см. в записи блога объявлений и параметрах больших данных на платформе Microsoft SQL Server.

До SQL Server 2019 CU5 два проблемы предотвратили развертывание нескольких кластеров больших данных в доменах AD.

  • Конфликт именования для имен главных служб и домена DNS
  • Имена учетных записей домена

Что такое столкновения имен объектов?

Конфликт имен SPN (основных имен служб) и имен доменов DNS

Доменное имя, предоставленное при развертывании, используется в качестве домена DNS Active Directory (AD ). Это означает, что модули pod могут подключаться друг к другу в внутренней сети с помощью этого домена DNS. Пользователи также подключаются к конечным точкам кластера больших данных с помощью этого домена DNS. В результате любое SPN, созданное для службы в кластере больших данных, имеет имя pod, службы или конечной точки Kubernetes, квалифицированное этим доменом AD DNS. Если пользователь разворачивает второй кластер в домене, служебные имена принципалов (SPN) имеют тот же полный домен, поскольку имена подов и DNS домены не отличаются между кластерами. Рассмотрим случай, когда домен DNS AD имеет значение contoso.local. Одним из имен субъектов-служб, созданных для главного пула SQL Server в pod master-0 , является MSSQLSvc/master-0.contoso.local:1433. Во втором кластере, который пользователь пытается развернуть, имя pod для master-0 такое же. Пользователь предоставляет тот же DNS-домен AD (contoso.local), что приводит к той же строке имени основного субъекта службы (SPN). Active Directory запрещает создание конфликтующего SPN, что приводит к сбою развертывания второго кластера.

Имена учетных записей домена

Во время развертывания кластера больших данных с доменом Active Directory несколько субъектов учетных записей создаются для служб, работающих в кластере больших данных. Это, по сути, учетные записи пользователей AD. До SQL Server 2019 CU5 имена этих учетных записей не были уникальными между кластерами. Это манифестирует попытку создать одно и то же имя учетной записи пользователя для определенной службы в кластере больших данных в двух разных кластерах. Второй кластер развертывается с конфликтом в AD, и учетная запись не может быть создана.

Устранение конфликтов имен

Шаги по устранению проблем с доменами SPN и DNS — SQL Server 2019 CU5

Имена служб должны быть уникальными в кластерах. Dns-имя домена, переданное во время развертывания, также должно отличаться. Вы можете указать различные DNS-имена с новым параметром в файле конфигурации развертывания: subdomain Если поддомен отличается между двумя кластерами и внутренняя связь может происходить по этому поддомену, SPN будут включать поддомен для обеспечения необходимой уникальности.

Note

Значение, передаваемое через параметр поддомена, не является новым доменом AD, а доменом DNS, который используется внутри организации.

Давайте вернемся к делу главного пула SQL Server SPN. Если поддомен является bdc, обсуждаемый SPN изменяется на MSSQLSvc/master-0.bdc.contoso.local:1433.

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

Как обеспечить уникальность имени учетной записи

Чтобы обновить имена учетных записей и гарантировать уникальность, используйте префиксы учетной записи. Префикс учетной записи — это сегмент имени учетной записи, уникальной между двумя кластерами. Оставшийся сегмент имени учетной записи может быть константой. Новый формат имени учетной записи выглядит следующим образом: <prefix>-<name>-<podId>

Note

Active Directory требует, чтобы имена учетных записей были ограничены 20 символами. Кластер больших данных должен использовать 8 символов для различения модулей pod и StatefulSet. Это оставляет 12 символов для префикса учетной записи.

Вы можете настроить имя учетной записи. Используйте параметр accountPrefix в спецификации конфигурации Active Directory. SQL Server 2019 CU5 вводит accountPrefix в спецификации конфигурации. По умолчанию имя поддомена используется в качестве префикса учетной записи. Если имя поддомена больше 12 символов, начальная 12-символьная подстрока имени поддомена используется в качестве префикса учетной записи.

Поддомен применяется только к DNS. Поэтому новое имя учетной записи пользователя LDAP — bdc-ldap@contoso.local. Имя учетной записи не bdc-ldap@bdc.contoso.local.

Semantics

Ниже перечислены параметры, добавленные в SQL Server 2019 CU5 для настройки нескольких кластеров в домене:

subdomain

  • Optional field
  • Тип данных: строка
  • Определение: уникальный поддомен DNS, используемый для этого кластера больших данных. Это значение должно отличаться для каждого кластера, развернутого в домене Active Directory.
  • Значение по умолчанию: если не указано, имя кластера будет использоваться в качестве значения по умолчанию.
  • Максимальная длина: 63 символов на метку (каждая строка, разделенная точкой).
  • Примечания. Dns-имена конечных точек должны использовать поддомен в полном доменном имени.

accountPrefix

  • Optional field
  • Тип данных: строка
  • Определение: уникальный префикс для учетных записей AD, создаваемых кластером больших данных. Это значение должно отличаться для каждого кластера, развернутого в домене Active Directory.
  • Значение по умолчанию: если не указано, имя поддомена будет использоваться в качестве значения по умолчанию. Если поддомен не указан, имя кластера будет использоваться в качестве поддомена, поэтому имя кластера будет унаследовано как accountPrefix. Если поддомен указан и является многопартийным именем (содержит одну или несколько точек), пользователь должен предоставить учетную записьPrefix.
  • Максимальная длина: 12 символов

Корректировки домена AD и DNS-сервера

В домене ИЛИ контроллере домена AD изменения не требуются для развертывания нескольких кластеров больших данных в одном домене Active Directory. Поддомен DNS будет автоматически создан на DNS-сервере при регистрации dns-имен внешних конечных точек.

Изменения в файле конфигурации развертывания

Раздел ActiveDirectory в конфигурации плоскости управления control.json имеет два новых необязательных параметра: subdomain и accountPrefix. Имя кластера используется для каждого из этих параметров. Укажите новые значения для этих параметров, если вы хотите переопределить поведение по умолчанию. Имя кластера совпадает с именем пространства имен.

У вас есть возможность использовать любое DNS-имя конечной точки, если оно полностью квалифицировано. Кроме того, он не может конфликтуть с любым другим кластером больших данных, развернутыми в том же домене. Можно использовать значение параметра поддомена, чтобы убедиться, что DNS-имена отличаются между кластерами. Рассмотрим конечную точку шлюза. Вы можете использовать имя gateway конечной точки и зарегистрировать его на DNS-сервере автоматически. Для этого в рамках развертывания кластера больших данных используйте gateway.bdc1.contoso.local в качестве DNS-имени. Если bdc1 является поддоменом и contoso.local является доменным именем AD DNS. Другие допустимые значения: gateway-bdc1.contoso.local или просто gateway.contoso.local.

Некоторые примеры конфигурации безопасности Active Directory

Ниже приведен пример конфигурации безопасности Active Directory, если вы хотите переопределить поддомен и accountPrefix.

    "security": { 
        "activeDirectory": { 
            "ouDistinguishedName":"OU=contosoou,DC=contoso,DC=local", 
            "dnsIpAddresses": [ "10.10.10.10" ], 
            "domainControllerFullyQualifiedDns": [ "contoso-win2016-dc.contoso.local" ], 
            "domainDnsName":"contoso.local", 
            "subdomain": "bdc", 
            "accountPrefix": "myprefix", 
            "clusterAdmins": [ "contosoadmins" ], 
            "clusterUsers": [ "contosousers1", "contosousers2" ] 
        } 
    } 
  

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

        "endpoints": [ 
            { 
                "serviceType": "NodePort", 
                "port": 30080, 
                "name": "Controller", 
                "dnsName": "control-bdc1.contoso.local" 
            }, 
            { 
                "serviceType": "NodePort", 
                "port": 30777, 
                "name": "ServiceProxy", 
                "dnsName": "monitor-bdc1.contoso.local" 
            } 
        ] 
  

Questions

Нужно ли создавать отдельные подразделения для разных кластеров?

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

Как вернуться к поведению предварительной версии CU5 в SQL Server 2019?

Могут возникнуть сценарии, в которых не удается разместить только что появившиеся subdomain параметры. Например, необходимо развернуть предварительную версию CU5 и уже обновить Azure Data CLI (azdata). Это крайне маловероятно, но если вам нужно вернуться к поведению предварительной версии CU5, можно задать useSubdomain параметр false в разделе control.jsonActive Directory.

В следующем примере useSubdomain устанавливается как false для этого сценария.

azdata bdc config replace -c custom-prod-kubeadm/control.json -j "$.security.activeDirectory.useSubdomain=false" 

Next steps

Устранение неполадок интеграции с кластером больших данных SQL Server Active Directory