Настройка экземпляра отказоустойчивого кластера (iSCSI) — SQL Server на Linux

Область применения: SQL Server — Linux

В этой статье описывается, как настроить хранилище iSCSI для экземпляра отказоустойчивого кластера в Linux.

Настройка iSCSI

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

Важные сведения о цели iSCSI

Хотя в этом разделе не описано, как настроить целевой объект iSCSI, так как он зависит от типа используемого источника, убедитесь, что безопасность дисков, которые будут использоваться узлами кластера.

Цель никогда не следует настраивать на любом из узлов экземпляра отказоустойчивого кластера, если используется цель iSCSI на базе Linux. Для обеспечения производительности и доступности сети iSCSI должны быть отделены от сетей, используемых обычным сетевым трафиком как на исходном, так и на клиентских серверах. Сети, используемые для iSCSI, должны быть быстрыми. Помните, что сеть потребляет некоторую пропускную способность процессора, поэтому при использовании обычного сервера следует проводить соответствующее планирование.

Важнее всего убедиться в том, что созданным дискам назначены соответствующие разрешения, чтобы к ним могли обратиться только серверы, участвующие в экземпляре отказоустойчивого кластера. Пример показан здесь из целевого объекта Microsoft iSCSI, где linuxnodes1 создается имя, и в этом случае IP-адреса узлов назначаются таким образом, чтобы NewFCIDisk1.vhdx они отображались.

Снимок экрана: инициатор.

Instructions

В этом разделе описывается настройка инициатора iSCSI на серверах, которые служат узлами для FCI. Инструкции должны работать в Red Hat Enterprise Linux (RHEL) и Ubuntu.

