Создание и настройка группы доступности для SQL Server на Linux

Применимо к:SQL Server — Linux

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

В руководстве рассматриваются следующие задачи:

  • включение групп доступности;
  • создание конечных точек и сертификатов для групп доступности;
  • Используйте SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности.
  • Создайте имя входа и разрешения SQL Server для Pacemaker.
  • создание ресурсов групп доступности в кластере Pacemaker (только внешний тип).

Необходимые компоненты

Разверните кластер Pacemaker с высоким уровнем доступности, как описано в статье Развертывание кластера Pacemaker для SQL Server на Linux.

Включение компонента "Группы доступности"

В отличие от Windows, вы не можете использовать PowerShell или диспетчер конфигурации SQL Server для включения функции групп доступности (AG). Для этого необходимо использовать служебную программу mssql-conf. Включить компонент "Группы доступности" можно двумя способами: с помощью программы mssql-conf или путем изменения файла mssql.conf вручную.

Важно!

Функция группы доступности должна быть включена для реплика только конфигурации, даже в SQL Server Express.

Использование служебной программы mssql-conf

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

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

Изменение файла mssql.conf

Вы также можете изменить файл mssql.conf в папке /var/opt/mssql, добавив следующие строки:

[hadr]

hadr.hadrenabled = 1

Перезапуск SQL Server

После включения групп доступности, как в Windows, необходимо перезапустить SQL Server, выполнив следующую команду:

sudo systemctl restart mssql-server

Создание конечных точек и сертификатов для групп доступности

Для взаимодействия группа доступности использует конечные точки TCP. В Linux конечные точки группы доступности поддерживаются, только если для проверки подлинности используются сертификаты. Необходимо восстановить сертификат из одного экземпляра на всех остальных экземплярах, которые будут участвовать в реплика в той же группе доступности. Этот процесс необходим даже для реплики, поддерживающей только конфигурацию.

Создавать конечные точки и восстанавливать сертификаты можно только с помощью Transact-SQL. Кроме того, можно использовать сертификаты, созданные не в SQL Server. Вам также потребуется процесс управления и замены всех сертификатов, срок действия которого истекает.

Важно!

Если вы планируете использовать мастер SQL Server Management Studio для создания группы доступности, вам по-прежнему необходимо создать и восстановить сертификаты с помощью Transact-SQL в Linux.

Полный синтаксис параметров, доступных для различных команд (включая безопасность), см. в следующих статьях:

Примечание.

Хотя вы создаете группу доступности, тип конечной точки используется FOR DATABASE_MIRRORING, так как некоторые базовые аспекты когда-то были общими с этой устаревшей функцией.

