Развертывание кластера больших данных SQL Server с высокой доступностьюDeploy SQL Server Big Data Cluster with high availability

Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)Применимо к:Applies to: даSQL Server 2019 (15.x)SQL Server 2019 (15.x)yesSQL Server 2019 (15.x)SQL Server 2019 (15.x)

Так как кластеры больших данных SQL Server существуют в Kubernetes как контейнерные приложения и используют такие функции, как наборы с отслеживанием состояния и постоянное хранилище, в этой инфраструктуре имеются механизмы встроенного мониторинга работоспособности, обнаружения сбоев и отработки отказа, которые компоненты кластера используют для поддержания работоспособности служб.Because SQL Server Big Data Clusters is on Kubernetes as containerized applications, and uses features like stateful sets and persistent storage, this infrastructure has built-in health monitoring, failure detection, and failover mechanisms that cluster components leverage to maintain service health. Чтобы повысить надежность, можно также настроить главный экземпляр SQL Server и (или) узел имен HDFS и общие службы Spark для развертывания с дополнительными репликами в конфигурации высокой доступности.For increased reliability, you can also configure SQL Server master instance and/or HDFS name node and Spark shared services to deploy with additional replicas in a high availability configuration. Мониторинг, обнаружение сбоев и автоматическая отработка отказа управляются службой управления кластером больших данных, которая называется службой контроля.Monitoring, failure detection, and automatic failover are managed by the big data cluster management service, namely the control service. Эта служба обеспечивает все действия без участия пользователя: от настройки группы доступности и конечных точек зеркального отображения баз данных до добавления баз данных в группу доступности или координации отработки отказа и обновления.This service is provided without user intervention – all from availability group setup, configuring database mirroring endpoints, to adding databases to the availability group or failover and upgrade coordination.

На следующем рисунке показано, как группа доступности развертывается в кластере больших данных SQL Server.The following image represents how an availability group is deployed in a SQL Server Big Data Cluster:

high-availability-ag-bdc

Ниже приведены некоторые возможности, которые обеспечивают группы доступности.Here are some of the capabilities that availability groups enable:

  • Если параметры высокой доступности заданы в файле конфигурации развертывания, создается отдельная группа доступности с именем containedag.If the high availability settings are specified in the deployment configuration file, a single availability group named containedag is created. По умолчанию группа доступности containedag имеет три реплики, включая первичную.By default, containedag has three replicas, including primary. Все операции CRUD для группы доступности управляются внутренним образом, в том числе создание группы доступности или присоединение реплик к созданной группе доступности.All CRUD operations for the availability group are managed internally, including creating the availability group or joining replicas to the availability group created. В главном экземпляре SQL Server в кластере больших данных невозможно создать дополнительные группы доступности.Additional availability groups cannot be created in the SQL Server master instance in a big data cluster.

  • Все базы данных автоматически добавляются в группу доступности, в том числе все пользовательские и системные базы данных, такие как master и msdb.All databases are automatically added to the availability group, including all user and system databases like master and msdb. Эта возможность обеспечивает представление единой системы во всех репликах группы доступности.This capability provides a single-system view across the availability group replicas. Дополнительные шаблоны баз данных — model_replicatedmaster и model_msdb — используются для заполнения реплицированной части системных баз данных.Additional model databases - model_replicatedmaster and model_msdb - are used to seed the replicated portion of the system databases. Если вы подключаетесь непосредственно к экземпляру, то помимо этих баз данных вы увидите базы данных containedag_master и containedag_msdb.In addition to these databases, you will see containedag_master and containedag_msdb databases if you connect directly to the instance. Базы данных containedag представляют master и msdb в группе доступности.The containedag databases represent the master and msdb inside the availability group.

    Важно!

    Базы данных, созданные в экземпляре в результате других рабочих процессов, таких как подключение базы данных, пока не добавляются в группу доступности автоматически. Администратор кластера больших данных должен сделать это вручную.Databases created on the instance as result of workflows like attach database are not automatically added to the availability group and big data cluster admin would have to do this manually. Инструкции по включению временной конечной точки в базу данных master экземпляра SQL Server см. в разделе Подключение к экземпляру SQL Server.See the Connect to SQL Server instance section for instructions how to enable a temporary endpoint ot the SQL Server instance master database. До выпуска кумулятивного обновления 2 (CU2) для SQL Server 2019 базы данных, созданные в результате выполнения инструкции RESTORE, точно так же требовали добавления в автономную группу доступности вручную.Prior to SQL Server 2019 CU2 release, databases created as result of a restore statement had the same behavior and required manually adding the databases to the contained availability group.

  • Базы данных конфигурации PolyBase не включаются в группу доступности, так как в них имеются метаданные уровня экземпляра для каждой реплики.Polybase configuration databases are not included in the availability group because they include instance level metadata specific to each replica.

  • Внешняя конечная точка автоматически подготавливается для подключения к базам данных в группе доступности.An external endpoint is automatically provisioned for connecting to databases within the availability group. Эта конечная точка master-svc-external выполняет роль прослушивателя группы доступности.This endpoint master-svc-external plays the role of the availability group listener.

  • Вторая внешняя конечная точка подготавливается для подключений только для чтения к вторичным репликам в целях горизонтального увеличения масштаба рабочих нагрузок чтения.A second external endpoint is provisioned for read-only connections to the secondary replicas to scale out the read workloads.