Дополнительные сведения об инициаторе iSCSI для поддерживаемых дистрибутивов см. в следующих ссылках:

  1. Выберите один из серверов, которые будут включены в конфигурацию экземпляра отказоустойчивого кластера. Это не имеет значения, какой из них. iSCSI должен находиться в выделенной сети, поэтому настройте iSCSI для распознавания и использования этой сети. Запустите sudo iscsiadm -m iface -I <iSCSIIfaceName> -o new, где <iSCSIIfaceName> — это уникальное или понятное имя для сети. В следующем примере используется iSCSINIC.

    sudo iscsiadm -m iface -I iSCSINIC -o new
    

    Ниже приведены ожидаемые выходные данные.

    New interface iSCSINIC added
    
  2. Измените /var/lib/iscsi/ifaces/iSCSIIfaceName. Убедитесь, что в нем полностью заполнены следующие значения.

    • iface.net_ifacename — это имя сетевой карты, как показано в ОС.
    • iface.hwaddress — ЭТО MAC-адрес уникального имени, которое будет создано для следующего интерфейса.
    • iface.ipaddress
    • iface.subnet_Mask

    См. следующий пример.

    Снимок экрана файла с полностью заполненными значениями.

  3. Найдите цель iSCSI.

    sudo iscsiadm -m discovery -t sendtargets -I <iSCSINetName> -p <TargetIPAddress>:<TargetPort>
    

    <iSCSINetName> — это уникальное/понятное имя для сети, <TargetIPAddress> — это IP-адрес цели iSCSI, а <TargetPort> — порт цели iSCSI.

    Ниже приведены ожидаемые выходные данные.

    10.181.182.1:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    10.201.202.1:3260,1 iqn.1991-05.com.contoso:dc1-linuxnodes1-target
    [2002:b4b5:b601::b4b5:b601]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    [2002:8c9:ca01::c8c9:ca01]:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target
    
  4. Войдите в целевой объект.

    sudo iscsiadm -m node -I <iSCSIIfaceName> -p TargetIPAddress -l
    

    <iSCSIIfaceName> — это уникальное/понятное имя для сети, а <TargetIPAddress> — это IP-адрес цели iSCSI.

    Ниже приведены ожидаемые выходные данные.

    Logging in to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] (multiple)
    Login to [iface: iSCSINIC, target: ian.1991-05.com.contoso:dcl-linuxnodesl-tar get, portal: 10.181.182.1,3260] successful.
    
  5. Проверьте, есть ли подключение к целевому объекту iSCSI.

    sudo iscsiadm -m session
    

    Результат должен быть аналогичным приведенному ниже:

    tcp: [1] 10.105.16.7:3260,1 iqn.1991-05.com.contoso:dcl-linuxnodes1-target (non-flash)
    
  6. Проверьте подключенные диски iSCSI.

    sudo grep "Attached SCSI" /var/log/messages
    

    Снимок экрана команды grep и ответ, содержащий подключенные диски SCSI.

  7. Создайте физический том на диске iSCSI.

    sudo pvcreate /dev/<devicename>
    

    <devicename> — это имя устройства из предыдущего шага.

  8. Создайте группу томов на диске iSCSI. Диски, назначенные одной группе томов, отображаются в виде пула или коллекции.

    sudo vgcreate <VolumeGroupName> /dev/devicename
    

    <VolumeGroupName> — это имя группы томов, а <devicename> — это имя устройства из шага 6.

  9. Создайте и проверьте логический том для диска.

    sudo lvcreate -Lsize -n <LogicalVolumeName> <VolumeGroupName>
    

    <size> — это размер создаваемого тома, который можно указать с помощью G (gigabytes), T (terabytes) и т. д., <LogicalVolumeName> является именем логического тома и <VolumeGroupName> именем группы томов на предыдущем шаге.

    Ниже приведены ожидаемые выходные данные.

    Logical volume "FCIDataLV1" created.
    

    В следующем примере создается том размером 25 ГБ.

  10. Выполните sudo lvs, чтобы просмотреть созданный LVM.

  11. Отформатируйте логический том с использованием поддерживаемой файловой системы. Для EXT4 используйте следующий пример.

    sudo mkfs.ext4 /dev/<VolumeGroupName>/<LogicalVolumeName>
    

    <VolumeGroupName> — это имя группы томов из предыдущего шага. <LogicalVolumeName> — это имя логического тома из предыдущего шага.

  12. Для системных баз данных или других объектов, хранящихся в расположении данных по умолчанию, выполните указанные ниже действия. В противном случае перейдите к шагу 13.

    1. Убедитесь, что SQL Server остановлен на сервере, на который вы работаете.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    2. Перейдите в режим суперпользователя. При успешном выполнении вы не получаете никаких подтверждений.

      sudo -i
      
    3. Переключитесь на mssql пользователя. При успешном выполнении вы не получаете никаких подтверждений.

      su mssql
      
    4. Создайте временный каталог для хранения данных и файлов журналов SQL Server. При успешном выполнении вы не получаете никаких подтверждений.

      mkdir <TempDir>
      

      <TempDir> — это имя папки. В следующем примере создается папка с именем /var/opt/mssql/TempDir.

      mkdir /var/opt/mssql/TempDir
      
    5. Скопируйте данные и файлы журналов SQL Server во временный каталог. При успешном выполнении вы не получаете никаких подтверждений.

      cp /var/opt/mssql/data/* <TempDir>
      

      <TempDir> — это имя папки из предыдущего шага.

    6. Проверьте наличие файлов в папке.

      ls <TempDir>
      

      <TempDir> — имя папки из предыдущих шагов.

    7. Удалите файлы из существующего каталога данных SQL Server. При успешном выполнении вы не получаете никаких подтверждений.

      rm - f /var/opt/mssql/data/*
      
    8. Проверьте, были ли файлы удалены. На следующем рисунке показан пример всей последовательности из c до h.

      ls /var/opt/mssql/data
      

      Снимок экрана команды ls и ответа на нее.

    9. Введите, exit чтобы вернуться к root пользователю.

    10. Подключите логический том iSCSI в папке данных SQL Server. При успешном выполнении вы не получаете никаких подтверждений.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> /var/opt/mssql/data
      

      <VolumeGroupName> — это имя группы томов, а <LogicalVolumeName> — это имя созданного логического тома. Приведенный ниже пример синтаксиса соответствует группе томов и логическому тому из предыдущей команды.

      mount /dev/FCIDataVG1/FCIDataLV1 /var/opt/mssql/data
      
    11. Измените владельца подключения mssqlна . При успешном выполнении вы не получаете никаких подтверждений.

      chown mssql /var/opt/mssql/data
      
    12. Измените владение группой подключения mssqlна . При успешном выполнении вы не получаете никаких подтверждений.

      chgrp mssql /var/opt/mssql/data
      
    13. Переключитесь на mssql пользователя. При успешном выполнении вы не получаете никаких подтверждений.

      su mssql
      
    14. Скопируйте файлы из временного каталога /var/opt/mssql/data. При успешном выполнении вы не получаете никаких подтверждений.

      cp /var/opt/mssql/TempDir/* /var/opt/mssql/data
      
    15. Проверьте наличие файлов.

      ls /var/opt/mssql/data
      
    16. Ввод exit не должен быть mssql.

    17. Ввод exit не должен быть root.

    18. Запустите SQL Server. Если все данные были скопированы и параметры безопасности применены правильно, сервер SQL Server должен отобразиться как запущенный.

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    19. Остановите SQL Server и убедитесь, что она завершит работу.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
  13. Для объектов, отличных от системных баз данных, например пользовательских баз данных или резервных копий, выполните указанные ниже действия. Если используется только расположение по умолчанию, перейдите к шагу 14.

    1. Перейдите в режим суперпользователя. При успешном выполнении вы не получаете никаких подтверждений.

      sudo -i
      
    2. Создайте папку для использования SQL Server.

      mkdir <FolderName>
      

      <FolderName> — это имя папки. Если папка находится в другом месте, необходимо указать полный путь к ней. В приведенном ниже примере создается папка /var/opt/mssql/userdata.

      mkdir /var/opt/mssql/userdata
      
    3. Подключите логический том iSCSI в папке, созданной в предыдущем шаге. При успешном выполнении вы не получаете никаких подтверждений.

      mount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> — это имя группы томов, <LogicalVolumeName> — это имя созданного логического тома, а <FolderName> — имя папки. Ниже показан пример синтаксиса.

      mount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
    4. Измените владение папкой, созданной mssqlна . При успешном выполнении вы не получаете никаких подтверждений.

      chown mssql <FolderName>
      

      <FolderName> — это имя созданной папки. Пример см. здесь.

      chown mssql /var/opt/mssql/userdata
      
    5. Измените группу созданной mssqlпапки на . При успешном выполнении вы не получаете никаких подтверждений.

      chown mssql <FolderName>
      

      <FolderName> — это имя созданной папки. Пример см. здесь.

      chown mssql /var/opt/mssql/userdata
      
    6. Введите exit, чтобы выйти из режима суперпользователя.

    7. Создайте в этой папке базу данных для тестирования. Следующий скрипт создает базу данных, переключает контекст на нее, проверяет наличие файлов на уровне ОС, а затем удаляет временное расположение. Для выполнения этого скрипта можно использовать SSMS или sqlcmd .

      DROP DATABASE TestDB;
      GO
      
      CREATE DATABASE TestDB
          ON (NAME = TestDB_Data, FILENAME = '/var/opt/mssql/userdata/TestDB_Data.mdf')
          LOG ON (NAME = TestDB_Log, FILENAME = '/var/opt/mssql/userdata/TestDB_Log.ldf');
      GO
      
      USE TestDB;
      GO
      

      Выполните следующую команду в оболочке, чтобы просмотреть новые файлы базы данных.

      sudo ls /var/opt/mssal/userdata
      

      Ниже приведены ожидаемые выходные данные.

      lost+found TestDB_Data.mdf
      TestDB_Log.ldf
      

      Удалите базу данных для очистки.

      DROP DATABASE TestDB;
      GO
      
      sudo ls /var/opt/mssal/userdata
      

      Ниже приведены ожидаемые выходные данные.

      lost+found
      
    8. Отключение общей папки

      sudo umount /dev/<VolumeGroupName>/<LogicalVolumeName> <FolderName>
      

      <VolumeGroupName> — это имя группы томов, <LogicalVolumeName> — это имя созданного логического тома, а <FolderName> — имя папки. Ниже показан пример синтаксиса.

      sudo umount /dev/FCIDataVG2/FCIDataLV2 /var/opt/mssql/userdata
      
  14. Настройте сервер таким образом, чтобы группу томов мог активировать только Pacemaker.

    sudo lvmconf --enable-halvm --services -startstopservices
    
  15. Создайте список групп томов на сервере. Все, что указано, не является диском iSCSI, используется системой, например для диска ОС.

    sudo vgs
    
  16. Измените раздел конфигурации активации файла /etc/lvm/lvm.conf. Настройте следующую строку.

    volume_list = [ <ListOfVGsNotUsedByPacemaker> ]
    

    <ListOfVGsNotUsedByPacemaker> — это список групп томов из выходных данных шага 20, которые не используются FCI. Заключите каждый из них в кавычки и разделите запятыми. Пример см. здесь.

    Снимок экрана, показывающий пример значения volume_list.

  17. При запуске Linux он подключает файловую систему. Чтобы убедиться, что только Pacemaker может подключить диск iSCSI, перестройте корневой образ файловой системы.

    Выполните следующую команду, которая может занять несколько минут. При успешном выполнении вы не получите сообщения.

    sudo dracut -H -f /boot/initramfs-$(uname -r).img $(uname -r)
    
  18. Перезапустите сервер.

  19. На другом сервере, который будет участвовать в экземпляре отказоустойчивого кластера, выполните шаги 1–6. Это представляет целевой объект iSCSI для SQL Server.

  20. Создайте список групп томов на сервере. В нем должна отображаться созданная ранее группа томов.

    sudo vgs
    
  21. Запустите SQL Server и убедитесь, что он может быть запущен на этом сервере.

    sudo systemctl start mssql-server
    sudo systemctl status mssql-server
    
  22. Остановите SQL Server и убедитесь, что она завершит работу.

    sudo systemctl stop mssql-server
    sudo systemctl status mssql-server
    
  23. Повторите шаги 1–6 на всех других серверах, которые будут участвовать в экземпляре отказоустойчивого кластера.

Теперь вы готовы настроить FCI.