В этом примере создаются сертификаты для конфигурации с тремя узлами. Имена экземпляров: LinAGN1и LinAGN2LinAGN3.

  1. Выполните следующий скрипт LinAGN1 , чтобы создать главный ключ, сертификат и конечную точку и создать резервную копию сертификата. В этом примере для конечной точки используется стандартный TCP-порт 5022.

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN1_Cert
        WITH SUBJECT = 'LinAGN1 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN1_Cert TO FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN1_Cert, ROLE = ALL);
    GO
    
  2. Выполните то же самое LinAGN2в:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    WITH SUBJECT = 'LinAGN2 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN2_Cert
    TO FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP
    STATE = STARTED
    AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL)
    FOR DATABASE_MIRRORING (
        AUTHENTICATION = CERTIFICATE LinAGN2_Cert,
        ROLE = ALL);
    GO
    
  3. Наконец, выполните ту же последовательность LinAGN3в:

    CREATE MASTER KEY ENCRYPTION BY PASSWORD = '<StrongPassword>';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
        WITH SUBJECT = 'LinAGN3 AG Certificate';
    GO
    
    BACKUP CERTIFICATE LinAGN3_Cert TO FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
    CREATE ENDPOINT AGEP STATE = STARTED AS TCP (
        LISTENER_PORT = 5022,
        LISTENER_IP = ALL
    )
    FOR DATABASE_MIRRORING(AUTHENTICATION = CERTIFICATE LinAGN3_Cert, ROLE = ALL);
    GO
    
  4. Используя scp или другую служебную программу, скопируйте резервные копии сертификатов в каждый узел, который будет входить в группу доступности.

    В этом примере:

    • Копирование LinAGN1_Cert.cer в LinAGN2 и LinAGN3.
    • Копирование LinAGN2_Cert.cer в LinAGN1 и LinAGN3.
    • Копирование LinAGN3_Cert.cer в LinAGN1 и LinAGN2.
  5. Измените владельца и группу для скопированных файлов сертификатов на mssql.

    sudo chown mssql:mssql <CertFileName>
    
  6. Создайте имена входа на уровне экземпляра и пользователи, связанные с LinAGN2 и LinAGN3 вкл LinAGN1.

    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  7. Восстановление LinAGN2_Cert и LinAGN3_Cert включение LinAGN1. Наличие сертификатов других реплик необходимо для обмена данными и безопасности группы доступности.

    CREATE CERTIFICATE LinAGN2_Cert AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  8. Предоставьте имена входам, связанным с LinAG2 и LinAGN3 разрешением для подключения к конечной точке LinAGN1.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  9. Создайте имена входа на уровне экземпляра и пользователи, связанные с LinAGN1 и LinAGN3 вкл LinAGN2.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN3_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN3_User FOR LOGIN LinAGN3_Login;
    GO
    
  10. Восстановление LinAGN1_Cert и LinAGN3_Cert включение LinAGN2.

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN3_Cert
    AUTHORIZATION LinAGN3_User
    FROM FILE = '/var/opt/mssql/data/LinAGN3_Cert.cer';
    GO
    
  11. Предоставьте имена входам, связанным с LinAG1 и LinAGN3 разрешением для подключения к конечной точке LinAGN2.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN3_Login;
    GO
    
  12. Создайте имена входа на уровне экземпляра и пользователи, связанные с LinAGN1 и LinAGN2 вкл LinAGN3.

    CREATE LOGIN LinAGN1_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN1_User FOR LOGIN LinAGN1_Login;
    GO
    
    CREATE LOGIN LinAGN2_Login WITH PASSWORD = '<StrongPassword>';
    CREATE USER LinAGN2_User FOR LOGIN LinAGN2_Login;
    GO
    
  13. Восстановление LinAGN1_Cert и LinAGN2_Cert включение LinAGN3.

    CREATE CERTIFICATE LinAGN1_Cert
    AUTHORIZATION LinAGN1_User
    FROM FILE = '/var/opt/mssql/data/LinAGN1_Cert.cer';
    GO
    
    CREATE CERTIFICATE LinAGN2_Cert
    AUTHORIZATION LinAGN2_User
    FROM FILE = '/var/opt/mssql/data/LinAGN2_Cert.cer';
    GO
    
  14. Предоставьте имена входам, связанным с LinAG1 и LinAGN2 разрешением для подключения к конечной точке LinAGN3.

    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN1_Login;
    GO
    
    GRANT CONNECT ON ENDPOINT::AGEP TO LinAGN2_Login;
    GO
    

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

В этом разделе описывается, как использовать SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности для SQL Server.

Использование SQL Server Management Studio

