Настройка экземпляра отказоустойчивого кластера — SQL Server на Linux (RHEL)
Область применения: SQL Server — Linux
Экземпляр отказоустойчивого кластера SQL Server с двумя узлами и общим диском обеспечивает избыточность на уровне сервера для поддержки высокой доступности. В этом руководстве приводятся инструкции по созданию экземпляра отказоустойчивого кластера SQL Server с двумя узлами в Linux. К конкретным шагам, которые вы завершите, относятся:
- Установка и настройка Linux
- Установка и настройка SQL Server
- Настройка файла hosts
- Настройка общего хранилища и перемещение файлов базы данных
- Установка и настройка Pacemaker в каждом узле кластера
- Настройка экземпляра отказоустойчивого кластера
В этой статье объясняется, как создать экземпляр отказоустойчивого кластера (FCI) SQL Server с двумя узлами и общим диском. Здесь содержатся инструкции и примеры сценариев для Red Hat Enterprise Linux (RHEL). Дистрибутивы Ubuntu аналогичны RHEL, поэтому примеры сценариев также будут работать в Ubuntu.
Общие сведения см. в разделе "Экземпляры отказоустойчивого кластера" — SQL Server на Linux.
Необходимые компоненты
Для выполнения следующего законченного сценария нужны два компьютера для развертывания двухузлового кластера и сервера для хранения. Ниже описаны действия по настройке этих серверов.
Установка и настройка Linux
Сначала необходимо настроить операционную систему в узлах кластера. На каждом узле в кластере настройте дистрибутив Linux. На обоих узлах следует использовать один и тот же дистрибутив и одну и ту же версию. Воспользуйтесь одним из указанных далее дистрибутивов:
- RHEL с допустимой подпиской для надстройки высокой доступности
Установка и настройка 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>'; ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>];
Внимание
Пароль должен соответствовать политике паролей по умолчанию SQL Server. По умолчанию пароль должен быть не короче восьми символов и содержать три вида символов из следующих: прописные буквы, строчные буквы, десятичные цифры, специальные символы. Пароли могут иметь длину до 128 символов. Рекомендуется использовать максимально длинные и сложные пароли.
Вы также можете задать разрешения на более детальном уровне. Для входа Pacemaker требуется
VIEW SERVER STATE
запрашивать состояние работоспособности с помощьюsp_server_diagnostics
, setupadmin и ALTER ANY LINKED SERVER, чтобы обновить имя экземпляра FCI с именем ресурса, выполнив и выполнивsp_dropserver
командуsp_addserver
.Остановите и отключите SQL Server в первичном узле.
Настройка файла hosts
На каждом узле кластера настройте файл hosts. Файл hosts должен содержать IP-адрес и имя каждого узла кластера.
Проверьте IP-адрес для каждого узла. Для отображения IP-адреса текущего узла выполните следующий сценарий.
sudo ip addr show
Задайте имя компьютера в каждом узле. Присвойте каждому узлу уникальное имя длиной не более 15 символов. Задайте имя компьютера, добавив его к
/etc/hosts
. Следующий сценарий позволяет изменить/etc/hosts
с помощьюvi
.sudo vi /etc/hosts
В следующем примере показан файл
/etc/hosts
с дополнениями для двух узловsqlfcivm1
иsqlfcivm2
.127.0.0.1 localhost localhost4 localhost4.localdomain4 ::1 localhost localhost6 localhost6.localdomain6 10.128.18.128 sqlfcivm1 10.128.16.77 sqlfcivm2
Настройка хранилища и перемещение файлов базы данных
Необходимо предоставить хранилище, доступное для обоих узлов. Можно использовать iSCSI, NFS или SMB. Настройте хранилище, представьте его узлам кластера, а затем переместите в него файлы базы данных. Действия, выполняемые для каждого типа хранилища, описаны в следующих статьях:
- Настройка экземпляра отказоустойчивого кластера (iSCSI) — SQL Server на Linux
- Настройка экземпляра отказоустойчивого кластера (NFS) — SQL Server на Linux
- Настройка экземпляра отказоустойчивого кластера хранилища SMB — SQL Server на Linux
Установка и настройка Pacemaker в каждом узле кластера
На обоих узлах кластера создайте файлы для хранения имени пользователя и пароля SQL Server для входа с помощью Pacemaker.
Следующая команда создает и заполняет такой файл:
sudo touch /var/opt/mssql/secrets/passwd sudo echo '<loginName>' >> /var/opt/mssql/secrets/passwd sudo echo '<loginPassword>' >> /var/opt/mssql/secrets/passwd sudo chown root:root /var/opt/mssql/secrets/passwd sudo chmod 600 /var/opt/mssql/secrets/passwd
В брандмауэрах на обоих узлах кластера откройте порты для Pacemaker. Чтобы открыть эти порты с помощью
firewalld
, выполните следующую команду:sudo firewall-cmd --permanent --add-service=high-availability sudo firewall-cmd --reload
Если вы используете другой брандмауэр, который не имеет встроенной конфигурации высокого уровня доступности, для связи с другими узлами в кластере необходимо открыть следующие порты:
- 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
Установите агент ресурсов отказоустойчивого кластера для SQL Server. Выполните следующие команды на обоих узлах.
sudo yum install mssql-server-ha
Настройка экземпляра отказоустойчивого кластера
Экземпляр FCI создается в группе ресурсов. Это немного проще, так как группа ресурсов устраняет необходимость ограничений. Тем не менее, добавьте ресурсы в группу ресурсов в том порядке, в котором они должны запускаться. Порядок запуска должен быть следующим:
- ресурс хранилища;
- сетевой ресурс;
- ресурс приложения.
В этом примере создается FCI в группе NewLinFCIGrp. Имя группы ресурсов должно быть уникальным для любого ресурса, созданного в Pacemaker.
Создайте дисковый ресурс. Вы не получите ответ обратно, если нет проблемы. Способ создания дискового ресурса зависит от типа хранилища. В следующем разделе показаны примеры для каждого типа хранилища (iSCSI, NFS и SMB). Используйте пример, который подходит для типа вашего кластерного хранилища.
sudo pcs resource create <iSCSIDiskResourceName> Filesystem device="/dev/<VolumeGroupName>/<LogicalVolumeName>" directory="<FolderToMountiSCSIDisk>" fstype="<FileSystemType>" --group RGName
<iSCSIDIskResourceName>
— имя ресурса, связанного с диском iSCSI.<VolumeGroupName>
— имя группы томов.<LogicalVolumeName>
— имя созданного логического тома.<FolderToMountiSCSIDIsk>
— папка для подключения диска (для системных баз данных и расположения по умолчанию)/var/opt/mssql/data
<FileSystemType>
будет EXT4 или XFS в зависимости от форматирования вещей и поддерживаемых дистрибутивом.
Создайте IP-адрес, который будет использоваться экземпляром FCI. Вы не получите ответ обратно, если нет проблемы.
sudo pcs resource create <IPResourceName> ocf:heartbeat:IPaddr2 ip=<IPAddress> nic=<NetworkCard> cidr_netmask=<NetMask> --group <RGName>
<IPResourceName>
— это имя ресурса, связанного с IP-адресом.<IPAddress>
— это IP-адрес экземпляра FCI.<NetworkCard>
— сетевая карта, связанная с подсетью (т. е. eth0)<NetMask>
— это netmask подсети (т. е. 24)<RGName>
— это имя группы ресурсов.
Создание ресурса экземпляра FCI Вы не получите ответ обратно, если нет проблемы.
sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
<FCIResourceName>
— это не только имя ресурса, но понятное имя, связанное с FCI. Это то, что пользователи и приложения используют для подключения.<RGName>
— это имя группы ресурсов.
Выполните команду
sudo pcs resource
. Экземпляр FCI должен быть в сети.Подключитесь к экземпляру FCI с помощью SSMS или sqlcmd, используя DNS-имя или имя ресурса экземпляра FCI.
Выполните инструкцию
SELECT @@SERVERNAME
. Она должна вернуть имя экземпляра FCI.Выполните инструкцию
SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS')
. Она должна вернуть имя узла, на котором запущен экземпляр FCI.Вручную переведите экземпляр FCI на другой узел. См. инструкции в статье Работа экземпляра отказоустойчивого кластера — SQL Server на Linux.
И, наконец, переведите экземпляр FCI обратно на исходный узел и удалите ограничение на совместное размещение.
Итоги
В этом руководстве вы выполнили следующие задачи.
- Установка и настройка Linux
- Установка и настройка SQL Server
- Настройка файла hosts
- Настройка общего хранилища и перемещение файлов базы данных
- Установка и настройка Pacemaker в каждом узле кластера
- Настройка экземпляра отказоустойчивого кластера