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

ОБЛАСТЬ ПРИМЕНЕНИЯ ЭТОЙ СТАТЬИ: даSQL Server 2019 и более поздних версий нетБаза данных SQL AzureнетAzure Synapse Analytics нетParallel Data Warehouse THIS TOPIC APPLIES TO:yesSQL Server 2019 and later noAzure SQL DatabasenoAzure Synapse Analytics noParallel Data Warehouse

Так как кластеры больших данных 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 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 a big data cluster management service, namely the control service. Эта служба без участия пользователя обеспечивает все действия — от настройки группы доступности, настройки конечных точек зеркалирования баз данных до добавления баз данных в группу доступности или координации отработки отказа и обновления.This service provide 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.

    Важно!

    На момент выхода SQL Server 2019 CU1 в группу доступности автоматически добавляются только базы данных, созданные в результате выполнения инструкции CREATE DATABASE.At the time of the SQL Server 2019 CU1 release, only databases created as result of a CREATE DATABASE statement are automatically added to the availability group. Базы данных, созданные в экземпляре в результате других рабочих процессов, таких как восстановление, пока не добавляются в группу доступности, и администратор кластера больших данных должен делать это вручную.Databases created on the instance as result of other workflows like restore are not yet added to the availability group and big data cluster admin would have to do this manually. Инструкции см. в разделе Подключение к экземпляру SQL Server.See the Connect to SQL Server instance section for instructions.

  • Базы данных конфигурации 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. Этот тип подключения требуется для таких операций, как sp_configure, RESTORE DATABASE и любых операций DDL в группах доступности.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.

Ниже приведен пример действий для предоставления такой конечной точки и последующего добавления базы данных, созданной с помощью рабочего процесса восстановления, в группу доступности.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.

  • Определите 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

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

  • Базы данных, созданные в результате рабочих процессов, отличных от CREATE DATABASE, таких как RESTORE DATABSE или CREATE DATABASE FROM SNAPSHOT, не добавляются в группу доступности автоматически.Databases created as result of workflows other than CREATE DATABASE like RESTORE DATABSE, 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.
  • Для выполнения некоторых операций, таких как установка серверных конфигураций с помощью команды 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.
  • Конфигурация высокой доступности должна быть создана во время развертывания кластера больших данных.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.
  • Хотя автономная база данных msdb включается в группу доступности, а задания агента SQL реплицируются в этой группе, задания не запускаются по расписанию.While contained msdb database is included in the availability group and the SQL Agent jobs are replicated across, the jobs are not triggered per schedule. В качестве обходного пути можно подключиться к каждому из экземпляров SQL Server и создать нужные задания в msdb этого экземпляра.The workaround is to connect to each of the SQL Server instances and create the jobs in the instance msdb.

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