Настройка группы доступности Always On SQL Server для обеспечения высокой доступности в LinuxConfigure SQL Server Always On Availability Group for high availability on Linux

Область применения:  ДаSQL Server (только в Linux) НетБаза данных SQL Azure НетХранилище данных SQL AzureНетParallel Data Warehouse APPLIES TO: yesSQL Server (Linux only) noAzure SQL Database noAzure SQL Data Warehouse noParallel Data Warehouse

В этой статье содержатся сведения о настройке группы доступности (AG) Always On SQL Server для обеспечения высокой доступности в Linux.This article describes how to create a SQL Server Always On Availability Group (AG) for high availability on Linux. Существует два типа конфигурации групп доступности.There are two configuration types for AGs. В конфигурации высокой доступности используется диспетчер кластеров, обеспечивающий непрерывность бизнес-процессов.A high availability configuration uses a cluster manager to provide business continuity. В эту конфигурацию также могут входить реплики для чтения и масштабирования.This configuration can also include read-scale replicas. В этом документе описывается создание группы доступности для обеспечения высокой доступности.This document explains how to create the AG for high availability.

Группу доступности для чтения и масштабирования можно создать без диспетчера кластеров.You can also create an AG without a cluster manager for read-scale. Такая группа предоставляет доступные только для чтения реплики в целях масштабирования производительности. Она не поддерживает высокий уровень доступности.The AG for read scale only provides read-only replicas for performance scale-out. It does not provide high availability. Сведения о создании группы доступности для чтения и масштабирования см. в статье Настройка группы доступности SQL Server для чтения и масштабирования в Linux.To create an AG for read-scale, see Configure a SQL Server Availability Group for read-scale on Linux.

Конфигурации, гарантирующие высокую доступность и защиту данных, должны иметь две или три синхронные реплики фиксации.Configurations that guarantee high availability and data protection require either two or three synchronous commit replicas. При наличии трех синхронных реплик группа доступности может выполнить автоматическое восстановление даже при недоступности одного сервера.With three synchronous replicas, the AG can automatically recover even if one server is not available. Дополнительные сведения см. в статье Высокий уровень доступности и защита данных для конфигураций группы доступности.For more information, see High availability and data protection for Availability Group configurations.

Все серверы должны быть физическими или виртуальными. Виртуальные серверы должны находиться на одной платформе виртуализации.All servers must be either physical or virtual, and virtual servers must be on the same virtualization platform. Это требование обусловлено тем, что агенты ограждения зависят от платформы.This requirement is because the fencing agents are platform specific. См. статью Политики для гостевых кластеров.See Policies for Guest Clusters.

Схема действийRoadmap

