Настройка кластера RHEL для группы доступности SQL Server

Применимо к: даSQL Server (все поддерживаемые версии) — Linux

Этот документ описывает, как создать кластер группы доступности с тремя узлами для SQL Server на Red Hat Enterprise Linux. Для обеспечения высокого уровня доступности группе доступности в Linux требуется три узла — см. статью Высокий уровень доступности и защита данных для конфигураций групп доступности. Уровень кластеризации основан на надстройке высокого уровня доступности Red Hat Enterprise Linux (RHEL), созданной на базе Pacemaker.

Примечание

Для доступа к полной документации по Red Hat требуется действительная подписка.

Дополнительные сведения о конфигурации кластера, параметрах агентов ресурсов и управлении см. в справочной документации по RHEL.

Примечание

SQL Server интегрирован с Pacemaker в Linux не так тесно, как с отказоустойчивой кластеризацией Windows Server. Экземпляр SQL Server не располагает сведениями о кластере. Pacemaker обеспечивает оркестрацию ресурсов кластера. Кроме того, имя виртуальной сети относится только к отказоустойчивой кластеризации Windows Server, в Pacemaker его эквивалент отсутствует. Динамические административные представления группы доступности, запрашивающие сведения о кластере, возвращают пустые строки для кластеров Pacemaker. Чтобы создать прослушиватель для прозрачного переподключения после отработки отказа, вручную зарегистрируйте имя прослушивателя в DNS с IP, использованным для создания ресурса виртуального IP-адреса.

В следующих разделах описаны шаги по настройке кластера Pacemaker и добавлению группы доступности в качестве ресурса в кластер для обеспечения высокой доступности.

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

Действия по созданию группы доступности на серверах Linux для обеспечения высокой доступности отличаются от действий, выполняемых в отказоустойчивом кластере Windows Server. Ниже описывается общий порядок действий.

  1. Настройте SQL Server в узлах кластера.

  2. Создайте группу доступности.

  3. Настройте диспетчер ресурсов кластера, например Pacemaker. Эти инструкции приведены в этом документе.

    Способ настройки диспетчера ресурсов кластера зависит от конкретного дистрибутива Linux.

    Важно!

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

    Кластер Linux использует ограждение для возврата кластера в известное состояние. Способ настройки ограждения зависит от дистрибутива и среды. Сейчас ограждение недоступно в некоторых облачных средах. Дополнительные сведения см. в статье о политиках поддержки для кластеров RHEL с высоким уровнем доступности на платформах виртуализации.

  4. Добавьте группу доступности в виде ресурса в кластере.

Настройка высокой доступности для RHEL

Чтобы настроить высокую доступность для RHEL, включите подписку высокой доступности, а затем настройте Pacemaker.

Включение подписки высокой доступности для RHEL

Каждый узел в кластере должен иметь соответствующую подписку для RHEL и надстройку высокой доступности. Ознакомьтесь с требованиями в статье Установка пакетов кластера высокой доступности в Red Hat Enterprise Linux. Выполните следующие действия, чтобы настроить подписку и репозитории.

  1. Зарегистрируйте систему.

    sudo subscription-manager register
    

    Укажите имя пользователя и пароль.

  2. Перечислите доступные пулы для регистрации.

    sudo subscription-manager list --available
    

    В списке доступных пулов запишите идентификатор пула для подписки высокой доступности.

  3. Измените приведенный ниже скрипт. Замените <pool id> идентификатором пула для высокой доступности из предыдущего шага. Запустите скрипт, чтобы подключить подписку.

    sudo subscription-manager attach --pool=<pool id>
    
  4. Включите репозиторий.

    RHEL 7

    sudo subscription-manager repos --enable=rhel-ha-for-rhel-7-server-rpms
    

    RHEL 8

    sudo subscription-manager repos --enable=rhel-8-for-x86_64-highavailability-rpms
    

Дополнительные сведения см. в статье Pacemaker — кластер с открытым исходным кодом и высокой доступностью.