РазвертываниеDeploy

Для развертывания главного экземпляра SQL Server в группе доступности необходимо выполнить следующие действия.To deploy SQL Server master in an availability group:

  1. Включить функцию hadr.Enable the hadr feature
  2. Указать число реплик для группы доступности (минимальное значение — 3).Specify the number of replicas for the AG (minimum is 3)
  3. Настроить сведения о второй внешней конечной точке, созданной для подключений только для чтения к вторичным репликам.Configure the details of the second external endpoint created for connections to the read-only secondary replicas

Чтобы начать настройку кластера больших данных, можно использовать встроенные профили конфигурации aks-dev-test-ha или kubeadm-prod.You can use either the aks-dev-test-ha or the kubeadm-prod built-in configuration profiles to start customizing your big data cluster. Эти профили включают необходимые для ресурсов параметры, которые можно дополнительно настроить для высокого уровня доступности.These profiles include the settings required for resources you can configure additional high availability. Например, ниже приведен раздел файла конфигурации bdc.json, относящийся к включению групп доступности для главного экземпляра SQL Server.For example, below is a section in the bdc.json configuration file that is relevant for enabling availability groups for SQL Server master instance.

{
  ...
    "spec": {
      "type": "Master",
      "replicas": 3,
      "endpoints": [
        {
          "name": "Master",
          "serviceType": "LoadBalancer",
          "port": 31433
        },
        {
          "name": "MasterSecondary",
          "serviceType": "LoadBalancer",
          "port": 31436
        }
      ],
      "settings": {
        "sql": {
          "hadr.enabled": "true"
        }
      }
    }
  ...
}

Ниже приведен пример последовательных действий по настройке конфигурации развертывания кластера больших данных, начиная с профиля aks-dev-test-ha.The following steps walk through an example on how to start from aks-dev-test-ha profile and customize your big data cluster deployment configuration. Для развертывания в кластере kubeadm выполняются аналогичные действия, но необходимо использовать NodePort для serviceType в разделе endpoints.For a deployment on a kubeadm cluster, similar steps would apply, but make sure you are using NodePort for the serviceType in the endpoints section.

  1. Клонируйте целевой профиль.Clone your targeted profile

    azdata bdc config init --source aks-dev-test-ha --target custom-aks-ha
    
  2. При необходимости внесите нужные изменения в пользовательский профиль.Optionally make any edits to the custom profile as necessary.

  3. Начните развертывание кластера с использованием созданного ранее профиля конфигурации.Start cluster deployment using the cluster configuration profile created above

    azdata bdc create --config-profile custom-aks-ha --accept-eula yes
    

Подключитесь к базам данных SQL Server в группе доступности.Connect to SQL Server databases in the availability group

В зависимости от типа рабочей нагрузки, которую требуется выполнять в главном экземпляре SQL Server, можно подключаться к базам данных в первичной реплике (для рабочих нагрузок чтения и записи) или к базам данных во вторичных репликах (для рабочих нагрузок только чтения).Depending on the type of workload you want to run against SQL Server master, you can connect either to the primary for read-write workloads or to the databases in the secondary replicas for read-only type of workloads. Далее приводятся общие сведения по каждому типу подключения.Here is an outline for each type of connection:

