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


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

Убедитесь, что ваши стандарты безопасности соблюдаются при доступе. При настройке папки убедитесь, что только серверы, участвующие в отказоустойчивом кластерном экземпляре (FCI), имеют доступ к папке 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)

Инструкции

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

  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, чтобы переключиться на пользователя root.

    • Подключите общую папку 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 10.201.202.63:/var/nfs/fci1 /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
      
    • Проверьте, было ли подключение выполнено успешно, с помощью команды mount без параметров.

      mount
      

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

      10.201.202.63:/var/nfs/fcil on /var/opt/mssql/data type nfs4 (rw,relatime,vers=4.2,rsize=524288,wsize=524288,namlen=255,hard, proto=tcp,port=0,timeo=14, retrans=2,sec=sys,clientaddr=10.201.202.128,local lock=none, addr=10.201.202.63)
      
    • Переключитесь на 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.

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

    • Остановите 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 10.201.202.63:/var/nfs/fci2 /var/opt/mssql/userdata -o nfsvers=4.2,timeo=14,intr
      
    • Проверьте, было ли подключение выполнено успешно, выполнив команду mount без параметров.

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

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

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

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

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