Настройка экземпляра отказоустойчивого кластера — 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.

Концептуальные сведения см. в статье Экземпляр отказоустойчивого кластера (FCI) SQL Server в Linux.

Необходимые компоненты

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

Установка и настройка Linux

Сначала необходимо настроить операционную систему в узлах кластера. На каждом узле в кластере настройте дистрибутив Linux. На обоих узлах следует использовать один и тот же дистрибутив и одну и ту же версию. Воспользуйтесь одним из указанных далее дистрибутивов:

  • RHEL с допустимой подпиской для надстройки высокой доступности

Установка и настройка 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 и помещается в папку var/opt/mssql/secrets/machine-key. В Linux SQL Server всегда выполняется как локальная учетная запись mssql. Так как это локальная учетная запись, ее удостоверение не является общим во всех узлах. Поэтому необходимо скопировать ключ шифрования с первичного узла на каждый дополнительный узел, чтобы каждая локальная mssql учетная запись может получить доступ к ней для расшифровки главного ключа сервера.

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

    sudo systemctl start mssql-server
    

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

    USE [master]
    GO
    CREATE LOGIN [<loginName>] with PASSWORD = N'<loginPassword>'
    ALTER SERVER ROLE [sysadmin] ADD MEMBER [<loginName>]
    

    Вы также можете задать разрешения на более детальном уровне. Для входа Pacemaker требуется VIEW SERVER STATE запрашивать состояние работоспособности с помощью sp_server_diagnostics, setupadmin и ALTER ANY LINKED SERVER, чтобы обновить имя экземпляра FCI с именем ресурса, выполнив и выполнив sp_dropserver команду sp_addserver.

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

Настройка файла hosts

На каждом узле кластера настройте файл hosts. Файл hosts должен содержать IP-адрес и имя каждого узла кластера.

  1. Проверьте IP-адрес для каждого узла. Для отображения IP-адреса текущего узла выполните следующий сценарий.

    sudo ip addr show
    
  2. Задайте имя компьютера в каждом узле. Присвойте каждому узлу уникальное имя длиной не более 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. Настройте хранилище, представьте его узлам кластера, а затем переместите в него файлы базы данных. Действия, выполняемые для каждого типа хранилища, описаны в следующих статьях:

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

  1. На обоих узлах кластера создайте файлы для хранения имени пользователя и пароля 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
    
  2. В брандмауэрах на обоих узлах кластера откройте порты для Pacemaker. Чтобы открыть эти порты с помощью firewalld, выполните следующую команду:

    sudo firewall-cmd --permanent --add-service=high-availability
    sudo firewall-cmd --reload
    

    Если вы используете другой брандмауэр, который не имеет встроенной конфигурации высокого уровня доступности, для связи с другими узлами в кластере необходимо открыть следующие порты:

    • TCP: порты 2224, 3121, 21064
    • UDP: порт 5405
  3. Установите пакеты Pacemaker на каждом узле.

    sudo yum install pacemaker pcs fence-agents-all resource-agents
    
  4. Задайте пароль для пользователя по умолчанию, который создается при установке пакетов Pacemaker и Corosync. Используйте одинаковый пароль на обоих узлах.

    sudo passwd hacluster
    
  5. Включите и запустите службу pcsd и Pacemaker. Это позволит узлам повторно подключаться к кластеру после перезагрузки. Выполните следующую команду на обоих узлах:

    sudo systemctl enable pcsd
    sudo systemctl start pcsd
    sudo systemctl enable pacemaker
    
  6. Установите агент ресурсов отказоустойчивого кластера для SQL Server. Выполните следующие команды на обоих узлах.

    sudo yum install mssql-server-ha
    

Настройка экземпляра отказоустойчивого кластера

Экземпляр FCI создается в группе ресурсов. Это немного проще, так как группа ресурсов устраняет необходимость ограничений. Тем не менее, добавьте ресурсы в группу ресурсов в том порядке, в котором они должны запускаться. Порядок запуска должен быть следующим:

  1. ресурс хранилища;
  2. сетевой ресурс;
  3. ресурс приложения.

В этом примере создается FCI в группе NewLinFCIGrp. Имя группы ресурсов должно быть уникальным для любого ресурса, созданного в Pacemaker.

  1. Создайте дисковый ресурс. Вы не получите ответ обратно, если нет проблемы. Способ создания дискового ресурса зависит от типа хранилища. В следующем разделе показаны примеры для каждого типа хранилища (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 в зависимости от форматирования вещей и поддерживаемых дистрибутивом.

  1. Создайте 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> — это имя группы ресурсов.
  2. Создание ресурса экземпляра FCI Вы не получите ответ обратно, если нет проблемы.

    sudo pcs resource create FCIResourceName ocf:mssql:fci op defaults timeout=60s --group RGName
    
    • <FCIResourceName> — это не только имя ресурса, но понятное имя, связанное с FCI. Это то, что пользователи и приложения используют для подключения.
    • <RGName> — это имя группы ресурсов.
  3. Выполните команду sudo pcs resource. Экземпляр FCI должен быть в сети.

  4. Подключитесь к экземпляру FCI с помощью SSMS или sqlcmd, используя DNS-имя или имя ресурса экземпляра FCI.

  5. Выполните инструкцию SELECT @@SERVERNAME. Она должна вернуть имя экземпляра FCI.

  6. Выполните инструкцию SELECT SERVERPROPERTY('ComputerNamePhysicalNetBIOS'). Она должна вернуть имя узла, на котором запущен экземпляр FCI.

  7. Вручную переведите экземпляр FCI на другой узел. См. инструкции в статье Работа экземпляра отказоустойчивого кластера — SQL Server на Linux.

  8. И, наконец, переведите экземпляр FCI обратно на исходный узел и удалите ограничение на совместное размещение.

Итоги

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

  • Установка и настройка Linux
  • Установка и настройка SQL Server
  • Настройка файла hosts
  • Настройка общего хранилища и перемещение файлов базы данных
  • Установка и настройка Pacemaker в каждом узле кластера
  • Настройка экземпляра отказоустойчивого кластера