После настройки подписки выполните следующие действия, чтобы настроить Pacemaker.

Настройка Pacemaker

После регистрации подписки выполните следующие действия, чтобы настроить Pacemaker.

  1. В брандмауэрах на всех узлах кластера откройте порты для Pacemaker. Чтобы открыть эти порты с помощью firewalld, выполните следующую команду:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Если в брандмауэре нет встроенной конфигурации с высоким уровнем доступности, откройте для Pacemaker следующие порты.

    • Порты TCP: 2224, 3121, 21064.
    • Порт UDP: 5405.
  2. Установите пакеты Pacemaker на всех узлах.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  3. Задайте пароль для пользователя по умолчанию, который создается при установке пакетов Pacemaker и Corosync. Используйте на всех узлах один и тот же пароль.

    sudo passwd hacluster
    
  4. Чтобы разрешить повторное присоединение узлов к кластеру после перезагрузки, включите и запустите службу pcsd и Pacemaker. Выполните на всех узлах следующую команду.

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  5. Создайте кластер. Чтобы создать кластер, выполните следующую команду:

    RHEL 7

    sudo pcs cluster auth <node1> <node2> <node3> -u hacluster -p <password for hacluster>
    sudo pcs cluster setup --name <clusterName> <node1> <node2> <node3> 
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    RHEL8

    Для RHEL 8 необходимо проверять подлинность узлов отдельно. При появлении запроса введите имя пользователя и пароль для hacluster вручную.

    sudo pcs host auth <node1> <node2> <node3>
    sudo pcs cluster setup <clusterName> <node1> <node2> <node3>
    sudo pcs cluster start --all
    sudo pcs cluster enable --all
    

    Примечание

    Если кластер был ранее настроен ранее на тех же узлах, при выполнении команды pcs cluster setup используйте параметр --force. Этот параметр эквивалентен запуску pcs cluster destroy. Чтобы повторно включить Pacemaker, запустите sudo systemctl enable pacemaker.

  6. Установите агент ресурсов SQL Server для SQL Server. Выполните следующие команды на всех узлах.

    sudo yum install mssql-server-ha
    

После настройки Pacemaker используйте pcs для взаимодействия с кластером. Выполните все команды на одном узле из кластера.

Настройка ограждения (STONITH)

Поставщики кластера Pacemaker требуют, чтобы STONITH был включен, а устройство ограждения настроено для поддерживаемой установки кластера. STONITH расшифровывается как "застрелить другой узел". Если диспетчер ресурсов кластера не может определить состояние узла или ресурса на нем, ограждение переводит кластер в известное состояние.

Устройство STONITH предоставляет агент ограждения. В статье Настройка кластера Pacemaker в Red Hat Enterprise Linux в Azure приводится пример создания устройства STONITH для этого кластера в Azure. Измените инструкции для своей среды.

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

Ограждение на уровне узлов гарантирует, что в узле не выполняются никакие ресурсы. Это осуществляется путем сброса узла. Pacemaker поддерживает множество разных устройств ограждения, например источник бесперебойного питания или карты интерфейса управления для серверов.

Дополнительные сведения о STONITH и ограждении см. в следующих статьях.

Примечание

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

sudo pcs property set stonith-enabled=false

Отключение STONITH выполняется только в целях тестирования. Если вы планируете использовать Pacemaker в рабочей среде, следует спланировать реализацию STONITH с учетом особенностей среды и поддерживать ее в рабочем состоянии.

Задание свойства кластера cluster-recheck-interval

cluster-recheck-interval указывает интервал опроса, с которым кластер проверяет наличие изменений в параметрах ресурсов, ограничениях или других параметрах кластера. Если реплика выходит из строя, кластер пытается перезапустить ее с интервалом, который связан со значениями failure-timeout и cluster-recheck-interval. Например, если для failure-timeout установлено значение 60 с, а для cluster-recheck-interval — 120 с, то повторная попытка перезапуска предпринимается с интервалом, который больше 60 с, но меньше 120 с. Мы рекомендуем установить для failure-timeout значение, равное 60 с, а для cluster-recheck-interval значение больше 60 с. Задавать для cluster-recheck-interval небольшое значение не рекомендуется.