Действия по созданию группы доступности на серверах Linux для обеспечения высокой доступности отличаются от действий, выполняемых в отказоустойчивом кластере Windows Server.The steps to create an AG on Linux servers for high availability are different from the steps on a Windows Server failover cluster. Ниже описывается общий порядок действий.The following list describes the high-level steps:

  1. Настройте SQL Server на трех серверах кластера.Configure SQL Server on three cluster servers.

    Важно!

    Все три сервера в группе доступности должны находиться на одной платформе (физической или виртуальной), так как для обеспечения высокой доступности в Linux используются агенты ограждения, позволяющие изолировать ресурсы на серверах.All three servers in the AG need to be on the same platform - physical or virtual - because Linux high availability uses fencing agents to isolate resources on servers. Агенты ограждения специфичны для каждой платформы.The fencing agents are specific for each platform.

  2. Создайте группу доступности.Create the AG. Этот шаг рассматривается в этой статье.This step is covered in this current article.

  3. Настройте диспетчер ресурсов кластера, например Pacemaker.Configure a cluster resource manager, like Pacemaker.

    Способ настройки диспетчера ресурсов кластера зависит от конкретного дистрибутива Linux.The way to configure a cluster resource manager depends on the specific Linux distribution. Инструкции по работе с дистрибутивами см. по следующим ссылкам:See the following links for distribution specific instructions:

    Важно!

    Для обеспечения высокого уровня доступности в рабочих средах требуется агент ограждения, например STONITH.Production environments require a fencing agent, like STONITH for high availability. В примерах в этой документации агенты ограждения не используются.The demonstrations in this documentation do not use fencing agents. Примеры приводятся только для тестирования и проверки.The demonstrations are for testing and validation only.

    Кластер Linux использует ограждение для возврата кластера в известное состояние.A Linux cluster uses fencing to return the cluster to a known state. Способ настройки ограждения зависит от дистрибутива и среды.The way to configure fencing depends on the distribution and the environment. Сейчас ограждение недоступно в некоторых облачных средах.Currently, fencing is not available in some cloud environments. Дополнительные сведения см. в статье о политиках поддержки для кластеров RHEL с высоким уровнем доступности на платформах виртуализации.For more information, see Support Policies for RHEL High Availability Clusters - Virtualization Platforms.

    Сведения о SLES см. в статье о расширении для обеспечения высокой доступности SUSE Linux Enterprise.For SLES, see SUSE Linux Enterprise High Availability Extension.

  4. Добавьте группу доступности в качестве ресурса в кластер.Add the AG as a resource in the cluster.

    Способ добавления группы доступности в качестве ресурса в кластере зависит от дистрибутива Linux.The way to add the AG as a resource in the cluster depends on the Linux distribution. Инструкции по работе с дистрибутивами см. по следующим ссылкам:See the following links for distribution specific instructions:

предварительные требованияPrerequisites

Перед созданием группы доступности необходимо выполнить следующие действия:Before you create the availability group, you need to:

  • Настроить среду таким образом, чтобы все серверы, в которых будут находиться группы доступности, могли взаимодействовать между собой.Set your environment so that all the servers that will host availability replicas can communicate.
  • Установите SQL Server.Install SQL Server.

Примечание

В Linux группу доступности необходимо создать перед тем, как добавить ее в качестве кластерного ресурса, управляемого кластером.On Linux, you must create an availability group before you add it as a cluster resource to be managed by the cluster. В этом документе приводится пример создания группы доступности.This document provides an example that creates the availability group. Инструкции по созданию кластера и добавлению группы доступности в качестве кластерного ресурса для конкретных сред см. по ссылкам в разделе "Дальнейшие действия".For distribution-specific instructions to create the cluster and add the availability group as a cluster resource, see the links under "Next steps."

  1. Обновление имени компьютера для каждого узла.Update the computer name for each host.

    Каждое имя SQL Server должно отвечать следующим требованиям:Each SQL Server name must be:

    • 15 символов или меньше;15 characters or less.
    • уникальность в пределах сети.Unique within the network.

    Чтобы указать имя компьютера, измените файл /etc/hostname.To set the computer name, edit /etc/hostname. Следующий сценарий позволяет изменить /etc/hostname с помощью vi:The following script lets you edit /etc/hostname with vi:

    sudo vi /etc/hostname
    
  2. Настройка файла hosts.Configure the hosts file.

    Примечание

    Если имена узлов зарегистрированы с их IP-адресами на DNS-сервере, указанные ниже действия выполнять не нужно.If hostnames are registered with their IP in the DNS server, you don't need to do the following steps. Убедитесь, что все узлы, которые требуется включить в конфигурацию группы доступности, могут взаимодействовать друг с другом.Validate that all the nodes intended to be part of the availability group configuration can communicate with each other. (Команда проверки связи с узлом должна возвращать ответ с соответствующим IP-адресом.) Кроме того, проверьте, не содержит ли файл /etc/hosts запись, которая сопоставляет IP-адрес localhost 127.0.0.1 с именем узла.(A ping to the hostname should reply with the corresponding IP address.) Also, make sure that the /etc/hosts file doesn't contain a record that maps the localhost IP address 127.0.0.1 with the hostname of the node.

    Файл hosts на каждом сервере содержит IP-адреса и имена всех серверов, которые будут участвовать в группе доступности.The hosts file on every server contains the IP addresses and names of all servers that will participate in the availability group.

    Следующая команда возвращает IP-адрес текущего сервера:The following command returns the IP address of the current server:

    sudo ip addr show
    

    Обновите /etc/hosts.Update /etc/hosts. Следующий сценарий позволяет изменить /etc/hosts с помощью vi:The following script lets you edit /etc/hosts with vi:

    sudo vi /etc/hosts
    

    В следующем примере показан файл /etc/hosts на узле node1 с дополнениями для узлов node1, node2 и node3.The following example shows /etc/hosts on node1 with additions for node1, node2, and node3. В этом документе node1 относится к серверу, на котором размещается первичная реплика,In this document, node1 refers to the server that hosts the primary replica. а node2 и node3 относятся к серверам, на которых размещаются вторичные реплики.And node2 and node3 refer to servers that host the secondary replicas.

    127.0.0.1   localhost localhost4 localhost4.localdomain4
    ::1       localhost localhost6 localhost6.localdomain6
    10.128.18.12 node1
    10.128.16.77 node2
    10.128.15.33 node3
    

