Бөлісу құралы:


Настройка кластера общих дисков SLES для SQL Server

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

В этом руководстве приведены инструкции по созданию кластера общего диска с двумя узлами для SQL Server на SUSE Linux Enterprise Server (SLES). Кластерный уровень основан на SUSE High Availability Extension (HAE), который построен на Pacemaker.

Примечание.

Начиная с SQL Server 2025 (17.x), SUSE Linux Enterprise Server (SLES) не поддерживается.

Дополнительные сведения о конфигурации кластера, параметрах агента ресурсов, управлении, лучших практиках и рекомендациях см. в разделе SUSE Linux Enterprise High Availability Extension 12 с пакетом обновления 5 (SP5).

Предварительные условия

Для завершения следующего комплексного сценария необходимо три компьютера: два для развертывания кластера из двух узлов и еще один сервер для настройки общего ресурса NFS. Ниже описаны общие действия по настройке этих серверов.

Установка и настройка операционной системы в каждом узле кластера

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

Установка и настройка SQL Server в каждом узле кластера

  1. Установите и настройте SQL Server на обоих узлах. Подробные инструкции см. в руководстве по установке SQL Server на Linux.

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

  3. Остановите и отключите SQL Server во вторичном узле. В следующем примере показаны остановка и отключение SQL Server:

    sudo systemctl stop mssql-server
    sudo systemctl disable mssql-server
    

    Примечание.

    Во время установки для экземпляра SQL Server создается главный ключ сервера (SMK) и помещается в /var/opt/mssql/secrets/machine-key. В Linux SQL Server всегда работает от имени локальной учетной записи mssql. Поскольку это локальная учетная запись, ее идентичность не передается между узлами. Необходимо скопировать ключ шифрования с первичного узла на каждый дополнительный узел, чтобы каждая локальная mssql учетная запись может получить доступ к ней для расшифровки SMK.

  4. На основном узле создайте учетную запись SQL Server для Pacemaker и предоставьте ей разрешение на выполнение sp_server_diagnostics. Pacemaker использует эту учетную запись, чтобы проверить, в каком узле запущен SQL Server.

    sudo systemctl start mssql-server
    

    Подключитесь к базе данных SQL Server master с учетной записью sa и выполните следующий сценарий:

    USE [master];
    GO
    
    CREATE LOGIN [<loginName>] with PASSWORD = N'<password>';
    GRANT VIEW SERVER STATE TO <loginName>;
    

    Внимание

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

  5. Остановите и отключите SQL Server в первичном узле.

  6. Следуйте указаниям в документации по SUSE, чтобы настроить и обновить файл hosts для каждого узла кластера. Файл hosts должен содержать IP-адрес и имя каждого узла кластера.

    Чтобы проверить IP-адрес текущего узла, выполните следующую команду:

    sudo ip addr show
    

    Задайте имя компьютера в каждом узле. Присвойте каждому узлу уникальное имя длиной не более 15 символов. Задайте имя компьютера, добавив его в /etc/hostname, используя YAST или вручную.

    В следующем примере показан файл /etc/hosts с дополнениями для двух узлов SLES1 и SLES2.

    127.0.0.1      localhost
    10.128.18.128  SLES1
    10.128.16.77   SLES2
    

    Все узлы кластера должны иметь доступ без пароля SSH друг к другу. В противном случае такие средства, как hb_report, crm_report, и Обозреватель истории Hawk могут собирать данные только с локального узла. Если вы используете нестандартный порт SSH, используйте -X этот параметр (см. другие требования и рекомендации). Например, если порт SSH равен 3479, вызовите crm_report с помощью:

    crm_report -X "-p 3479" [...]
    

    Для получения дополнительной информации см. Руководство по администрированию.

В следующем разделе описана настройка общего хранилища и перемещение файлов базы данных в это хранилище.

Настройка общего хранилища и перемещение файлов базы данных

Для предоставления общего хранилища можно использовать различные решения. В этом пошаговом руководстве демонстрируется настройка общего хранилища с NFS. Следуйте рекомендациям и используйте Kerberos для защиты NFS:

Если вы не будете следовать этим рекомендациям, любой пользователь, который может получить доступ к вашей сети и подделать IP-адрес SQL-сервера, может получить доступ к вашим файлам данных. Как всегда, выполните моделирование угроз в системе, прежде чем использовать его в рабочей среде.

Другой вариант хранения — использовать общую папку SMB:

Настройка сервера NFS

Сведения о настройке сервера NFS см. в документации по SUSE: настройка сервера NFS.

