twitter で質問いただいた内容をちょっとまとめておきたいと思います。
クラスター構成の SQL Server で使用できるディスクについては制約があるので今回はそれについて投稿したいと思います。
今回は Windows Server 2008 R2 SP1 の 2 ノードクラスターの環境を使用しています。
■クラスターの構成について
まずは、クラスターの構成についてのおさらいです。
通常のクラスターは以下のようにクラスターを構成する各ノードの両ノードからアクセスができる共有ディスクにデータベースを配置します。
各ノードのローカルディスクに関してはデータベースを配置することはできません。
# 一部例外はあるのですが。
■SQL Server のデータベースのファイルを格納できるディスク
ここからが本題です。
クラスターで使用できるディスクは両ノードから参照が可能な共有ディスクになります。
FC-SAN や iSCSI 機能付きの NAS を使用することが多いかと思います。
SQL Server のデータベースで使用できるディスクにはさらに設定の制限があります。
以下のようなクラスター構成の SQL Server の環境があります。
この状態で SQL Server のデータベースに新規のファイルを追加してみます。
SQL Server のクラスターのグループに含まれる [E ドライブ] は選択ができますが、[F ドライブ] は選択することはできません。
SQL Server のデータベースを格納するためのディスクとしては以下の要件が必要になるようです。
- SQL Server のリソースに依存関係を設定したディスク
- 依存関係を設定されているディスク内のディレクトリにマウントしている共有ディスク
まずは、[1.] の条件を見ていきたいと思います。
現状の設定では、SQL Server のサービスのクラスターリソースでは [E ドライブ] で使用している [クラスター ディスク 2] が依存関係として設定されています。
[F ドライブ] で使用している [クラスター ディスク 3] を依存関係に追加してみます。
# オンラインの状態で依存関係を追加できます。
SQL Server のリソースに追加後はデータベースの配置先として選択ができるようになります。
ドライブの直下にファイルを配置しようとするとエラーになったりするので、ディレクトリを作った方が良かったりしますが。
続いて [2.] の条件で設定したいと思います。
先ほどの状態から依存関係を削除しています。
# 依存関係の削除もオンラインで可能です
この状態で、[F ドライブ] で使用していた [クラスター ディスク 3] のドライブ文字を削除して、[E ドライブ] の [クラスター ディスク 2] の空のディレクトリにディスクをマウントします。
# 空のディレクトリへのマウントはクラスター マネージャーではなくディスクの管理 (diskmgmt.msc) から行います。
この場合もディスクの直下にファイルを格納しようとするとエラーになってしまうのでディスクの下にディレクトリを作成してデータファイルを格納した方が良いと思います。
今回は [datafile] というディレクトリを作成しています。
この形であれば、依存関係を設定しないでも共有ディスクをデータベースのファイル格納先として設定することが可能となります。
ただし注意が必要な点としては、依存関係が設定されていないため、
- クラスター ディスク 2 のオンライン
- クラスター ディスク 3 のオンライン
- SQL Server のオンライン
という順序が保障されなくなってしまいます。
SQL Server が起動したタイミングではクラスター ディスク 3 がオンラインになっている必要があります。
# オンラインになっていないとデータベースの配置に必要なディスクが準備されていない状態で SQL Server が起動してしまう可能性がありますので。
そのため、実運用では依存関係は必須となると思います。
マウントを使用して共有ディスクの空のディレクトリににローカルディスクをマウントしようとすると以下のエラーになります。
共有ディスクの空のディスクにマウントできるのは共有ディスクのみとなるようですね。
依存関係を設定していないと、データベースのファイルの格納先として設定ができないのを忘れてちょっとはまってしまうかもしれないのでメモとして残しておきたいと思います。