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

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

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

В мире, отличном от Windows, SMB также называется общей файловой системой Интернета (CIFS) и реализуется через Samba. В мире Windows доступ к общей папке SMB выполняется следующим образом: \\SERVERNAME\SHARENAME При установке SQL Server в Linux общий ресурс SMB должен быть подключен в качестве папки.

Важные сведения об источнике и сервере

Ниже приведены некоторые советы и замечания по успешному использованию SMB.

  • Общая папка SMB может находиться в Windows, Linux или даже на устройстве до тех пор, пока она использует SMB 3.0 или более поздних версий. См. дополнительные сведения о Samba и SMB 3.0 в описании SMB 3.0, чтобы узнать, соответствует ли ваша реализация Samba требованиям SMB 3.0.
  • Общий ресурс SMB должен быть высокодоступным.
  • Для общего ресурса SMB должна быть обеспечена надлежащая безопасность. Ниже приведен пример, из /etc/samba/smb.confкоторого SQLData используется имя общей папки.
[SQLData]
path=/var/smb/SQLData
read only = no
browseable = yes
guest ok = no
writeable = yes
valid users = SQLSambaUser

Instructions

  1. Выберите один из серверов, которые будут включены в конфигурацию экземпляра отказоустойчивого кластера. Это не имеет значения, какой из них.

  2. Получение сведений mssql о пользователе.

     sudo id mssql
    

    Обратите внимание на uid, gidа также группы.

  3. Выполните процедуру sudo smbclient -L //NameOrIP/ShareName -U User.

    • <NameOrIP> — это DNS-имя или IP-адрес сервера, на котором размещается общая папка SMB.
    • <ShareName> — это имя общей папки SMB.
  4. Для системных баз данных или всех, хранящихся в расположении данных по умолчанию, выполните следующие действия. В противном случае перейдите к шагу 5.

    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/tmp.
      mkdir /var/opt/mssql/tmp
      
    5. Скопируйте данные и файлы журналов SQL Server во временный каталог.

      cp /var/opt/mssql/data/* <TempDir>
      
      • <TempDir> — это имя папки из предыдущего шага.
    6. Проверьте наличие файлов в папке.

      ls <TempDir>
      

      <TempDir> — это имя папки из шага d.

    7. Удалите файлы из существующего каталога данных SQL Server.

      rm - f /var/opt/mssql/data/*
      
    8. Проверьте, были ли файлы удалены.

      ls /var/opt/mssql/data
      
    9. Введите exit, чтобы переключиться на привилегированного пользователя.

    10. Подключите общий ресурс SMB в папке данных SQL Server. В этом примере показан синтаксис для подключения к общему ресурсу SMB 3.0 на базе Windows Server.

      Mount -t cifs //<ServerName>/<ShareName> /var/opt/mssql/data -o vers=3.0,username=<UserName>,password=<Password>,domain=<domain>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> — это имя сервера с общей папкой SMB.
      • <ShareName> — это имя общей папки.
      • <UserName> — это имя пользователя для доступа к общей папке.
      • <Password> — это пароль пользователя.
      • <domain> — это имя Active Directory.
      • <mssqlUID> — это идентификатор пользовательского mssql интерфейса пользователя
      • <mssqlGID> — это GID mssql пользователя
    11. Проверьте, было ли подключение выполнено успешно, с помощью команды mount без параметров.

      mount
      
    12. Переключитесь на mssql пользователя.

      su mssql
      
    13. Скопируйте файлы из временного каталога /var/opt/mssql/data.

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

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

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

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

      sudo systemctl start mssql-server
      sudo systemctl status mssql-server
      
    18. Для дальнейшего тестирования создайте базу данных, чтобы обеспечить правильность разрешений. В следующем примере используется Transact-SQL, но вы можете использовать SSMS.

      Снимок экрана: создание тестовой базы данных.

    19. Остановите SQL Server и проверьте его завершение. Если вы собираетесь добавлять или тестировать другие диски, не завершая работу SQL Server, пока эти диски не будут добавлены и протестированы.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    20. Отключите общую папку, только если выполнены все задачи. В противном случае отключите общую папку после завершения тестирования или добавления дополнительных дисков.

      sudo umount //<IPAddressorServerName>/<ShareName /<FolderMountedIn>
      
      • <IPAddressOrServerName> — это IP-адрес или имя узла SMB.
      • <ShareName> — это имя общей папки.
      • <FolderMountedIn> — это имя папки, где подключен SMB.
  5. Для объектов, отличных от системных баз данных, например пользовательских баз данных или резервных копий, выполните указанные ниже действия. Если используется только расположение по умолчанию, перейдите к шагу 14.

    1. Перейдите в режим суперпользователя.

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

      mkdir <FolderName>
      

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

      mkdir /var/opt/mssql/userdata
      
    3. Подключите общий ресурс SMB в папке данных SQL Server. В этом примере показан синтаксис для подключения к общему ресурсу SMB 3.0 на базе Samba.

      Mount -t cifs //<ServerName>/<ShareName> <FolderName> -o vers=3.0,username=<UserName>,password=<Password>,uid=<mssqlUID>,gid=<mssqlGID>,file_mode=0777,dir_mode=0777
      
      • <ServerName> — это имя сервера с общей папкой SMB.
      • <ShareName> — это имя общей папки.
      • <FolderName> — это имя папки, созданной на предыдущем шаге.
      • <UserName> — это имя пользователя для доступа к общей папке.
      • <Password> — это пароль пользователя.
      • <mssqlUID> — это идентификатор пользовательского mssql интерфейса пользователя
      • <mssqlGID> — это GID mssql пользователя.
    4. Проверьте, было ли подключение выполнено успешно, с помощью команды mount без параметров.

    5. Введите exit, чтобы выйти из режима суперпользователя.

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

    7. Отключение общей папки

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName> — это IP-адрес или имя узла SMB.
      • <ShareName> — это имя общей папки.
      • <FolderMountedIn> — это имя папки, где подключен SMB.
  6. Повторите эти действия на других узлах.

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