Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Применимо к: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 в каждом узле кластера
Установите и настройте SQL Server на обоих узлах. Подробные инструкции см. в руководстве по установке SQL Server на Linux.
В целях настройки назначьте один узел первичным, а другой — вторичным. Используйте приведенные ниже условия для работы с этим руководством.
Остановите и отключите 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.На основном узле создайте учетную запись 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 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Остановите и отключите SQL Server в первичном узле.
Следуйте указаниям в документации по 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, чтобы указать на расположение общего хранилища, сохраните файлы базы данных во временном расположении, чтобы скопировать их позже в общий ресурс.
На основном узле только сохраните файлы базы данных во временное место. Следующий скрипт создает временный каталог, копирует файлы базы данных в новый каталог и удаляет старые файлы базы данных. При запуске 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".
На каждом узле убедитесь, что 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 в каждом узле кластера
На обоих узлах кластера создайте файлы для хранения имени пользователя и пароля 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 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Все узлы кластера должны обращаться друг к другу через SSH. Средства, такие как
hb_reportилиcrm_report(для устранения неполадок) и Hawk's History Explorer требуют SSH-доступа между узлами без пароля. В противном случае они могут собирать данные только из текущего узла. Если вы используете нестандартный порт SSH, используйте-Xопцию (смmanстраницу). Например, если порт SSH равен 3479, вызовитеhb_reportс помощью:crm_report -X "-p 3479" [...]Дополнительные сведения см. в руководстве по системным требованиям и рекомендациям в документации SUSE.
Установите расширение высокого уровня доступности. Чтобы установить расширение, выполните действия, описанные в следующей статье SUSE:
Установите агент ресурсов 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Автоматически настройте первый узел. Следующим шагом является настройка запущенного кластера с одним узлом, настроив первый узел SLES1. Следуйте инструкциям из статьи SUSE, настроив первый узел.
После завершения настройки проверьте состояние кластера с помощью команды
crm status.crm statusПоказано, что настроен один узел, SLES1.
Добавьте узлы в существующий кластер. Затем добавьте узел 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-кластера, настроенный во время начальной настройки кластера с одним узлом.
Процедуры удаления. Если необходимо удалить узел из кластера, используйте скрипт начальной загрузки 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