Настройка экземпляра отказоустойчивого кластера — 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
Если вы используете другой брандмауэр, который не поддерживает встроенную высокую доступность, для того чтобы 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
Установите агент ресурсов FCI для 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-адрес, который будет использоваться ФСИ. Вы не получите ответ обратно, если нет проблемы.
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>
— это маска подсети, а именно 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 в каждом узле кластера
- Настройка экземпляра отказоустойчивого кластера