share facebook facebook2 twitter menu hatena pocket slack

2014.12.02 TUE

SQL ServerはSambaを踊…れなかった。

津村 彰

WRITTEN BY津村 彰

最近なかなか仕事が進まない津村です。
初めて使ったWindowsは3.1、使った最古のWindowsは1.01、学生時代はNT4.0を愛用していました。

MSSQL ServerのデータをSamba上に置く際のハマりどころ。

もう色々面倒くさいのでざくざくいきます。政治ってやだね。
要するに「AD組むのめんどくさい」です。
Sambaは4.0からActiveDirectoryのドメコンになる事ができますが、3系だとNTドメインのドメコンにしかなれません。
あと、Sambaをドメコンとして構成する場合は、最初からLDAP認証を有効にする必要があります。

じゃあ、ドメイン組まなかった時の認証処理ってどーなの?って話で。

MSSQL Server のデータを Samba に置く場合のハマりどころ: SQL Server(MSSQL SERVER) プロパティ

Windows2008R2では上記の画面ですが、要するにサービス起動用のアカウントを使ってSQL Serverは起動してきます。
ここでADで上手く連携していれば面倒な事は無いのですが、諸般の事情でADを組めない時は、結論としてGuestUserとしてSambaを構成します。

2014/12/01追記
結果として、masterデータベースの移行は可能ですが、その他システムデータベースのマイグレーションができません。
SQL Server のデータベース ファイルをネットワークのサポートの説明 – KB304261

エラー メッセージ 2
5110「ファイル ‘file_name’ はデータベース ファイルをサポートしないネットワーク デバイス上で。


この動作は仕様です。

# logs split per machine
log file = /var/log/samba/log.%m
log level = 3
# max 50KB per log file, then rotate
max log size = 50

まず、ログレベルを3に設定し、デバッグログを出力します。
smb.confのglobalセクションに、「log level = 3」を追記します。
あ、調査終わったら元に戻してくださいね。/varが溢れても知りません。

次に、SQL Serverの起動パラメータを、以下のように修正します。

-d\192.168.11.1dataMSSQLMSSQL10_50.MSSQLSERVERMSSQLDATAmaster.mdf;
-e\192.168.11.1dataMSSQLMSSQL10_50.MSSQLSERVERMSSQLLogERRORLOG;
-l\192.168.11.1dataMSSQLMSSQL10_50.MSSQLSERVERMSSQLDATAmastlog.ldf
※実際は1行で記述します。

ポイントとしては、ドライブ名にマウントせず、フルパスで表記する事です。
これで3時間はハマりました。
運用上必要であれば、適宜ドライブ名も併用してください。

SQL Serverを起動すると、Sambaが大量のログを吐きます。
tail -f /var/log/samba/* | grep user」とかで、適宜ログを舐めると、以下のような出力が確認できます。

[2014/11/30 16:48:36.774001,  3] auth/auth.c:219(check_ntlm_password)
  check_ntlm_password:  Checking password for unmapped user [][]@[WIN-015L7U2HODM] with the new password interface
[2014/11/30 16:48:36.774031,  3] auth/auth.c:222(check_ntlm_password)
  check_ntlm_password:  mapped user is: [CLUSTER-1A][]@[WIN-015L7U2HODM]
[2014/11/30 16:48:36.774065,  3] auth/auth.c:278(check_ntlm_password)
  check_ntlm_password: guest authentication for user [] succeeded

つまるところ、guestユーザとして認証に成功しています。

なので、smb.confの共有設定で以下のように設定します。

[data]
valid user = +cloudpack,guest

さいごに

この場合、SQLServerの複数台からの同時起動が可能になってしまいますが、SQLServerには排他ロック制御があるようで、後のノードは起動する事ができませんでした。
MSFTを構成しない場合でSQL ServerのHAクラスタというと、NEC製CLUSTER PROといったソリューションがありますが、CLUSTER PROはADを必要としません。よって、今回のような構成をする必要があります。

元記事はこちらです。
SQL ServerはSambaを踊…れなかった。

津村 彰

津村 彰