В этом разделе показано, как создать группу доступности с типом кластера "Внешний" с помощью мастера создания групп доступности в SSMS.

  1. В SSMS разверните узел Высокий уровень доступности Always On, щелкните правой кнопкой мыши узел Группы доступности и выберите пункт Мастер создания групп доступности.

  2. В диалоговом окне "Введение" нажмите кнопку Далее.

  3. В диалоговом окне "Указать параметры группы доступности" введите имя группы доступности и выберите тип EXTERNAL кластера или NONE в раскрывающемся списке. Внешний тип следует использовать, если будет развертываться кластер Pacemaker. Ни один из них не предназначен для специализированных сценариев, таких как горизонтальное масштабирование чтения. Выбор параметра для обнаружения работоспособности на уровне базы данных необязателен. Дополнительные сведения об этом параметре см. в статье Параметр определения уровня работоспособности базы данных группы доступности. Выберите Далее.

    Screenshot of Create Availability Group showing cluster type.

  4. В диалоговом окне "Выбор баз данных" выберите базы данных, которые будут участвовать в группе доступности. Прежде чем добавлять базу данных в группу доступности, необходимо создать ее полную резервную копию. Выберите Далее.

  5. В диалоговом окне "Указание реплик" щелкните Добавить реплику.

  6. В диалоговом окне Подключение на сервер введите имя экземпляра Linux SQL Server, который будет вторичным реплика, и учетными данными для подключения. Нажмите Подключиться.

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

  8. Все три экземпляра теперь должны отображаться в диалоговом окне "Указание реплик". Если используется тип кластера "Внешний", режим доступности для вторичной реплики, которая будет истинной вторичной репликой, должен быть тем же, что и для первичной, а режим отработки отказа должен быть "Внешний". Для реплики, поддерживающей только конфигурацию, выберите режим доступности "Только конфигурация".

    В приведенном ниже примере показана группа доступности с двумя репликами, типом кластера "Внешний" и репликой, поддерживающей только конфигурацию.

    Screenshot of Create Availability Group showing the readable secondary option.

    В приведенном ниже примере показана группа доступности с двумя репликами, типом кластера "Нет" и репликой, поддерживающей только конфигурацию.

    Screenshot of Create Availability Group showing the Replicas page.

  9. Если вы хотите изменить параметры резервного копирования, перейдите на вкладку "Параметры резервного копирования". Дополнительные сведения о параметрах резервного копирования с помощью групп доступности см. в статье "Настройка резервных копий для вторичных реплика группы доступности AlwaysOn".

  10. При использовании доступных для чтения вторичных файлов или создании группы доступности с типом кластера None для масштабирования чтения можно создать прослушиватель, выбрав вкладку Прослушивателя. Прослушиватель также можно добавить позже. Чтобы создать прослушиватель, установите переключатель в положение Создать прослушиватель группы доступности и введите имя, порт TCP/IP, а также укажите, следует ли использовать статический IP-адрес или адрес, назначаемый службой DHCP автоматически. Учтите, что для группы доступности с типом кластера "Нет" IP-адрес должен быть статическим. Им должен быть IP-адрес первичной реплики.

    Screenshot of Create Availability Group showing the listener option.

  11. Если прослушиватель создается для сценариев доступа для чтения, SSMS 17.3 и более поздних версий позволяет создать маршрутизацию с доступом только для чтения в мастере. Ее можно также добавить позднее с помощью SSMS или Transact-SQL. Чтобы добавить маршрутизацию только для чтения сразу, выполните указанные ниже действия.

    1. Перейдите на вкладку "Маршрутизация только для чтения".

    2. Введите URL-адреса реплик только для чтения. Эти URL-адреса аналогичны адресам конечных точек за тем исключением, что используется порт экземпляра, а не конечной точки.

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

  12. Выберите Далее.

  13. Выберите способ инициализации вторичных реплика. Способ по умолчанию — автоматическое заполнение, для чего требуется одинаковый путь на всех серверах, входящих в группу доступности. Кроме того, мастер может выполнять резервное копирование, копирование и восстановление (второй вариант); оно присоединено, если вы вручную создали резервную копию, скопировали и восстановили базу данных в реплика (третий вариант) или добавьте базу данных позже (последний вариант). Как и в случае с сертификатами, если вы вручную делаете резервные копии и копируете их, разрешения на файлы резервной копии необходимо задать на других реплика. Выберите Далее.

  14. В диалоговом окне проверки, если все не возвращается в качестве успешного выполнения, изучите его. Некоторые предупреждения допустимы и не являются смертельными, например, если вы не создаете прослушиватель. Выберите Далее.

  15. В диалоговом окне "Сводка" нажмите кнопку Готово. Теперь начинается процесс создания группы доступности.

  16. Когда создание группы доступности завершится, в окне "Результаты" нажмите кнопку Закрыть. Теперь группа доступности отображается в реплика в динамических административных представлениях и в папке AlwaysOn с высоким уровнем доступности в SSMS.

