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

Область применения: SQL Server — Linux

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

Примечание.

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

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

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

Вы по-прежнему можете создать прослушиватель, чтобы использовать его для прозрачного переподключения после отработки отказа, но требуется вручную зарегистрировать имя прослушивателя на DNS-сервере с IP, использованным для создания ресурса виртуального IP-адреса (как описано в следующих разделах).

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

Уровень кластеризации основан на надстройке высокого уровня доступности Red Hat Enterprise Linux (RHEL), созданной на базе Pacemaker.

Примечание.

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

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

Дорожная карта

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

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

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

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

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

    Внимание

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

    RHEL 8

    Для 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 для взаимодействия с кластером. Выполните все команды на одном узле из кластера.

Рекомендации по нескольким сетевым интерфейсам (сетевым адаптерам)

При настройке высокого уровня доступности с серверами с несколькими сетевыми адаптерами следуйте приведенным ниже рекомендациям.

  • Убедитесь hosts , что файл настроен таким образом, чтобы IP-адреса сервера для нескольких сетевых адаптеров разрешались на имя узла сервера Linux на каждом узле.

  • При настройке кластера с помощью Pacemaker, используя имя узла серверов, следует настроить Corosync, чтобы настроить конфигурацию для всех сетевых адаптеров. Мы хотим только обмена данными Pacemaker/Corosync по одной сетевой адаптеру. После настройки кластера Pacemaker измените конфигурацию в corosync.conf файле и обновите IP-адрес выделенной сетевой карты, которую вы хотите использовать для связи Pacemaker/Corosync.

  • Заданный <hostname> в corosync.conf файле должен совпадать с выходными данными, заданными при выполнении обратного поиска (ping -a <ip_address>), и должно быть коротким именем, настроенным на узле. Убедитесь, hosts что файл также представляет правильный IP-адрес для разрешения имен.

Ниже выделены изменения в corosync.conf примере файла:

  nodelist {
    node {
        ring0_addr: <ip_address_of_node1_NIC1>
        name: <hostname_of_node1>
        nodeid: 1
    }
    node {
        ring0_addr: <ip_address_of_node2_NIC1>
        name: <hostname_of_node2>
        nodeid: 2
    }
    node {
        ring0_addr: <ip_address_of_node3_NIC1>
        name: <hostname_of_node3>
        nodeid: 3
    }
  }

Настройка устройства ограждения

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

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

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

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

Сведения о ограждении узла сбоем см. в следующих статьях:

Примечание.

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

sudo pcs property set stonith-enabled=false

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

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

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

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

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

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

Кроме того, нужно обновить ресурс группы доступности для включения свойства failure-timeout.

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

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

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

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 требуются ALTERCONTROLразрешения на группу доступности, VIEW DEFINITION но до добавления в нее всех узлов.

  2. Во всех экземплярах 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. Инструкции см. в статье Отработка отказа.