Linux上でSQL Server on Linux用のSMBストレージフェイルオーバークラスタインスタンスを設定

適用対象:Linux 上の SQL Server

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

Windows以外では、SMBは共通インターネットファイルシステム(CIFS)共有とも呼ばれ、Sambaが実装しています。 Windowsでは、SMB共有のフォーマット\\SERVERNAME\SHARENAMEにアクセスできます。 LinuxベースのSQL Serverインストールでは、SMB共有をフォルダとしてマウントする必要があります。

ソースとサーバーに関する重要な情報

SMBを効果的に活用するために、以下のヒントに従ってください:

  • SMB共有は、SMB 3.0以降を使用している限り、Windows、Linux、またはアプライアンス上で存在可能です。 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を入力してrootユーザーに戻します。

    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 を動かしてマウントを確認してください。

      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を使用しています。SQL Server Management Studio(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. スイッチなしで mount を動かしてマウントを確認してください。

    5. exit入力するとスーパーユーザーを離れます。

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

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

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

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