この記事では、Microsoft Windows Server の DFS(Distributed File System:分散ファイルシステム)について解説します。 業務で Windows サーバーの DFS について調査・構築する機会があり、得た知見をシリーズ記事としてまとめました。第 1 回の本記事では概念と仕組みを解説し、続く記事では Amazon EC2 を使った実際の構築と動作検証などを扱います。 この記事を読むと分かること: 本記事は「DFS の紹介および構築してみた」シリーズの第 1 回です。 Microsoft DFS(Distributed File System)は、複数のサーバーに分散しているファイル共有を、利用者に対して「1 つのフォルダ」として見せる仕組みです。 DFS は以下の 2 つの独立した技術で構成されています。この 2 つを組み合わせることで、「ユーザーには 1 つのフォルダに見せつつ、裏側では複数サーバーで冗長化・同期する」という仕組みが完成します。 ※ DFS の名前空間に (上図はクライアントから DFS へのアクセスフローを ①〜⑤ のステップで示しています。各ステップの詳細は「上図(①〜⑤)のアクセスフロー詳解」セクションで解説します。) 上図の DFS にアクセスするまでの流れについて、以下で各ステップごとに詳しく解説します。 ① クライアント PC が DNS サーバーに問い合わせる クライアント PC が ② 最適な DC の IP アドレスを特定する(DC Locator) クライアント PC は、Active Directory の「DC Locator(ドメインコントローラーロケーター)」という仕組みを使って、自身に最も近い DC を特定します。 クライアントは、Active Directoryによってサイトごとに事前登録された「サイト固有のSRVレコード」をDNSサーバーに問い合わせることで、自身と同じサイト内(例:東京拠点のユーザーには東京の DC、大阪拠点のユーザーには大阪の DC)にある最適な DC の IP アドレスを取得します。 ③ クライアント PC が DC(名前空間サーバー)にリフェラル要求を送信する 取得した DC の IP アドレスに対し、クライアント PC は SMB プロトコルで「名前空間 ドメインベース DFS 名前空間では、名前空間の構成情報が Active Directory 上に保存されます。技術的にはドメイン内のメンバーサーバーを名前空間サーバーに指定することも可能ですが、DC が名前空間サーバーを兼ねる構成が一般的であるため、本フロー図では DC がその役割を兼ねている前提で記述しています。 ④ DC が AD サイト情報に基づいてリフェラルを返却する リフェラル要求を受けた DC は、ユーザー PC と各ファイルサーバーの IP アドレスを AD(Active Directory サイトとサービス)に登録された「サブネット」情報と照合し、それぞれの所属サイトを特定します。 その後、サイト情報と「ターゲット紹介の順序」設定に基づいて優先順位をつけた接続先リスト(リフェラル)を生成し、クライアント PC へ返却します。クライアント PC はこのリストを一定時間キャッシュします。 ターゲット紹介の順序には 3 種類あります: 参考:Microsoft Learn「ターゲット紹介の順序付けメソッドを設定する」 ⑤ クライアント PC がファイルサーバーへ直接 SMB 接続する クライアント PC はリスト先頭のファイルサーバーへ SMB 接続(445 番ポート)を直接開始します。このとき、DFS 名前空間サーバー(DC)は経由しません。先頭のサーバーがダウンしている場合は、リストの次のサーバーへ自動フェイルオーバーします。 参考:Microsoft Learn「How DFS Works」(DFS アーキテクチャとリフェラルプロセスの詳細) DFS-R は各サーバーが持つ「履歴管理用データベース」と「転送用の一時領域」を連携させて動作します。 上図は DFS-R の内部動作を ①〜⑧ のステップで示しています。左側が送信側(DFS サーバー 1 号機)、右側が受信側(DFS サーバー 2 号機)の処理です。以下で各ステップを解説します。 ① ファイル変更の検知(NTFS USN ジャーナル監視) Windows の NTFS ファイルシステムは「USN(Update Sequence Number)ジャーナル」と呼ばれる変更ログを持っています。DFS-R はこのジャーナルを常時監視し、レプリケート対象フォルダ内でファイルが変更・追加・削除されると即座に検知します。 ② ESE データベースでのハッシュ照合 ファイルの変更を検知すると、ESE(Extensible Storage Engine)と呼ばれる Microsoft のストレージエンジンで構築された専用データベースを参照し、実際に変更が生じているかをハッシュ値で確認します。 データベースは以下の情報などを管理します。 参考:Microsoft Learn「DFS Replication FAQ」(ファイル ID・バージョンベクトル・ハッシュ値の詳細) 参考:Microsoft Learn「MSFT_DfsrIdRecordInfo class」(ファイル ID・バージョンベクトルの仕様) 参考:Microsoft Learn「How FRS uses the USN change journal」(USN ジャーナルの詳細) ③ RDC(差分圧縮)による差分生成 データベースのハッシュ値を照合し、ファイル全体ではなく「変更されたデータブロック(差分)」だけを抽出します。この技術を RDC(Remote Differential Compression)と呼びます。 たとえば、100 MB を超えるような大容量のテキストログや CSV ファイルの一部が更新された場合、RDC の差分検出アルゴリズムにより、ファイル全体を再転送するのではなく、変更が生じたブロックデータのみを抽出します。これにより、ネットワークに流れるデータ量を最小限に抑えることができます。 ④ ステージング領域への配置(送信側) 抽出した差分データを圧縮し、送信側のステージング領域(一時的な作業用フォルダ)に格納します。 ⚠️ 注意:デフォルトのステージング領域は 4GB です。扱うファイルが大きい場合は、容量を事前に拡張しておかないとレプリケーションが停止することがあります。送信側・受信側の両方に適用されます。 参考:Microsoft Learn「レプリケートされたフォルダーに必要な最小ステージング領域の決定方法」 ⑤ ネットワーク転送(RPC / TCP) ステージング領域に格納された差分データのみを、RPC / TCP を使って相手サーバーへ転送します。ファイル全体ではなく差分のみを送るため、帯域幅の消費を大幅に抑えられます。 ⑥ ステージング領域での受信(受信側) 受信側サーバーは転送されてきた差分データを、受信側のステージング領域に一時的に格納します。 ⑦ ESE データベースの更新(受信側) 受信した内容をもとに、受信側の ESE データベースを更新します。具体的には、バージョンベクトルを更新し、ハッシュ値を再計算・登録します。 ⑧ NTFS ボリュームへの展開・適用 ステージング領域に格納された差分データを実際のファイルに反映します。これで受信側のファイルが最新の状態になります。 DFS-R は初期設定時にプライマリを決めますが、一度同期が完了すると全サーバーが対等なマスターになります。この仕組みをマルチマスター方式と呼びます。 削除の扱い: 削除操作も「更新情報」として全拠点に伝播します。どこかの拠点でファイルを削除すると、同期が完了次第、全拠点から消えます。 競合の解決: 複数の拠点で同時に同じファイルを更新した場合、DFS-R は「最後のライターが優先(Last Writer Wins)」というアルゴリズムで競合を解決します。負けた側のファイルは隠しフォルダ 表示設定で「隠しファイル」を表示するだけでは不十分で、「保護されたオペレーティング システム ファイルを表示しない (推奨)」のチェックを外す必要があります。 以下のとおりチェックを外すと、DfsrPrivate が表示されます。
DFS は独自の権限を持たず、Windows Server の標準機能を使って権限を制御します。権限制御には以下の 2 つのレイヤーがあります。 ネットワーク経由でサーバーへ「入れるかどうか」を決める入り口の権限です。 参考:Microsoft Learn「共有フォルダーのアクセス許可の管理」 SMB 共有権限は、フォルダを右クリック → プロパティ → 「共有」タブ → 「詳細な共有」から設定できます。 実際の構築では、フォルダごとに手動で設定するのではなく、グループポリシー(GPO)を使って複数サーバーへ SMB 共有を一括で作成・設定できます。 次回以降の記事で、実機での構築手順とあわせてご紹介します。 ファイルシステムのプロパティ(セキュリティタブ)から設定する、データそのものに対する権限です。 NTFS アクセス権は、フォルダを右クリック → プロパティ → 「セキュリティ」タブから設定できます。 複数の DFS レプリカサーバーに同じ NTFS 権限を適用する場合、GPO を使った集中管理が有効です。 こちらの具体例も、次回の構築編で併せて解説します。 DFS 環境では、Windows Server の「データ重複排除(Data Deduplication)」機能を併用できます。DFS 自体の機能ではなく、Windows Server の機能との組み合わせです。 重複排除を有効にしても、ファイルの実体は変わらないため DFS-R のレプリケーションはトリガーされません。各レプリカサーバーで個別に重複排除を有効化できます。 参考:Microsoft Learn「データ重複除去の相互運用性」 この記事では DFS の基礎として以下を解説しました。 次回の記事では、実際に AWS EC2 環境で Active Directory を構築し、DFS をインストールする手順を解説します。
はじめに(この記事で分かること)
DFS(分散ファイルシステム)とは?
\\corp.example.com\Public\Shared でアクセスする例。
コンポーネント
役割
動作の概要
DFS-N(名前空間)
複数の共有フォルダを 1 つの仮想ツリーにまとめる
\\corp.example.com\Public のようなドメイン名でアクセスでき、裏側で実際のサーバー(\\FileServer01\Share 等)へ誘導される
DFS-R(レプリケーション)
複数サーバー間でフォルダの内容を同期・冗長化する
マルチマスター方式を採用し、全ノードが対等なマスターとして機能する。RDC(Remote Differential Compression)を用いて差分のみを同期し帯域を節約する。
上図(①〜⑤)のアクセスフロー詳解
\\corp.example.com\Public\Shared へアクセスしようとすると、まず corp.example.com を管理している DC(Domain Controller:ドメインコントローラー)の場所を特定するために、社内 DNS サーバーへ問い合わせを行います。Public\Shared の接続先(フォルダターゲット)のリストをください」というリクエストを送ります。これをリフェラル要求と呼びます。
DFS-R(レプリケーション)の仕組み
単なるファイルコピーではない

マルチマスター方式とデータ競合
DfsrPrivate\ConflictandDeleted に一定期間保管されます。
DFS 環境での権限管理(SMB と NTFS の二重構造)

① SMB 共有権限

② NTFS アクセス権

DFS 環境でのデータ重複排除
まとめ