適用対象: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
手順
FCI構成に参加するサーバーのいずれかを選択します。 どれを選んでも問題ありません。
mssqlユーザーに関する情報を取得します。sudo id mssqluid、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 -imssqlユーザーに切り替えます。su mssqlSQL 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/dataexitを入力してrootユーザーに戻します。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を動かしてマウントを確認してください。mountmssqlユーザーに切り替えます。su mssql一時ディレクトリ
/var/opt/mssql/dataからファイルをコピーします。cp /var/opt/mssql/tmp/* /var/opt/mssql/dataファイルがあることを確認します。
ls /var/opt/mssql/dataexit入力してmssqlユーザーを残します。exit入力してrootユーザーを残します。SQL Server を起動します。 すべてをコピーし、セキュリティを正しく適用していれば、SQL Serverは起動します。
sudo systemctl start mssql-server sudo systemctl status mssql-serverさらにテストするには、データベースを作成して、アクセス許可が適切であることを確認します。 以下の例はTransact-SQLを使用しています。SQL Server Management Studio(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 -iSQL Serverが使うためのフォルダを作成します。
mkdir <FolderName><FolderName> はフォルダーの名前です。 フォルダの全パスが正しい場所でなければ指定してください。 次の例では、
/var/opt/mssql/userdataという名前のフォルダーを作成します。mkdir /var/opt/mssql/userdataSQL 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 です。
-
スイッチなしで
mountを動かしてマウントを確認してください。exit入力するとスーパーユーザーを離れます。テストするには、そのフォルダーにデータベースを作成します。 以下の例では、
sqlcmdを使ってデータベースを作成し、コンテキストを切り替え、OSレベルでファイルの存在を確認し、その後一時的な場所を削除します。 SSMS を使用できます。共有のマウントを解除します。
sudo umount //<IPAddressorServerName>/<ShareName> /<FolderMountedIn>-
<IPAddressOrServerName>は、SMB ホストの IP アドレスまたは名前です -
<ShareName>は共有の名前です -
<FolderMountedIn>は、SMB がマウントされているフォルダーの名前です。
-
他のノードで手順を繰り返します。
これで、FCI を構成する準備が整いました。