Подключение к базам данных в первичной репликеConnect to databases on the primary replica

Для подключений к первичной реплике используйте конечную точку sql-server-master.For connections to the primary replica, use sql-server-master endpoint. Эта конечная точка также является прослушивателем для группы доступности.This endpoint is also the listener for the AG. При использовании этой конечной точки все подключения находятся в контексте баз данных в группе доступности.When using this endpoint, all connections are in the context of databases within the availability group. Например, при подключении по умолчанию с использованием этой конечной точки установится подключение к базе данных master в группе доступности, а не к базе данных master экземпляра SQL Server.For example, a default connection using this endpoint will result in connecting to the master database within the availability group, not the SQL Server instance master database. Чтобы найти эту конечную точку, выполните следующую команду:Run this command to find the endpoint:

azdata bdc endpoint list -e sql-server-master -o table
Description                           Endpoint             Name               Protocol
------------------------------------  -------------------  -----------------  ----------
SQL Server Master Instance Front-End  11.11.111.111,11111  sql-server-master  tds

Примечание

Во время выполнения распределенного запроса с доступом к данным из удаленных источников, таких как HDFS или пул данных, могут происходить события отработки отказа.Failover events can occur during a distributed query execution that is accessing data from remote data sources like HDFS or data pool. Рекомендуется разрабатывать приложения с логикой повторного подключения в случае отключения, вызванного отработкой отказа.As a best practice, applications should be designed to have connection retry logic in case of disconnects caused by failover.

Подключение к базам данных во вторичных репликахConnect to databases on the secondary replicas

Для подключений только для чтения к базам данных во вторичных репликах используйте конечную точку sql-server-master-readonly.For read-only connections to databases in secondary replicas, use the sql-server-master-readonly endpoint. Эта конечная точка действует как подсистема балансировки нагрузки по всем вторичным репликам.This endpoint acts like a load balancer across all the secondary replicas. При использовании этой конечной точки все подключения находятся в контексте баз данных в группе доступности.When using this endpoint, all connections are in the context of databases within the availability group. Например, при подключении по умолчанию с использованием этой конечной точки установится подключение к базе данных master в группе доступности, а не к базе данных master экземпляра SQL Server.For example, a default connection using this endpoint will result in connecting to the master database within the availability group, not the SQL Server instance master database.

azdata bdc endpoint list -e sql-server-master-readonly -o table
Description                                    Endpoint            Name                        Protocol
---------------------------------------------  ------------------  --------------------------  ----------
SQL Server Master Readable Secondary Replicas  11.11.111.11,11111  sql-server-master-readonly  tds

Подключение к экземпляру SQL ServerConnect to SQL Server instance

Для выполнения некоторых операций, таких как установка конфигураций на уровне сервера или добавление базы данных в группу доступности вручную, необходимо подключаться к экземпляру SQL Server.For certain operations like setting server level configurations or manually adding a database to the availability group, you must connect to the SQL Server instance. До выпуска кумулятивного обновления 2 (CU2) для SQL Server 2019 данный тип подключения требовался для таких операций, как sp_configure, RESTORE DATABASE и любых операций DDL в группах доступности.Prior to SQL Server 2019 CU2, operations like sp_configure, RESTORE DATABASE or any availability groups DDL will require this type of connection. По умолчанию кластер больших данных не включает конечную точку, которая разрешает подключение к экземпляру, так что эту конечную точку вы должны предоставить вручную.By default, big data cluster does not include an endpoint that enables instance connection and you must expose this endpoint manually.

Важно!

Конечная точка, предоставленная только для подключений к экземпляру SQL Server, поддерживает проверку подлинности SQL даже в тех кластерах, где включена проверка подлинности Active Directory.The endpoint exposed for SQL Server instance connections only supports SQL authentication, even in clusters where Active Directory is enabled. По умолчанию во время развертывания кластера больших данных имя для входа sa отключено, а новое имя для входа sysadmin подготавливается на основе значений, предоставленных для переменных среды AZDATA_USERNAME и AZDATA_PASSWORD во время развертывания.By default, during a big data cluster deployment, sa login is disabled and a new sysadmin login is provisioned based in the values provided at deployment time for AZDATA_USERNAME and AZDATA_PASSWORD environment variables.

Важно!

