Поделиться через


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

  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
    

    Подключитесь к базе данных 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.

  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
    

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

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

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