次の方法で共有


SMB ストレージ フェールオーバー クラスター インスタンスの構成 - SQL Server on Linux

適用対象: SQL Server - Linux

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

Windows 以外の環境では、SMB は Common Internet File System (CIFS) 共有とも呼ばれ、Samba を介して実装されます。 Windows の環境では、SMB 共有へのアクセスは、\\SERVERNAME\SHARENAME のように行われます。 Linux ベースの SQL Server インストールの場合、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

手順

  1. FCI の構成に参加するいずれかのサーバーを選択します。 どれを選んでも問題ありません。

  2. mssql ユーザーに関する情報を取得します。

     sudo id mssql
    

    uidgid、およびグループに注意してください。

  3. sudo smbclient -L //NameOrIP/ShareName -U User を実行します。

    • <NameOrIP> は、SMB 共有をホストしているサーバーの DNS 名または IP アドレスです。
    • <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. SQL Server データフォルダーに SMB 共有をマウントします。 この例は、Windows Server ベースの SMB 3.0 共有に接続するための構文を示しています。

      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 ユーザーの UID です
      • <mssqlGID>mssql ユーザーの GID です
    11. スイッチなしでマウントを発行して、マウントが成功したことを確認します。

      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> は、SMB ホストの IP アドレスまたは名前です
      • <ShareName> は共有の名前です
      • <FolderMountedIn> は、SMB がマウントされているフォルダーの名前です
  5. ユーザー データベースやバックアップなどのシステム データベース以外のものについては、次の手順に従います。 既定の場所のみを使用する場合は、手順 14 に進みます。

    1. スーパーユーザーになるように切り替えます。

      sudo -i
      
    2. SQL Server によって使用されるフォルダーを作成します。

      mkdir <FolderName>
      

      <FolderName> はフォルダーの名前です。 正しい場所にない場合は、フォルダーの完全なパスを指定する必要があります。 次の例では、/var/opt/mssql/userdata という名前のフォルダーを作成します。

      mkdir /var/opt/mssql/userdata
      
    3. SQL Server データフォルダーに SMB 共有をマウントします。 次の例は、Samba ベースの SMB 3.0 共有に接続するための構文を示しています。

      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 ユーザーの UID です
      • <mssqlGID>mssql ユーザーの GID です。
    4. スイッチなしでマウントを発行して、マウントが成功したことを確認します。

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

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

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

      sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
      
      • <IPAddressOrServerName> は、SMB ホストの IP アドレスまたは名前です
      • <ShareName> は共有の名前です
      • <FolderMountedIn> は、SMB がマウントされているフォルダーの名前です。
  6. その他のノードでこれらの手順を繰り返します。

これで、FCI を構成する準備が整いました。