Управление операциями DDL в автономных группах доступности в BDC осуществляется исключительно самостоятельно.The contained availability group DDL is exclusively self managed in BDC. Попытки (внешнего пользователя) удалить автономную группу доступности или конечную точку зеркального отображения базы данных не поддерживаются и могут привести к неустранимому состоянию BDC.Any (external user) attempt to drop the contained avaialbility or the database mirroring endpoint is not supported and can result in unrecoverable BDC state.

Ниже приведен пример действий для предоставления такой конечной точки и последующего добавления базы данных, созданной с помощью рабочего процесса восстановления, в группу доступности.Here is an example that shows how to expose this endpoint and then add the database that was created with a restore workflow to the availability group. Используйте те же инструкции по настройке подключения к главному экземпляру SQL Server, если требуется изменить конфигурации сервера с помощью sp_configure.Similar instructions for setting up a connection to the SQL Server master instance apply when you want to change server configurations with sp_configure.

Примечание

Начиная с SQL Server 2019 с кумулятивным обновлением 2 (CU2) базы данных, созданные в результате процесса восстановления, автоматически добавляются в автономную группу доступности.Starting with SQL Server 2019 CU2, databases created as result of a restore workflow are added automatically to the contained availability group.

  • Определите pod, в котором размещена первичная реплика. Для этого подключитесь к конечной точке sql-server-master и выполните следующую команду:Determine the pod that hosts the primary replica by connecting to the sql-server-master endpoint and run:

    SELECT @@SERVERNAME
    
  • Предоставьте внешнюю конечную точку путем создания новой службы Kubernetes.Expose the external endpoint by creating a new Kubernetes service

    Для кластера kubeadm выполните приведенную ниже команду.For a kubeadm cluster run below command. Замените podName именем сервера, возвращенного на предыдущем шаге, serviceName — предпочтительным именем для созданной службы Kubernetes и namespaceName* — именем кластера BDC.Replace podName with the name of the server returned at previous step, serviceName with the preferred name for the Kubernetes service created and namespaceName* with the name of your BDC cluster.

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=NodePort
    

    Для запуска кластера AKS выполните ту же команду, но укажите тип создаваемой службы LoadBalancer.For an aks cluster run, run the same command, except that the type of the service created will be LoadBalancer. Пример:For example:

    kubectl -n <namespaceName> expose pod <podName> --port=1533  --name=<serviceName> --type=LoadBalancer
    

    Ниже приведен пример выполнения этой команды для AKS, когда первичная реплика размещается в pod master-0.Here is an example of this command run against aks, where the pod hosting the primary is master-0:

    kubectl -n mssql-cluster expose pod master-0 --port=1533  --name=master-sql-0 --type=LoadBalancer
    

    Получите IP-адрес созданной службы Kubernetes:Get the IP of the Kubernetes service created:

    kubectl get services -n <namespaceName>
    

Важно!

Рекомендуется выполнить очистку, удалив созданную выше службу Kubernetes с помощью следующей команды:As a best practice, you should cleanup by deleting the Kubernetes service created above by running this command:

kubectl delete svc master-sql-0 -n mssql-cluster
  • Добавьте базу данных в группу доступности.Add the database to the availability group.

    Чтобы добавить базу данных в группу доступности, необходимо запустить ее в режиме полного восстановления и создать резервную копию журнала.For the database to be added to the AG, it has to run in full recovery mode and a log backup has to be taken. Используйте IP-адрес из службы Kubernetes, созданной выше, и подключитесь к экземпляру SQL Server, а затем выполните инструкции TSQL, как показано ниже.Use the IP from the Kubernetes service created above and connect to the SQL Server instance then run the TSQL statements as shown below.

    ALTER DATABASE <databaseName> SET RECOVERY FULL;
    BACKUP DATABASE <databaseName> TO DISK='<filePath>'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE <databaseName>
    

    В следующем примере добавляется база данных с именем sales, которая была восстановлена в экземпляре.The following example adds a database named sales that was restored on the instance:

    ALTER DATABASE sales SET RECOVERY FULL;
    BACKUP DATABASE sales TO DISK='/var/opt/mssql/data/sales.bak'
    ALTER AVAILABILITY GROUP containedag ADD DATABASE sales
    

Известные ограниченияKnown limitations