Чтобы изменить значение свойства на 2 minutes, выполните следующую команду:

sudo pcs property set cluster-recheck-interval=2min

Важно!

Все дистрибутивы, использующие последний доступный пакет Pacemaker 1.1.18-11.el7, вносят изменение в поведение для параметра кластера start-failure-is-fatal, когда его значение равно false. Это изменение влияет на рабочий процесс отработки отказа. В случае сбоя первичной реплики ожидается, что будет выполнена отработка отказа кластера на одну из доступных вторичных реплик. Вместо этого пользователи увидят, что кластер продолжает попытки запустить первичную реплику с ошибкой. Если первичная реплика не включается (из-за постоянного сбоя), кластер не выполняет отработку отказа на другую доступную вторичную реплику. Из-за этого изменения рекомендуемая ранее конфигурация для установки параметра start-failure-is-fatal больше не действительна, и для этого параметра нужно вернуть значение по умолчанию true. Кроме того, нужно обновить ресурс группы доступности для включения свойства failover-timeout.

Чтобы изменить значение свойства на true, выполните следующую команду:

sudo pcs property set start-failure-is-fatal=true

Чтобы изменить значение свойства failure-timeout ресурса ag_cluster на 60s, выполните следующую команду.

pcs resource update ag_cluster meta failure-timeout=60s

Сведения о свойствах кластера Pacemaker см. в статье Свойства кластеров Pacemaker.

Создание учетных данных SQL Server для Pacemaker

  1. На всех серверах SQL Server создайте имя для входа на сервер с помощью Pacemaker. Следующий запрос Transact-SQL создает имя для входа:

    USE [master]
    GO
    CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!'
    
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]
    

При создании группы доступности пользователю Pacemaker потребуются разрешения на изменение, управление и просмотр определения для группы доступности после ее создания, но до того, как в нее будут добавлены узлы.

  1. На всех серверах SQL Server сохраните учетные данные для входа SQL Server.

    echo 'pacemakerLogin' >> ~/pacemaker-passwd
    echo 'ComplexP@$$w0rd!' >> ~/pacemaker-passwd
    sudo mv ~/pacemaker-passwd /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 400 /var/opt/mssql/secrets/passwd # Only readable by root
    

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

Чтобы создать ресурс группы доступности, используйте команду pcs resource create и задайте свойства ресурса. Приведенная ниже команда ocf:mssql:ag создает ресурс типа «основной/подчиненный» для группы доступности ag1.

RHEL 7

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s master notify=true

RHEL 8

С выходом RHEL 8 был изменен синтаксис Create. Если вы используете RHEL 8, терминология master изменилась на promotable. Используйте следующую команду Create вместо приведенной выше команды:

sudo pcs resource create ag_cluster ocf:mssql:ag ag_name=ag1 meta failure-timeout=60s promotable notify=true

Примечание

При создании ресурса и периодически после этого агент ресурсов Pacemaker автоматически задает в группе доступности значение REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT на основе ее конфигурации. Например, если группа доступности содержит три синхронные реплики, агент задаст для REQUIRED_SYNCHRONIZED_SECONDARIES_TO_COMMIT значение 1. Дополнительную информацию и параметры конфигурации см. в разделе High Availability and Data Protection for Availability Group Configurations (Высокий уровень доступности и защита данных для конфигураций групп доступности).

Создание ресурса виртуального IP-адреса

Чтобы создать ресурс виртуального IP-адреса, выполните указанную ниже команду на одном узле. Используйте доступный статический IP-адрес из сети. Замените IP-адрес между <10.128.16.240> на допустимый IP-адрес.