Установка SQL ServerInstall SQL Server

Установите SQL Server.Install SQL Server. Инструкции по установке SQL Server для различных сред см. по указанным ниже ссылкам:The following links point to SQL Server installation instructions for various distributions:

Включение групп доступности AlwaysOn и перезапуск mssql-serverEnable AlwaysOn availability groups and restart mssql-server

Включите группы доступности Always On на каждом узле с экземпляром SQL Server.Enable AlwaysOn availability groups on each node that hosts a SQL Server instance. Затем перезапустите mssql-server.Then restart mssql-server. Выполните следующий скрипт:Run the following script:

sudo /opt/mssql/bin/mssql-conf set hadr.hadrenabled  1
sudo systemctl restart mssql-server

Включение сеанса событий AlwaysOn_healthEnable an AlwaysOn_health event session

При необходимости вы можете включить расширенные события групп доступности AlwaysOn, что может помочь в устранении их неполадок.You can optionally enable AlwaysOn availability groups extended events to help with root-cause diagnosis when you troubleshoot an availability group. На каждом экземпляре SQL Server выполните следующую команду:Run the following command on each instance of SQL Server:

ALTER EVENT SESSION  AlwaysOn_health ON SERVER WITH (STARTUP_STATE=ON);
GO

Дополнительные сведения о сеансах расширенных событий см. в разделе Расширенные события Always On.For more information about this XE session, see AlwaysOn extended events.

Создание сертификатаCreate a certificate

Служба SQL Server на Linux использует сертификаты для проверки подлинности при обмене данными между конечными точками с зеркальным отображением.The SQL Server service on Linux uses certificates to authenticate communication between the mirroring endpoints.

Следующий сценарий Transact-SQL создает главный ключ и сертификат.The following Transact-SQL script creates a master key and a certificate. Затем он создает резервную копию сертификата и защищает файл закрытым ключом.It then backs up the certificate and secures the file with a private key. Обновите сценарий, задав надежные пароли.Update the script with strong passwords. Подключение к первичному экземпляру SQL Server.Connect to the primary SQL Server instance. Чтобы создать сертификат, выполните следующий скрипт Transact-SQL:To create the certificate, run the following Transact-SQL script:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate WITH SUBJECT = 'dbm';
BACKUP CERTIFICATE dbm_certificate
   TO FILE = '/var/opt/mssql/data/dbm_certificate.cer'
   WITH PRIVATE KEY (
           FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
           ENCRYPTION BY PASSWORD = '**<Private_Key_Password>**'
       );

На этом этапе первичная реплика SQL Server имеет сертификат в файле /var/opt/mssql/data/dbm_certificate.cer и закрытый ключ в файле var/opt/mssql/data/dbm_certificate.pvk.At this point, your primary SQL Server replica has a certificate at /var/opt/mssql/data/dbm_certificate.cer and a private key at var/opt/mssql/data/dbm_certificate.pvk. Скопируйте эти файлы в одно и то же место на всех серверах, где будут размещаться реплики доступности.Copy these two files to the same location on all servers that will host availability replicas. Выберите пользователя mssql или предоставьте пользователю mssql разрешения на доступ к этим файлам.Use the mssql user, or give permission to the mssql user to access these files.