Использование Transact-SQL

В этом разделе приводятся примеры создания группы доступности с помощью Transact-SQL. Прослушиватель и маршрутизацию только для чтения можно настроить после создания группы доступности. Сама группа доступности может быть изменена, ALTER AVAILABILITY GROUPно изменение типа кластера невозможно сделать в SQL Server 2017 (14.x). Если вы не означало создать группу доступности с типом внешнего кластера, необходимо удалить ее и повторно создать с типом кластера None. Дополнительные сведения и описание других параметров см. в следующих статьях:

Пример A. Два реплика с реплика только для конфигурации (внешний тип кластера)

В этом примере показано, как создать группу доступности с двумя репликами, включающую реплику, поддерживающую только конфигурацию.

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

    CREATE AVAILABILITY GROUP [<AGName>]
    WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE <DBName>
    REPLICA ON N'LinAGN1' WITH (
       ENDPOINT_URL = N' TCP://LinAGN1.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT),
    N'LinAGN2' WITH (
       ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
       FAILOVER_MODE = EXTERNAL,
       AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
       SEEDING_MODE = AUTOMATIC),
    N'LinAGN3' WITH (
       ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
       AVAILABILITY_MODE = CONFIGURATION_ONLY);
    GO
    
  2. В окне запроса, подключенном к другой реплике, выполните приведенные ниже команды, чтобы присоединить реплику к группе доступности и инициировать процесс заполнения из первичной во вторичную реплику.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. В окне запроса, подключенном к реплике, поддерживающей только конфигурацию, присоедините эту реплику к группе доступности.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    

Пример B: три реплика с маршрутизацией только для чтения (внешний тип кластера)

В этом примере демонстрируется конфигурация с тремя полными репликами и настройка маршрутизации только для чтения в рамках создания группы доступности.

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

    CREATE AVAILABILITY GROUP [<AGName>] WITH (CLUSTER_TYPE = EXTERNAL)
    FOR DATABASE < DBName > REPLICA ON
        N'LinAGN1' WITH (
            ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN2.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:1433')
        ),
        N'LinAGN2' WITH (
            ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN3.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:1433')
        ),
        N'LinAGN3' WITH (
            ENDPOINT_URL = N'TCP://LinAGN3.FullyQualified.Name:5022',
            FAILOVER_MODE = EXTERNAL,
            SEEDING_MODE = AUTOMATIC,
            AVAILABILITY_MODE = SYNCHRONOUS_COMMIT,
            PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                (
                    'LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name'
                    )
                )),
            SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN3.FullyQualified.Name:1433')
        )
        LISTENER '<ListenerName>' (
            WITH IP = ('<IPAddress>', '<SubnetMask>'), Port = 1433
        );
    GO
    

    Несколько замечаний касательно этой конфигурации:

    • AGName — имя группы доступности.
    • DBName — имя базы данных, используемой с группой доступности. Это также может быть список имен через запятую.
    • ListenerName — это имя, отличное от любого из базовых серверов или узлов. Он будет зарегистрирован в DNS вместе с IPAddress.
    • IPAddress — это IP-адрес, связанный с ListenerName. Это также уникально и не так же, как и любой из серверов или узлов. Приложения и конечные пользователи используют или IPAddress подключаются ListenerName к группе доступности.
    • SubnetMask — маска подсети IPAddress. В SQL Server 2019 (15.x) и предыдущих версиях это 255.255.255.255. В SQL Server 2022 (16.x) и более поздних версиях это 0.0.0.0.
  2. В окне запроса, подключенном к другой реплике, выполните приведенные ниже команды, чтобы присоединить реплику к группе доступности и инициировать процесс заполнения из первичной во вторичную реплику.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = EXTERNAL);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    
  3. Повторите шаг 2 для третьей реплики.

Пример C: две реплика с маршрутизацией только для чтения (тип кластера нет)

