次の方法で共有


フェールオーバー クラスター インスタンスを構成する - NFS - SQL Server on Linux

適用対象:SQL Server - Linux

この記事では、Linux 上のフェールオーバー クラスター インスタンス (FCI) 用の NFS ストレージを構成する方法について説明します。

NFS (ネットワーク ファイル システム) は、Linux 環境ではディスクを共有するための一般的な方法ですが、Windows ではそうではありません。 iSCSI と同様に、NFS は、SQL Server のストレージ要件を満たす限り、サーバーまたはある種のアプライアンスやストレージ ユニットに構成できます。

NFS サーバーに関する重要な情報

NFS をホストするソース (Linux サーバーまたはその他のもの) は、バージョン4.2 以降を使用しているか、それに準拠している必要があります。 それより前のバージョンは、SQL Server on Linux では動作しません。

NFS サーバーで共有されるようにフォルダーを構成するときは、それらが次のガイドラインの一般的なオプションに従っていることを確認してください。

  • フォルダーを読み書きできるように rw
  • フォルダーへの書き込みが保証されるように sync
  • オプションとして no_root_squash を使用しないでください。セキュリティ上のリスクと見なされます。
  • フォルダーにフル権限 (777) が適用されていることを確認する

アクセスに対してセキュリティ標準が適用されていることを確認します。 フォルダーを構成するときは、FCI に参加しているサーバーだけが NFS フォルダーを参照するようにします。 次の例では、Linux ベースの NFS ソリューション上の変更された /etc/exports ファイルが示されており、そこではフォルダーは 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> は、使用する NFS サーバーの IP アドレスです。
  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」と入力して、ルート ユーザーに切り替えます。

    • SQL Server データ フォルダーに NFS 共有をマウントします。

      mount -t nfs4 <IPAddressOfNFSServer>:<FolderOnNFSServer> /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
      
      • <IPAddressOfNFSServer> は、使用する NFS サーバーの IP アドレスです
      • <FolderOnNFSServer> は、NFS 共有の名前です。 次の例の構文は、手順 2 の NFS の情報と一致します。
      mount -t nfs4 200.201.202.63:/var/nfs/fci1 /var/opt/mssql/data -o nfsvers=4.2,timeo=14,intr
      
    • スイッチなしでマウントを発行して、マウントが成功したことを確認します。

      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> は、使用する NFS サーバーの IP アドレスです
      • <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> は、使用する NFS サーバーの IP アドレスです
      • <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
      
    • スイッチなしでマウントを発行して、マウントが成功したことを確認します。

    • スーパーユーザーではなくなるよう、「Exit」と入力します。

    • テストするには、そのフォルダーにデータベースを作成します。 次の例では、sqlcmd を使用してデータベースを作成し、コンテキストをそれに切り替え、ファイルが OS レベルで存在することを確認した後、一時的な場所を削除します。 SSMS を使用できます。

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

    • 共有のマウントを解除します

      sudo umount <IPAddressOfNFSServer>:<FolderOnNFSServer> <FolderToMountIn>
      
      • <IPAddressOfNFSServer> は、使用する NFS サーバーの IP アドレスです
      • <FolderOnNFSServer> は、NFS 共有の名前です
      • <FolderMountedIn> は、前の手順で作成したフォルダーです。
  5. その他のノードでこれらの手順を繰り返します。