Настройка всех узлов кластера для подключения к общему хранилищу NFS

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

  1. На основном узле только сохраните файлы базы данных во временное место. Следующий скрипт создает временный каталог, копирует файлы базы данных в новый каталог и удаляет старые файлы базы данных. При запуске SQL Server от имени локального пользователя mssqlнеобходимо убедиться, что после передачи данных в подключенную общую папку локальный пользователь имеет доступ на чтение и запись в общую папку.

    su mssql
    mkdir /var/opt/mssql/tmp
    cp /var/opt/mssql/data/* /var/opt/mssql/tmp
    rm /var/opt/mssql/data/*
    exit
    

    Настройте клиент NFS на всех узлах кластера:

    Примечание.

    Рекомендации и лучшие практики SUSE по использованию высокодоступного хранилища NFS см. в "Высокодоступное хранилище NFS с DRBD и Pacemaker".

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

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

    Приведенные ниже команды запускают SQL Server, проверяют его состояние, а затем останавливают SQL Server.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    sudo systemctl stop mssql-server
    

На этом этапе оба экземпляра SQL Server настроены для запуска с файлами базы данных в общем хранилище. Следующим шагом является настройка SQL Server для Pacemaker.

Установка и настройка Pacemaker в каждом узле кластера

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

    sudo touch /var/opt/mssql/secrets/passwd
    sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd
    sudo echo '<password>' >> /var/opt/mssql/secrets/passwd
    sudo chown root:root /var/opt/mssql/secrets/passwd
    sudo chmod 600 /var/opt/mssql/secrets/passwd
    

    Внимание

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

  2. Все узлы кластера должны обращаться друг к другу через SSH. Средства, такие как hb_report или crm_report (для устранения неполадок) и Hawk's History Explorer требуют SSH-доступа между узлами без пароля. В противном случае они могут собирать данные только из текущего узла. Если вы используете нестандартный порт SSH, используйте -X опцию (см man страницу). Например, если порт SSH равен 3479, вызовите hb_report с помощью:

    crm_report -X "-p 3479" [...]
    

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

  3. Установите расширение высокого уровня доступности. Чтобы установить расширение, выполните действия, описанные в следующей статье SUSE:

    Краткое руководство по установке и настройке

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

    sudo zypper addrepo -fc https://packages.microsoft.com/config/sles/12/mssql-server-2017.repo
    sudo zypper --gpg-auto-import-keys refresh
    sudo zypper install mssql-server-ha
    
  5. Автоматически настройте первый узел. Следующим шагом является настройка запущенного кластера с одним узлом, настроив первый узел SLES1. Следуйте инструкциям из статьи SUSE, настроив первый узел.

    После завершения настройки проверьте состояние кластера с помощью команды crm status.

    crm status
    

    Показано, что настроен один узел, SLES1.

  6. Добавьте узлы в существующий кластер. Затем добавьте узел SLES2 в кластер. Следуйте инструкциям из статьи SUSE, добавив второй узел.

    После завершения настройки проверьте состояние кластера с помощью команды crm status. При успешном добавлении второго узла выходные данные выглядят примерно так:

    2 nodes configured
    1 resource configured
    Online: [ SLES1 SLES2 ]
    Full list of resources:
    admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
    

    Примечание.

    admin_addr — это ресурс виртуального IP-кластера, настроенный во время начальной настройки кластера с одним узлом.

  7. Процедуры удаления. Если необходимо удалить узел из кластера, используйте скрипт начальной загрузки ha-cluster-remove. Дополнительные сведения см. в разделе Обзор скриптов начальной загрузки.

Настройка ресурсов кластера для SQL Server

Ниже описаны действия по настройке ресурса кластера для SQL Server. Настройте следующие два параметра:

  • Имя ресурса SQL Server: имя кластеризованного ресурса SQL Server.
  • Значение времени ожидания: период времени, в течение которого кластер ожидает подключения ресурса. Для SQL Server это значение представляет время, которое, как вы ожидаете, потребуется SQL Server, чтобы вывести базу данных master в режим онлайн.

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

sudo crm configure
primitive <sqlServerResourceName> ocf:mssql:fci op start timeout=<timeout_in_seconds>
colocation <constraintName> inf: <virtualIPResourceName> <sqlServerResourceName>
show
commit
exit

Например, следующий сценарий создает кластеризованный ресурс SQL Server с именем mssqlha.

sudo crm configure
primitive mssqlha ocf:mssql:fci op start timeout=60s
colocation admin_addr_mssqlha inf: admin_addr mssqlha
show
commit
exit

После фиксации конфигурации SQL Server запускается на том же узле, что и виртуальный IP-ресурс.

Дополнительные сведения см. в разделе Настройка ресурсов кластера и управление ими (командная строка).

Убедитесь, что SQL Server запущен

Чтобы проверить, запущен ли SQL Server, выполните команду crm status.

crm status

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

2 nodes configured
2 resources configured

Online: [ SLES1 SLES2 ]

Full list of resources:

 admin_addr     (ocf::heartbeat:IPaddr2):       Started SLES1
 mssqlha        (ocf::mssql:fci):       Started SLES1

Управление кластерными ресурсами

Сведения об управлении ресурсами кластера см. в следующей статье SUSE: Управление ресурсами кластера

Ручное аварийное переключение

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

Используйте команду migrate для этой задачи. Например, чтобы перенести ресурс SQL на узел кластера с именем SLES2, выполните следующую команду:

crm resource
migrate mssqlha SLES2