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

Применимо к:SQL Server — Linux

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

NFS (Network File System, сетевая файловая система) — это распространенный способ предоставления общего доступа к дискам в Linux, но не в Windows. Так же как и iSCSI, NFS можно настроить на сервере, устройстве или в единице хранения, если они отвечают требованиям к хранилищу для SQL Server.

Важные сведения о сервере NFS

Источник размещения NFS (сервер Linux или другое устройство) должен использовать версию 4.2 или более позднюю либо быть совместимым с ней. Более ранние версии не работают с SQL Server на Linux.

При настройке общего доступа к папкам на сервере NFS необходимо использовать следующие рекомендованные параметры:

  • rw для обеспечения возможности считывания из папки и записи в нее;
  • sync для обеспечения гарантированной записи в папку;
  • Не используйте no_root_squash его в качестве параметра; это считается угрозой безопасности.
  • Убедитесь, что папка имеет полные права (777) применены

Примените стандарты безопасного доступа. При настройке папки NFS доступ к ней должны иметь только серверы, относящиеся к экземпляру отказоустойчивого кластера. В следующем примере показано измененное /etc/exports решение NFS под управлением Linux, в котором папка ограничена FCIN1 и FCIN2.

# /etc/exports: the access control list for filesystems which may be exported
#               to NFS clients. See export(5).
#
/var/nfs/fci1   FCIN1(rw,sync) FCIN2(rw,sync)

Instructions

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

  2. Проверьте, доступны ли серверу подключенные ресурсы на сервере NFS.

    sudo showmount -e <IPAddressOfNFSServer>
    
    • <IPAddressOfNFSServer> — это IP-адрес сервера NFS, который вы собираетесь использовать.
  3. Для системных баз данных или других объектов, хранящихся в расположении данных по умолчанию, выполните указанные ниже действия. В противном случае перейдите к шагу 4.

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

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    • Перейдите в режим суперпользователя.

      sudo -i
      
    • Переключитесь на mssql пользователя.

      su mssql
      
    • Создайте временный каталог для хранения данных и файлов журналов SQL Server.

      mkdir <TempDir>
      
      • <TempDir> — это имя папки. В следующем примере создается папка с именем /var/opt/mssql/tmp.
      mkdir /var/opt/mssql/tmp
      
    • Скопируйте данные и файлы журналов SQL Server во временный каталог.

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

      ls TempDir
      
      • <TempDir> — это имя папки из предыдущего шага.
    • Удалите файлы из существующего каталога данных SQL Server.

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

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

    • Подключите общую папку NFS в папке данных SQL Server.

      mount -t nfs4 <IPAddressOfNFSServer>:<FolderOnNFSServer> /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
      
      • <IPAddressOfNFSServer> — ЭТО IP-адрес сервера NFS, который вы собираетесь использовать.
      • <FolderOnNFSServer> — это имя общей папки NFS. Приведенный ниже пример синтаксиса соответствует сведениям об NFS из шага 2.
      mount -t nfs4 200.201.202.63:/var/nfs/fci1 /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
      
    • Проверьте, было ли подключение выполнено успешно, с помощью команды mount без параметров.

      mount
      

      Screenshot of the mount command and the response to the command showing no switches.

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

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

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

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

    • Введите exit, чтобы выйти из учетной записи привилегированного пользователя.

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

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

      Screenshot showing how to create the test database.

    • Остановите SQL Server и проверьте его завершение.

      sudo systemctl stop mssql-server
      sudo systemctl status mssql-server
      
    • Если вы не создаете другие подключения NFS, отключите общую папку. Если вы находитесь, не отключайтесь.

      sudo umount <IPAddressOfNFSServer>:<FolderOnNFSServer> <FolderToMountIn>
      
      • <IPAddressOfNFSServer> — ЭТО IP-адрес сервера NFS, который вы собираетесь использовать.
      • <FolderOnNFSServer> — это имя общей папки NFS.
      • <FolderMountedIn> — это папка, созданная в предыдущем шаге.
  4. Для объектов, отличных от системных баз данных, например пользовательских баз данных или резервных копий, выполните указанные ниже действия. Если используется только расположение по умолчанию, перейдите к шагу 5.

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

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

      mkdir <FolderName>
      
      • <FolderName> — это имя папки. Если папка находится в другом месте, необходимо указать полный путь к ней.

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

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

      mount -t nfs4 <IPAddressOfNFSServer>:<FolderOnNFSServer> <FolderToMountIn> -o nfsvers=4.2,timeo=14,intr
      
      • <IPAddressOfNFSServer> — ЭТО IP-адрес сервера NFS, который вы собираетесь использовать.
      • <FolderOnNFSServer> — это имя общей папки NFS.
      • <FolderToMountIn> — это папка, созданная в предыдущем шаге.

      В следующем примере подключается общая папка NFS.

      mount -t nfs4 200.201.202.63:/var/nfs/fci2 /var/opt/mssql/userdata -o nfsvers=4.2,timeo=14,intr
      
    • Проверьте, было ли подключение выполнено успешно, с помощью команды mount без параметров.

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

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

      Screenshot of the sqlcmd command and the response to the command.

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

      sudo umount <IPAddressOfNFSServer>:<FolderOnNFSServer> <FolderToMountIn>
      
      • <IPAddressOfNFSServer> — ЭТО IP-адрес сервера NFS, который вы собираетесь использовать.
      • <FolderOnNFSServer> — это имя общей папки NFS.
      • <FolderMountedIn> — это папка, созданная в предыдущем шаге.
  5. Повторите эти действия на других узлах.