Например, на исходном сервере указанная ниже команда копирует файлы на целевой компьютер.For example, on the source server, the following command copies the files to the target machine. Замените значения **<node2>** на имена экземпляров SQL Server, где будут размещены реплики.Replace the **<node2>** values with the names of the SQL Server instances that will host the replicas.

cd /var/opt/mssql/data
scp dbm_certificate.* root@**<node2>**:/var/opt/mssql/data/

На каждом целевом сервере предоставьте пользователю mssql разрешение на доступ к сертификату.On each target server, give permission to the mssql user to access the certificate.

cd /var/opt/mssql/data
chown mssql:mssql dbm_certificate.*

Создание сертификата на серверах-получателяхCreate the certificate on secondary servers

Следующий сценарий Transact-SQL создает главный ключ и сертификат из резервной копии, созданной в первичной реплике SQL Server.The following Transact-SQL script creates a master key and a certificate from the backup that you created on the primary SQL Server replica. Обновите сценарий, задав надежные пароли.Update the script with strong passwords. Для расшифровки используется тот же пароль, что и при создании PVK-файла в предыдущем шаге.The decryption password is the same password that you used to create the .pvk file in a previous step. Выполните следующий скрипт на всех серверах-получателях для создания сертификата:To create the certificate, run the following script on all secondary servers:

CREATE MASTER KEY ENCRYPTION BY PASSWORD = '**<Master_Key_Password>**';
CREATE CERTIFICATE dbm_certificate
    FROM FILE = '/var/opt/mssql/data/dbm_certificate.cer'
    WITH PRIVATE KEY (
    FILE = '/var/opt/mssql/data/dbm_certificate.pvk',
    DECRYPTION BY PASSWORD = '**<Private_Key_Password>**'
            );

Создайте конечные точки на всех репликах зеркального отображения базы данныхCreate the database mirroring endpoints on all replicas

Для передачи и получения сообщений между экземплярами серверов, участвующими в сеансах зеркального отображения базы данных или размещающих реплики доступности, в конечных точках зеркального отображения базы данных используется протокол TCP.Database mirroring endpoints use the Transmission Control Protocol (TCP) to send and receive messages between the server instances that participate in database mirroring sessions or host availability replicas. Конечная точка зеркального отображения базы данных прослушивает порт TCP с уникальным номером.The database mirroring endpoint listens on a unique TCP port number.

Следующий запрос Transact-SQL создает конечную точку прослушивания с именем Hadr_endpoint для группы доступности.The following Transact-SQL script creates a listening endpoint named Hadr_endpoint for the availability group. Он запускает конечную точку и предоставляет созданному вами сертификату разрешение на подключение.It starts the endpoint and gives connection permission to the certificate that you created. Перед выполнением данного сценария замените значения между **< ... >**.Before you run the script, replace the values between **< ... >**. При необходимости можно включить IP-адрес LISTENER_IP = (0.0.0.0).Optionally you can include an IP address LISTENER_IP = (0.0.0.0). IP-адрес прослушивателя должен быть IPv4-адресом.The listener IP address must be an IPv4 address. Также можно использовать 0.0.0.0.You can also use 0.0.0.0.

