Настройка кластера общих дисков SLES для SQL Server
Область применения: SQL Server — Linux
Это краткое описание содержит инструкции по созданию кластера общих дисков с двумя узлами для SQL Server на основе SUSE Linux Enterprise Server (SLES). Кластерный уровень основан на SUSE High Availability Extension (HAE), который построен на Pacemaker.
Дополнительные сведения о конфигурации кластера, параметрах агента ресурсов, управлении, лучших практиках и рекомендациях см. в разделе SUSE Linux Enterprise High Availability Extension 12 с пакетом обновления 5 (SP5).
Предварительные условия
Для завершения следующего комплексного сценария необходимо три компьютера: два для развертывания кластера из двух узлов и еще один сервер для настройки общего ресурса NFS. Ниже описаны действия по настройке этих серверов.
Установка и настройка операционной системы в каждом узле кластера
Сначала необходимо настроить операционную систему в узлах кластера. Для этого пошагового руководства используйте SLES с действующей подпиской для надстройки HA.
Установка и настройка SQL Server в каждом узле кластера
Установите и настройте SQL Server в обоих узлах. Подробные инструкции см. в руководстве по установке SQL Server на Linux.
В целях настройки назначьте один узел первичным, а другой — вторичным. Используйте приведенные ниже условия для работы с этим руководством.
Остановите и отключите SQL Server во вторичном узле. В следующем примере показаны остановка и отключение SQL Server:
sudo systemctl stop mssql-server sudo systemctl disable mssql-server
Примечание.
Во время установки главный ключ сервера для экземпляра SQL Server создается и помещается в папку
/var/opt/mssql/secrets/machine-key
. На Linux SQL Server всегда выполняется как локальная учетная запись с именем mssql. Поскольку это локальная учетная запись, ее идентичность не передается между узлами. Поэтому необходимо скопировать ключ шифрования из первичного узла в каждый вторичный узел, чтобы каждая локальная учетная запись mssql могла получить к нему доступ для расшифровки главного ключа сервера.На основном узле создайте учетную запись 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 между узлами. В противном случае они могут только собирать данные из текущего узла. Если вы используете нестандартный порт 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, требуется безпарольный доступ по 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 это время ожидания перевода базы данных
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 GUI, либо командную строку.
Используйте команду migrate для этой задачи. Например, чтобы перенести ресурс SQL на узел кластера с именем SLES2, выполните:
crm resource
migrate mssqlha SLES2