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
手順
FCI の構成に参加するいずれかのサーバーを選択します。 どれを選んでも問題ありません。
mssql
ユーザーに関する情報を取得します。sudo id mssql
uid
、gid
、およびグループに注意してください。sudo smbclient -L //NameOrIP/ShareName -U User
を実行します。<NameOrIP>
は、SMB 共有をホストしているサーバーの DNS 名または IP アドレスです。<ShareName>
は SMB 共有の名前です。
システム データベース、または既定のデータの場所に格納されているものについては、次の手順に従います。 それ以外の場合は手順 5 に進みます。
作業中のサーバーで 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> は、手順 d のフォルダーの名前です。
既存の SQL Server データ ディレクトリからファイルを削除します。
rm - f /var/opt/mssql/data/*
ファイルが削除されていることを確認します。
ls /var/opt/mssql/data
「exit」と入力して、ルート ユーザーに切り替えます。
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 です
スイッチなしでマウントを発行して、マウントが成功したことを確認します。
mount
mssql
ユーザーに切り替えます。su mssql
一時ディレクトリ
/var/opt/mssql/data
からファイルをコピーします。cp /var/opt/mssql/tmp/* /var/opt/mssql/data
ファイルがあることを確認します。
ls /var/opt/mssql/data
exit
を入力してmssql
にならないようにします。exit
を入力してroot
にならないようにします。SQL Server を起動します。 すべてが正しくコピーされ、セキュリティが正しく適用されている場合、SQL Server は起動済みと表示されます。
sudo systemctl start mssql-server sudo systemctl status mssql-server
さらにテストするには、データベースを作成して、アクセス許可が適切であることを確認します。 次の例では、Transact-SQL を使用します。SSMS を使用できます。
SQL Server を停止し、シャットダウンしたことを確認します。 他のディスクを追加またはテストする場合は、そのディスクが追加およびテストされるまで SQL Server をシャットダウンしないでください。
sudo systemctl stop mssql-server sudo systemctl status mssql-server
完了した場合にのみ、共有のマウントを解除します。 それ以外の場合は、ディスクの追加後またはテスト完了後にマウントを解除します。
sudo umount //<IPAddressorServerName>/<ShareName /<FolderMountedIn>
<IPAddressOrServerName>
は、SMB ホストの IP アドレスまたは名前です<ShareName>
は共有の名前です<FolderMountedIn>
は、SMB がマウントされているフォルダーの名前です
ユーザー データベースやバックアップなどのシステム データベース以外のものについては、次の手順に従います。 既定の場所のみを使用する場合は、手順 14 に進みます。
スーパーユーザーになるように切り替えます。
sudo -i
SQL Server によって使用されるフォルダーを作成します。
mkdir <FolderName>
<FolderName> はフォルダーの名前です。 正しい場所にない場合は、フォルダーの完全なパスを指定する必要があります。 次の例では、
/var/opt/mssql/userdata
という名前のフォルダーを作成します。mkdir /var/opt/mssql/userdata
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 です。
スイッチなしでマウントを発行して、マウントが成功したことを確認します。
スーパーユーザーではなくなるよう、「Exit」と入力します。
テストするには、そのフォルダーにデータベースを作成します。 次の例では、sqlcmd を使用してデータベースを作成し、コンテキストをそれに切り替え、ファイルが OS レベルで存在することを確認した後、一時的な場所を削除します。 SSMS を使用できます。
共有のマウントを解除します
sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>
<IPAddressOrServerName>
は、SMB ホストの IP アドレスまたは名前です<ShareName>
は共有の名前です<FolderMountedIn>
は、SMB がマウントされているフォルダーの名前です。
その他のノードでこれらの手順を繰り返します。
これで、FCI を構成する準備が整いました。