Настройка кластера 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. Ниже описывается общий порядок действий.
Настройте диспетчер ресурсов кластера, например Pacemaker. Эти инструкции приведены в этом документе.
Способ настройки диспетчера ресурсов кластера зависит от конкретного дистрибутива Linux.
Важно!
Для обеспечения высокого уровня доступности в рабочих средах требуется агент ограждения, например STONITH. В примерах в этой документации агенты ограждения не используются. Примеры приводятся только для тестирования и проверки.
Кластер Linux использует ограждение для возврата кластера в известное состояние. Способ настройки ограждения зависит от дистрибутива и среды. Сейчас ограждение недоступно в некоторых облачных средах. Дополнительные сведения см. в статье о политиках поддержки для кластеров RHEL с высоким уровнем доступности на платформах виртуализации.
Настройка высокой доступности для RHEL
Чтобы настроить высокую доступность для RHEL, включите подписку высокой доступности, а затем настройте Pacemaker.
Включение подписки высокой доступности для RHEL
Каждый узел в кластере должен иметь соответствующую подписку для RHEL и надстройку высокой доступности. Ознакомьтесь с требованиями в статье Установка пакетов кластера высокой доступности в Red Hat Enterprise Linux. Выполните следующие действия, чтобы настроить подписку и репозитории.
Зарегистрируйте систему.
sudo subscription-manager register
Укажите имя пользователя и пароль.
Перечислите доступные пулы для регистрации.
sudo subscription-manager list --available
В списке доступных пулов запишите идентификатор пула для подписки высокой доступности.
Измените приведенный ниже скрипт. Замените
<pool id>
идентификатором пула для высокой доступности из предыдущего шага. Запустите скрипт, чтобы подключить подписку.sudo subscription-manager attach --pool=<pool id>
Включите репозиторий.
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.
В брандмауэрах на всех узлах кластера откройте порты для Pacemaker. Чтобы открыть эти порты с помощью
firewalld
, выполните следующую команду:sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Если в брандмауэре нет встроенной конфигурации с высоким уровнем доступности, откройте для Pacemaker следующие порты.
- Порты TCP: 2224, 3121, 21064.
- Порт UDP: 5405.
Установите пакеты Pacemaker на всех узлах.
sudo yum install pacemaker pcs fence-agents-all resource-agents
Задайте пароль для пользователя по умолчанию, который создается при установке пакетов Pacemaker и Corosync. Используйте на всех узлах один и тот же пароль.
sudo passwd hacluster
Чтобы разрешить повторное присоединение узлов к кластеру после перезагрузки, включите и запустите службу
pcsd
и Pacemaker. Выполните на всех узлах следующую команду.sudo systemctl enable pcsd sudo systemctl start pcsd sudo systemctl enable pacemaker
Создайте кластер. Чтобы создать кластер, выполните следующую команду:
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
.Установите агент ресурсов 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 и ограждении см. в следующих статьях.
- Кластеры Pacemaker с нуля
- Ограждение и STONITH
- Надстройка высокой доступности Red Hat с Pacemaker: ограждение
Примечание
Так как конфигурация ограждения на уровне узлов сильно зависит от вашей среды, отключите ее для этого руководства (ее можно настроить позже). Следующий скрипт отключает ограждение на уровне узла.
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
На всех серверах SQL Server создайте имя для входа на сервер с помощью Pacemaker. Следующий запрос Transact-SQL создает имя для входа:
USE [master] GO CREATE LOGIN [pacemakerLogin] with PASSWORD= N'ComplexP@$$w0rd!' ALTER SERVER ROLE [sysadmin] ADD MEMBER [pacemakerLogin]
При создании группы доступности пользователю Pacemaker потребуются разрешения на изменение, управление и просмотр определения для группы доступности после ее создания, но до того, как в нее будут добавлены узлы.
На всех серверах 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-адреса перед перемещением ресурса группы доступности. Последовательность событий по умолчанию:
Пользователь выполняет команду
pcs resource move
с узла node1 на узел node2 для первичной реплики группы доступности.Ресурс виртуального IP-адреса останавливается в узле 1.
Ресурс виртуального IP-адреса запускается в узле 2.
Примечание
На этом этапе IP-адрес временно указывает на узел 2, пока узел 2 все еще является вторичной репликой перед отработкой отказа.
Первичная реплика группы доступности на узле 1 понижается до вторичной.
Вторичная реплика группы доступности на узле 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. Инструкции см. в статье Отработка отказа.