В этом примере демонстрируется создание конфигурации с двумя репликами с типом кластера "Нет". Он используется для сценария масштабирования чтения, в котором отработка отказа не ожидается. Это создает прослушиватель, который фактически является основным реплика и маршрутизацией только для чтения, используя функцию циклического перебора.

  1. Выполните на узле, который будет основным реплика с полной копией баз данных для чтения и записи. В этом примере используется автоматическое заполнение.
CREATE AVAILABILITY
GROUP [<AGName>]
WITH (CLUSTER_TYPE = NONE)
FOR DATABASE <DBName> REPLICA ON
    N'LinAGN1' WITH (
        ENDPOINT_URL = N'TCP://LinAGN1.FullyQualified.Name: <PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(
            ALLOW_CONNECTIONS = READ_WRITE,
            READ_ONLY_ROUTING_LIST = (('LinAGN1.FullyQualified.Name'.'LinAGN2.FullyQualified.Name'))
        ),
        SECONDARY_ROLE(
            ALLOW_CONNECTIONS = ALL,
            READ_ONLY_ROUTING_URL = N'TCP://LinAGN1.FullyQualified.Name:<PortOfInstance>'
        )
    ),
    N'LinAGN2' WITH (
        ENDPOINT_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfEndpoint>',
        FAILOVER_MODE = MANUAL,
        SEEDING_MODE = AUTOMATIC,
        AVAILABILITY_MODE = ASYNCHRONOUS_COMMIT,
        PRIMARY_ROLE(ALLOW_CONNECTIONS = READ_WRITE, READ_ONLY_ROUTING_LIST = (
                 ('LinAGN1.FullyQualified.Name',
                    'LinAGN2.FullyQualified.Name')
                 )),
        SECONDARY_ROLE(ALLOW_CONNECTIONS = ALL, READ_ONLY_ROUTING_URL = N'TCP://LinAGN2.FullyQualified.Name:<PortOfInstance>')
    ),
    LISTENER '<ListenerName>' (WITH IP = (
             '<PrimaryReplicaIPAddress>',
             '<SubnetMask>'),
            Port = <PortOfListener>
    );
GO

Где:

  • AGName — имя группы доступности.
  • DBName — имя базы данных, которая будет использоваться с группой доступности. Это также может быть список имен через запятую.
  • PortOfEndpoint — номер порта, используемый созданной конечной точкой.
  • PortOfInstance — номер порта, используемый экземпляром SQL Server.
  • ListenerName— это имя, отличное от любого из базовых реплика, но не используется.
  • PrimaryReplicaIPAddress— ЭТО IP-адрес основного реплика.
  • SubnetMask — маска подсети IPAddress. В SQL Server 2019 (15.x) и предыдущих версиях это 255.255.255.255. В SQL Server 2022 (16.x) и более поздних версиях это 0.0.0.0.
  1. Присоедините вторичную реплику к группе доступности и инициируйте автоматическое заполнение.

    ALTER AVAILABILITY GROUP [<AGName>] JOIN WITH (CLUSTER_TYPE = NONE);
    GO
    
    ALTER AVAILABILITY GROUP [<AGName>] GRANT CREATE ANY DATABASE;
    GO
    

Создание имени входа и разрешений SQL Server для Pacemaker

Кластер с высоким уровнем доступности Pacemaker, базовый SQL Server на Linux должен иметь доступ к экземпляру SQL Server и разрешениям самой группы доступности. Эти действия создают имя входа и связанные разрешения, а также файл, который сообщает Pacemaker, как войти в SQL Server.

  1. В окне запроса, подключенном к первой реплика, выполните следующий скрипт:

    CREATE LOGIN PMLogin WITH PASSWORD ='<StrongPassword>';
    GO
    
    GRANT VIEW SERVER STATE TO PMLogin;
    GO
    
    GRANT ALTER, CONTROL, VIEW DEFINITION ON AVAILABILITY GROUP::<AGThatWasCreated> TO PMLogin;
    GO
    
  2. В узле 1 введите следующую команду:

    sudo emacs /var/opt/mssql/secrets/passwd
    

    Откроется редактор Emacs.

  3. Введите в редакторе следующие две строки:

    PMLogin
    
    <StrongPassword>
    
  4. Ctrl Удерживайте клавишу, а затем CнажмитеX, чтобы выйти и сохранить файл.

  5. Выполнить

    sudo chmod 400 /var/opt/mssql/secrets/passwd
    

    чтобы заблокировать файл.

  6. Повторите шаги 1–5 на других серверах, которые будут служить репликами.