sudo pcs resource create virtualip ocf:heartbeat:IPaddr2 ip=<10.128.16.240>

В Pacemaker эквивалент имени виртуального сервера отсутствует. Чтобы использовать строку подключения, указывающую на строковое имя сервера, вместо IP-адреса, зарегистрируйте виртуальный IP-адрес ресурса и требуемое имя виртуального сервера в DNS. Для конфигураций аварийного восстановления зарегистрируйте имя и IP-адрес нужного виртуального сервера на DNS-серверах на основном сайте и сайте аварийного восстановления.

Добавление ограничения совместного размещения

Почти каждое решение в кластере Pacemaker, например выбор места запуска ресурса, принимается путем сравнения оценок. Оценки вычисляются для каждого ресурса. Диспетчер кластерных ресурсов выбирает узел с наивысшей оценкой для конкретного ресурса. Если узел имеет отрицательную оценку для ресурса, последний не может выполняться на этом узле.

В кластере Pacemaker можно управлять решениями для кластера с помощью ограничений. Ограничения имеют оценку. Если ограничение имеет оценку меньше INFINITY, Pacemaker считает его рекомендацией. Оценка, равная INFINITY, указывает на обязательный характер.

Чтобы убедиться, что первичная реплика и ресурсы виртуального IP-адреса выполняются на одном узле, определите ограничение совместного размещения с оценкой INFINITY. Чтобы добавить ограничение совместного размещения, выполните приведенную ниже команду на одном узле.

RHEL 7

При создании ресурса ag_cluster в RHEL 7 он создает ресурс как ag_cluster-master. Используйте следующий формат команды в RHEL 7:

sudo pcs constraint colocation add virtualip ag_cluster-master INFINITY with-rsc-role=Master

RHEL 8

При создании ресурса ag_cluster в RHEL 8 он создает ресурс как ag_cluster-clone. Используйте следующий формат команды в RHEL 8:

sudo pcs constraint colocation add virtualip with master ag_cluster-clone INFINITY with-rsc-role=Master

Добавление ограничения упорядочения

Ограничение совместного размещения имеет неявное ограничение упорядочения. Оно перемещает ресурс виртуального IP-адреса перед перемещением ресурса группы доступности. Последовательность событий по умолчанию:

  1. Пользователь выполняет команду pcs resource move с узла node1 на узел node2 для первичной реплики группы доступности.

  2. Ресурс виртуального IP-адреса останавливается в узле 1.

  3. Ресурс виртуального IP-адреса запускается в узле 2.

    Примечание

    На этом этапе IP-адрес временно указывает на узел 2, пока узел 2 все еще является вторичной репликой перед отработкой отказа.

  4. Первичная реплика группы доступности на узле 1 понижается до вторичной.

  5. Вторичная реплика группы доступности на узле 2 повышается до первичной.

Чтобы предотвратить ситуацию, когда IP-адрес временно указывает на узел с вторичной репликой перед отработкой отказа, добавьте ограничение упорядочения.

Чтобы добавить ограничение упорядочения, выполните приведенную ниже команду в одном узле.

RHEL 7

sudo pcs constraint order promote ag_cluster-master then start virtualip

RHEL 8

sudo pcs constraint order promote ag_cluster-clone then start virtualip

Важно!

После настройки кластера и добавления группы доступности в качестве ресурса кластера вы не можете использовать Transact-SQL для отработки отказа ресурсов группы доступности. Ресурсы кластера SQL Server в Linux не так сильно зависят от операционной системы, как если бы они находились в отказоустойчивом кластере Windows Server (WSFC). Служба SQL Server не имеет сведений о наличии кластера. Вся оркестрация осуществляется с помощью средств управления кластерами. В RHEL или Ubuntu используйте pcs, а в SLES — crm.

Вручную выполните отработку отказа группы доступности с помощью pcs. Не инициируйте отработку отказа с помощью Transact-SQL. Инструкции см. в статье Отработка отказа.

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

Использование высокодоступной группы доступности