Обновите следующий сценарий Transact-SQL для среды на всех экземплярах SQL Server:Update the following Transact-SQL script for your environment on all SQL Server instances:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = **<5022>**)
    FOR DATABASE_MIRRORING (
        ROLE = ALL,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

Примечание

Если вы используете выпуск SQL Server Express на одном узле для размещения реплики, поддерживающей только конфигурацию, единственным допустимым значением для ROLE является WITNESS.If you use SQL Server Express Edition on one node to host a configuration-only replica, the only valid value for ROLE is WITNESS. Выполните следующий скрипт в выпуске SQL Server Express:Run the following script on SQL Server Express Edition:

CREATE ENDPOINT [Hadr_endpoint]
    AS TCP (LISTENER_PORT = **<5022>**)
    FOR DATABASE_MIRRORING (
        ROLE = WITNESS,
        AUTHENTICATION = CERTIFICATE dbm_certificate,
        ENCRYPTION = REQUIRED ALGORITHM AES
        );
ALTER ENDPOINT [Hadr_endpoint] STATE = STARTED;

TCP-порт в брандмауэре должен быть открыт для порта прослушивателя.The TCP port on the firewall must be open for the listener port.

Важно!

Для выпуска SQL Server 2017 единственный поддерживаемый способ проверки подлинности для конечной точки с зеркальным отображением базы данных — CERTIFICATE.For the SQL Server 2017 release, the only authentication method supported for the database mirroring endpoint is CERTIFICATE. Параметр WINDOWS будет включен в будущем выпуске.The WINDOWS option will be enabled in a future release.

Дополнительные сведения см. в статье Конечная точка зеркального отображения базы данных (SQL Server).For more information, see The database mirroring endpoint (SQL Server).

Создание группы доступностиCreate the AG

В примерах этого раздела объясняется, как создать группу доступности с помощью Transact-SQL.The examples in this section explain how to create the availability group using Transact-SQL. Можно также использовать мастер создания групп доступности в SQL Server Management Studio.You can also use the SQL Server Management Studio Availability Group Wizard. Если вы создаете группу доступности с помощью мастера, при присоединении реплик к группе будет возникать ошибка.When you create an AG with the wizard, it will return an error when you join the replicas to the AG. Чтобы устранить эту проблему, предоставьте Pacemaker разрешения ALTER, CONTROL и VIEW DEFINITIONS в группе доступности на всех репликах.To fix this, grant ALTER, CONTROL, and VIEW DEFINITIONS to the pacemaker on the AG on all replicas. После предоставления разрешений на первичной реплике присоедините узлы к группе доступности с помощью мастера, но для правильного функционирования высокой доступности предоставьте разрешение на всех репликах.Once permissions are granted on the primary replica, join the nodes to the AG through the wizard, but for HA to function properly, grant permission on all replicas.

В конфигурации высокой доступности, которая обеспечивает автоматический переход на другой ресурс, группа доступности должна иметь по крайней мере три реплики.For a high availability configuration that ensures automatic failover, the AG requires at least three replicas. Высокий уровень доступности поддерживается в любой из следующих конфигураций:Either of the following configurations can support high availability:

Дополнительные сведения см. в статье Высокий уровень доступности и защита данных для конфигураций группы доступности.For information, see High availability and data protection for Availability Group configurations.

Примечание

Группы доступности могут содержать вторичные синхронные или асинхронные реплики.The availability groups can include additional synchronous or asynchronous replicas.

Создайте группу доступности для обеспечения высокой доступности в Linux.Create the AG for high availability on Linux. Используйте инструкцию CREATE AVAILABILITY GROUP с CLUSTER_TYPE = EXTERNAL.Use the CREATE AVAILABILITY GROUP with CLUSTER_TYPE = EXTERNAL.

  • Группа доступности — CLUSTER_TYPE = EXTERNAL. Указывает, что группой доступности управляет сущность внешнего кластера.Availability group - CLUSTER_TYPE = EXTERNAL Specifies that an external cluster entity manages the AG. Примером сущности внешнего кластера является Pacemaker.Pacemaker is an example of an external cluster entity. Если тип кластера группы доступности является внешним,When the AG cluster type is external,

  • задайте для первичной и вторичной реплик FAILOVER_MODE = EXTERNAL.Set Primary and secondary replicas FAILOVER_MODE = EXTERNAL. Указывает, что реплика взаимодействует с диспетчером внешнего кластера, например Pacemaker.Specifies that the replica interacts with an external cluster manager, like Pacemaker.

Следующие сценарии Transact-SQL используются для создания группы доступности ag1 для обеспечения высокой доступности.The following Transact-SQL scripts create an AG for high availability named ag1. Сценарий настраивает реплики группы доступности с параметром SEEDING_MODE = AUTOMATIC.The script configures the AG replicas with SEEDING_MODE = AUTOMATIC. Если этот параметр задан, SQL Server будет автоматически создавать базы данных на каждом сервере-получателе.This setting causes SQL Server to automatically create the database on each secondary server. Обновите следующий сценарий для своей среды.Update the following script for your environment. Замените значения <node1>, <node2> и <node3> на имена экземпляров SQL Server, где размещаются реплики.Replace the <node1>, <node2>, or <node3> values with the names of the SQL Server instances that host the replicas. Замените значение <5022> на порт, заданный для конечной точки зеркального отображения данных.Replace the <5022> with the port you set for the data mirroring endpoint. Чтобы создать группу доступности, выполните на экземпляре SQL Server, где размещена первичная реплика, следующий сценарий Transact-SQL:To create the AG, run the following Transact-SQL on the SQL Server instance that hosts the primary replica.

Выполните только один из приведенных ниже сценариев.Run only one of the following scripts:

  • Создание группы доступности с тремя синхронными репликамиCreate AG with three synchronous replicas

    CREATE AVAILABILITY GROUP [ag1]
         WITH (DB_FAILOVER = ON, CLUSTER_TYPE = EXTERNAL)
         FOR REPLICA ON
             N'<node1>' 
              WITH (
                 ENDPOINT_URL = N'tcp://<node1>:<5022>',
                 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
                 FAILOVER_MODE = EXTERNAL,
                 SEEDING_MODE = AUTOMATIC
                 ),
             N'<node2>' 
              WITH ( 
                 ENDPOINT_URL = N'tcp://<node2>:<5022>', 
                 AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
                 FAILOVER_MODE = EXTERNAL,
                 SEEDING_MODE = AUTOMATIC
                 ),
             N'<node3>'
             WITH( 
                ENDPOINT_URL = N'tcp://<node3>:<5022>', 
                AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
                FAILOVER_MODE = EXTERNAL,
                SEEDING_MODE = AUTOMATIC
                );
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    

    Важно!

    После выполнения предыдущего сценария для создания группы доступности с тремя синхронными репликами не запускайте следующий сценарий:After you run the preceding script to create an AG with three synchronous replicas, do not run the following script:

  • Создание группы доступности с двумя синхронными репликами и репликой конфигурацииCreate AG with two synchronous replicas and a configuration replica:

    Важно!

    Эта архитектура позволяет размещать третью реплику в любом выпуске SQL Server.This architecture allows any edition of SQL Server to host the third replica. Например, третью реплику можно разместить в выпуске SQL Server Express.For example, the third replica can be hosted on SQL Server Express Edition. В выпуске Express единственным допустимым типом конечной точки является WITNESS.On Express Edition, the only valid endpoint type is WITNESS.

    CREATE AVAILABILITY GROUP [ag1] 
        WITH (CLUSTER_TYPE = EXTERNAL) 
        FOR REPLICA ON 
         N'<node1>' WITH ( 
            ENDPOINT_URL = N'tcp://<node1>:<5022>', 
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            FAILOVER_MODE = EXTERNAL, 
            SEEDING_MODE = AUTOMATIC 
            ), 
         N'<node2>' WITH (  
            ENDPOINT_URL = N'tcp://<node2>:<5022>',  
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT, 
            FAILOVER_MODE = EXTERNAL, 
            SEEDING_MODE = AUTOMATIC 
            ), 
         N'<node3>' WITH ( 
            ENDPOINT_URL = N'tcp://<node3>:<5022>', 
            AVAILABILITY_MODE = CONFIGURATION_ONLY  
            );
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    

  • Создание группы доступности с тремя синхронными репликамиCreate AG with two synchronous replicas

    Включите две реплики с синхронным режимом доступности.Include two replicas with synchronous availability mode. Например, следующий сценарий создает группу доступности ag1.For example, the following script creates an AG called ag1. Группы доступности node1 и node2 поддерживают размещение реплик в синхронном режиме с автоматическим заполнением и автоматическим переходом на другой ресурс.node1 and node2 host replicas in synchronous mode, with automatic seeding and automatic failover.

    Важно!

    Для создания группы доступности с двумя синхронными репликами выполните только следующий сценарий.Only run the following script to create an AG with two synchronous replicas. Не выполняйте следующий сценарий, если вы запускали любой из предыдущих.Do not run the following script if you ran either preceding script.

    CREATE AVAILABILITY GROUP [ag1]
        WITH (CLUSTER_TYPE = EXTERNAL)
        FOR REPLICA ON
        N'node1' WITH (
           ENDPOINT_URL = N'tcp://node1:5022',
           AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
           FAILOVER_MODE = EXTERNAL,
           SEEDING_MODE = AUTOMATIC
        ),
        N'node2' WITH ( 
           ENDPOINT_URL = N'tcp://node2:5022', 
           AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
           FAILOVER_MODE = EXTERNAL,
           SEEDING_MODE = AUTOMATIC
        );
    
    ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;
    

Кроме того, группу доступности с CLUSTER_TYPE=EXTERNAL можно настроить с помощью SQL Server Management Studio или PowerShell.You can also configure an AG with CLUSTER_TYPE=EXTERNAL using SQL Server Management Studio or PowerShell.

Присоединение вторичных реплик к группе доступностиJoin secondary replicas to the AG

Пользователю Pacemaker требуются разрешения ALTER, CONTROL и VIEW DEFINITION для группы доступности на всех репликах.The pacemaker user requires ALTER, CONTROL, and VIEW DEFINITION permissions on the availability group on all replicas. Чтобы предоставить разрешения, выполните следующий сценарий Transact-SQL после создания группы доступности на первичной реплике и каждой вторичной реплики сразу после их добавления в группу доступности.To grant permissions, run the following Transact-SQL script after the availability group is created on the primary replica and each secondary replica immediately after they are added to the availability group. Перед запуском сценария замените <pacemakerLogin> на имя учетной записи пользователя Pacemaker.Before you run the script, replace <pacemakerLogin> with the name of the pacemaker user account. Если у вас нет имени входа для Pacemaker, создайте учетные данные SQL Server для Pacemaker.If you do not have a login for pacemaker, create a sql server login for pacemaker.

GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::ag1 TO <pacemakerLogin>
GRANT VIEW SERVER STATE TO <pacemakerLogin>

Следующий сценарий Transact-SQL присоединяет экземпляр SQL Server к группе доступности ag1.The following Transact-SQL script joins a SQL Server instance to an AG named ag1. Обновите сценарий для своей среды.Update the script for your environment. На каждом экземпляре SQL Server, где размещена вторичная реплика, выполните следующий сценарий Transact-SQL для присоединения группы доступности.On each SQL Server instance that hosts a secondary replica, run the following Transact-SQL to join the AG.

ALTER AVAILABILITY GROUP [ag1] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
         
ALTER AVAILABILITY GROUP [ag1] GRANT CREATE ANY DATABASE;

Добавление базы данных в группу доступностиAdd a database to the availability group

Убедитесь, что база данных, добавляемая в группу доступности, находится в режиме полного восстановления и имеет действительную резервную копию журналов.Ensure that the database you add to the availability group is in full recovery mode and has a valid log backup. Если база данных тестовая или только что создана, сделайте ее резервную копию.If this is a test database or a newly created database, take a database backup. На первичной реплике SQL Server выполните следующий сценарий Transact-SQL, чтобы создать базу данных с именем db1 и ее резервную копию.On the primary SQL Server, run the following Transact-SQL script to create and back up a database called db1:

CREATE DATABASE [db1];
ALTER DATABASE [db1] SET RECOVERY FULL;
BACKUP DATABASE [db1] 
   TO DISK = N'/var/opt/mssql/data/db1.bak';

На первичной реплике SQL Server выполните следующий сценарий Transact-SQL, чтобы добавить базу данных с именем db1 в группу доступности с именем ag1.On the primary SQL Server replica, run the following Transact-SQL script to add a database called db1 to an availability group called ag1:

ALTER AVAILABILITY GROUP [ag1] ADD DATABASE [db1];

Убедитесь, что база данных создана на вторичных серверах.Verify that the database is created on the secondary servers

На каждой вторичной реплике SQL Server выполните следующий запрос, чтобы убедиться, что база данных db1 создана и синхронизирована.On each secondary SQL Server replica, run the following query to see if the db1 database was created and is synchronized:

SELECT * FROM sys.databases WHERE name = 'db1';
GO
SELECT DB_NAME(database_id) AS 'database', synchronization_state_desc FROM sys.dm_hadr_database_replica_states;

Важно!

После создания группы доступности необходимо настроить интеграцию с кластерной технологией, такой как Pacemaker, для обеспечения высокой доступности.After you create the AG, you must configure integration with a cluster technology like Pacemaker for high availability. Начиная с SQL Server 2017 (14.x)SQL Server 2017 (14.x) в конфигурации для чтения и масштабирования настраивать кластер не требуется.For a read-scale configuration using AGs, starting with SQL Server 2017 (14.x)SQL Server 2017 (14.x), setting up a cluster is not required.

Если вы выполнили действия, описанные в этом документе, то в вашем распоряжении находится еще не кластеризованная группа доступности.If you followed the steps in this document, you have an AG that is not yet clustered. Далее следует добавить кластер.The next step is to add the cluster. Такая конфигурация допустима для сценариев чтения и масштабирования или балансировки нагрузки, но она является неполной для обеспечения высокой доступности.This configuration is valid for read-scale/load balancing scenarios, it is not complete for high availability. Для обеспечения высокой доступности необходимо добавить группу доступности в качестве ресурса кластера.For high availability, you need to add the AG as a cluster resource. Инструкции см. в разделе Следующие шаги.See Next steps for instructions.

ПримечанияNotes

Важно!

После настройки кластера и добавления группы доступности в качестве ресурса кластера вы не можете использовать Transact-SQL для отработки отказа ресурсов группы доступности.After you configure the cluster and add the AG as a cluster resource, you cannot use Transact-SQL to fail over the AG resources. Ресурсы кластера SQL Server в Linux не так сильно зависят от операционной системы, как если бы они находились в отказоустойчивом кластере Windows Server (WSFC).SQL Server cluster resources on Linux are not coupled as tightly with the operating system as they are on a Windows Server Failover Cluster (WSFC). Служба SQL Server не имеет сведений о наличии кластера.SQL Server service is not aware of the presence of the cluster. Вся оркестрация осуществляется с помощью средств управления кластерами.All orchestration is done through the cluster management tools. В RHEL или Ubuntu используйте pcs.In RHEL or Ubuntu use pcs. В SLES используйте crm.In SLES use crm.

Важно!

Если группа доступности является ресурсом кластера, в текущем выпуске существует известная ошибка, когда принудительный переход (с потерей данных) на асинхронную реплику не работает.If the AG is a cluster resource, there is a known issue in current release where forced failover with data loss to an asynchronous replica does not work. Эта проблема будет устранена в следующем выпуске.This will be fixed in the upcoming release. Переход на синхронную реплику вручную или автоматически выполняется успешно.Manual or automatic failover to a synchronous replica succeeds.

Следующие шагиNext steps

Настройка кластера Red Hat Enterprise Linux для ресурсов кластера группы доступности SQL ServerConfigure Red Hat Enterprise Linux Cluster for SQL Server Availability Group Cluster Resources

Настройка кластера SUSE Linux Enterprise Server для ресурсов кластера группы доступности SQL ServerConfigure SUSE Linux Enterprise Server Cluster for SQL Server Availability Group Cluster Resources

Настройка кластера Ubuntu для ресурсов кластера группы доступности SQL ServerConfigure Ubuntu Cluster for SQL Server Availability Group Cluster Resources