Ниже перечислены известные проблемы и ограничения, связанные с группами доступности для автономной базы данных master экземпляра SQL Server в кластере больших данных:These are known issues and limitations with contained availability groups for SQL Server master in big data cluster:

  • Конфигурация высокой доступности должна быть создана во время развертывания кластера больших данных.The high availability configuration must be created when big data cluster is deployed. Нельзя включить конфигурацию высокой доступности с группами доступности после развертывания.You cannot enable the high availability configuration with availability groups post deployment. Сейчас включена конфигурация только для синхронных реплик фиксации.At this time, only configuration enabled is for synchronous commit replicas.

Предупреждение

Обновление режима синхронизации до асинхронной фиксации для любой реплики в фиксации кворума приведет к недопустимой конфигурации для обеспечения высокой доступности.Updating the synchronization mode to asynchronous commit for any of the replicas in the quorum commit, will result in an invalid configuration for high availability. Выполнение с использованием этой конфигурации может привести к потере данных, так как в случае событий сбоя, влияющих на первичную реплику, автоматическая отработка отказа не срабатывает, и пользователь должен учитывать возможность потери данных при отработке отказа вручную.Running in this configuration involves a data loss risk since in case of failure events affecting the primary replica, there is not an automatic failover triggered and the user must accept the risk for data loss when issuing manual failover.

  • Чтобы успешно восстановить базу данных с включенной TDE из резервной копии, созданной на другом сервере, убедитесь, что необходимые сертификаты восстановлены как на главном экземпляре SQL Server, так и в главной автономной базе данных группы доступности.To successfully restore a TDE enabled database from a backup created on another server, you must ensure that that required certificates are restored on both SQL Server instance master as well as contained AG master. Пример резервного копирования и восстановления сертификатов см. здесь.See here for an example on how to backup and restore the certificates.
  • Для выполнения некоторых операций, таких как установка серверных конфигураций с помощью команды sp_configure, требуется подключение к базе данных master экземпляра SQL Server, а не к базе данных master группы доступности.Certain operations like running server configuration settings with sp_configure require a connection to the SQL Server instance master database, not the availability group master. Нельзя использовать соответствующую основную конечную точку.You cannot use the corresponding primary endpoint. Выполните эти инструкции, чтобы предоставить конечную точку, подключиться к экземпляру SQL Server и выполнить sp_configure.Follow the instructions to expose an endpoint and connect to the SQL Server instance and run sp_configure. При ручном предоставлении конечной точки для подключения к базе данных master экземпляра SQL Server можно использовать только проверку подлинности SQL.You can only use SQL authentication when manually exposing the endpoint to connect to the SQL Server instance master database.
  • Хотя автономная база данных msdb включена в группу доступности, а задания Агента SQL реплицируются в этой группе, задания в первичной реплике выполняются по расписанию.While contained msdb database is included in the availability group and the SQL Agent jobs are replicated across, the jobs are only running per schedule on the primary replica.
  • Функция репликации не поддерживается для автономных групп доступности.Replication feature is not supported for contained availability groups. Экземпляры SQL Server, включенные в автономную группу доступности, не могут выполнять роль распространителя или издателя на уровне экземпляра или автономной группы доступности.SQL Server instances part of a cotnained AG can not function as a distributor or publisher, at either the instance level or contained AG level.
  • Добавление групп файлов при создании базы данных не поддерживается.Adding file groups while creating the database is not supported. В качестве обходного решения можно сначала создать базу данных, а затем выполнить инструкцию ALTER DATABASE, чтобы добавить файловые группы.As a workaround, you can first create the database and then issue an ALTER DATABASE statement to add any file groups.
  • До выпуска кумулятивного обновления 2 (CU2) для SQL Server 2019 базы данных, созданные в результате выполнения рабочих процессов, отличных от CREATE DATABASE и RESTORE DATABASE (например, CREATE DATABASE FROM SNAPSHOT), не добавлялись в группу доступности автоматически.Prior to SQL Server 2019 CU2, databases created as result of workflows other than CREATE DATABASE and RESTORE DATABASE like CREATE DATABASE FROM SNAPSHOT are not automatically added to the availability group. Подключитесь к экземпляру и вручную добавьте базу данных в группу доступности.Connect to the instance and add the database to the availability group manually.

Дальнейшие действияNext steps