Создание ресурсов групп доступности в кластере Pacemaker (только внешний тип)

После создания группы доступности в SQL Server соответствующие ресурсы необходимо создать в Pacemaker, если указан тип кластера External. С группой ресурсов связаны два ресурса: сама группа доступности и IP-адрес. Настройка ресурса IP-адреса является необязательным, если вы не используете функцию прослушивателя, но рекомендуется.

Созданный ресурс группы доступности — это тип ресурса, который называется клоном. Ресурс группы доступности по сути содержит копии на каждом узле, и есть один управляемый ресурс, называемый главным. Главный ресурс связан с сервером, на котором размещается первичная реплика. Другие ресурсы используются для размещения вторичных реплик (обычных или поддерживающих только конфигурацию) и могут становиться главными в случае отработки отказа.

Примечание.

Обмен данными без смещения

Эта статья содержит ссылки на термин slave (подчиненный), который Майкрософт считает оскорбительным при использовании в этом контексте. Термин присутствует в этой статье, так как в настоящее время он присутствует в программном обеспечении. При удалении термина из программного обеспечения мы удалим его из статьи.

  1. Чтобы создать ресурс группы доступности, используйте следующий синтаксис:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failure-timeout=30s --master meta notify=true
    

    Где NameForAGResource это уникальное имя, заданное этому ресурсу кластера для группы доступности, и AGName имя созданной группы доступности.

    В RHEL 7.7 и Ubuntu 18.04 и более поздних версиях может возникнуть предупреждение с использованием --masterили ошибкой, например sqlag_monitor_0 on ag1 'not configured' (6): call=6, status=complete, exitreason='Resource must be configured with notify=true'. Чтобы избежать этой ситуации, используйте следующее:

    sudo pcs resource create <NameForAGResource> ocf:mssql:ag ag_name=<AGName> meta failover-timeout=30s master notify=true
    
  2. Создайте ресурс IP-адреса для группы доступности, который будет связан с прослушивателем.

    sudo pcs resource create <NameForIPResource> ocf:heartbeat:IPaddr2 ip=<IPAddress> cidr_netmask=<Netmask>
    

    Где NameForIPResource это уникальное имя ресурса IP и IPAddress статический IP-адрес, назначенный ресурсу.

  3. Чтобы ресурс IP-адреса и ресурс группы доступности выполнялись в одном узле, необходимо настроить ограничение совместного размещения.

    sudo pcs constraint colocation add <NameForIPResource> <NameForAGResource>-master INFINITY with-rsc-role=Master
    

    Где NameForIPResource имя ресурса IP-адреса и NameForAGResource имя ресурса группы доступности.

  4. Создайте ограничение очередности, чтобы ресурс группы доступности запускался до ресурса IP-адреса. Ограничение совместного размещения предполагает такое ограничение, поэтому его необходимо задать явно.

    sudo pcs constraint order promote <NameForAGResource>-master then start <NameForIPResource>
    

    Где NameForIPResource имя ресурса IP-адреса и NameForAGResource имя ресурса группы доступности.

Следующий шаг

В этом руководстве вы узнали, как создать и настроить группу доступности для SQL Server на Linux. Вы научились выполнять следующие задачи:

  • включение групп доступности;
  • создание конечных точек и сертификатов для групп доступности;
  • Используйте SQL Server Management Studio (SSMS) или Transact-SQL для создания группы доступности.
  • Создайте имя входа и разрешения SQL Server для Pacemaker.
  • создание ресурсов группы доступности в кластере Pacemaker.

Сведения о большинстве задач администрирования групп доступности, включая обновление и отработку отказа, см. в следующей статье: