Active Directory は、複数台のドメインコントローラ(DC)をすべてマスターとして動かし(マルチマスター)、ユーザー情報などをお互いにレプリケーションすることで可用性を保っています。ただし、マルチマスターでは競合が起きると困る操作もあり、そうした操作はフォレストやドメインの中で1台の DC だけが担当します。
この操作を担当する DC の役割を、操作マスターと呼びます。操作マスターは FSMO(Flexible Single Master Operation:フィズモ)とも呼ばれます。この記事では、5つの操作マスターの役割を確認したうえで、PowerShell で操作マスターを別の DC に移動します。
- 5つの操作マスターの役割と、フォレスト単位・ドメイン単位の違い
netdom query fsmoで、どの DC が操作マスターかを確認する方法Move-ADDirectoryServerOperationMasterRoleで操作マスターを移動する手順と、障害時の注意点
操作マスター(FSMO)
操作マスターには5つの種類があります。スキーママスターとドメイン名前付けマスターはフォレストに1台ずつ、PDC エミュレーター、RID マスター、インフラストラクチャマスターはドメインごとに1台ずつ存在します。
スキーママスター
フォレストに1台存在します。スキーマとは、Active Directory に保存するオブジェクトの種類や属性を定義したものです。たとえば、ユーザーのプロパティに表示される電話番号や電子メールが属性にあたります。
スキーマを変更(拡張)できるのはスキーママスターだけで、変更内容はスキーママスターからフォレスト内のほかの DC にレプリケーションされます。スキーママスターが動いていないと、Exchange Server の導入などで必要になるスキーマの拡張ができません。
ドメイン名前付けマスター
フォレストに1台存在します。フォレストにドメインを追加・削除できるのは、ドメイン名前付けマスターを持つ DC だけです。これによって、フォレスト内のドメイン名が重複しないようにしています。アプリケーションディレクトリパーティション(DNS のゾーンを保存するパーティションなど)の追加にも使われます。
ドメイン名前付けマスターが動いていないと、ドメインの追加・削除ができません。
PDC エミュレーター
ドメインごとに1台存在します。ほかの DC でパスワードが変更されると、その変更は PDC エミュレーターへ優先的にレプリケーションされます。
ある DC でパスワードの誤りによる認証の失敗が起きると、その DC は失敗を返す前に PDC エミュレーターに問い合わせます。パスワードを変更した直後で、新しいパスワードがまだその DC に届いていなくても、PDC エミュレーターで確認できればサインインできます。アカウントロックアウトの処理も PDC エミュレーターが担当します。
また、PDC エミュレーターはドメインの時刻同期の基準になります。フォレストのルートドメインの PDC エミュレーターがフォレスト全体の時刻の基準になるので、ここには外部の NTP サーバなど正確な時刻源を設定しておきます。
PDC エミュレーターが動いていないと、パスワード変更の反映が遅れることがあります。時間がたてば、通常のレプリケーションで DC 間のパスワードはそろいます。長いあいだ PDC エミュレーターがない状態が続くと、ドメイン内の時刻の基準がなくなって時計がずれていき、Kerberos 認証に影響が出るおそれがあります(Kerberos は既定で5分を超える時刻のずれを許容しません)。
RID マスター
ドメインごとに1台存在します。ユーザーやグループを作成すると、SID(セキュリティ ID)が割り当てられ、オブジェクトを一意に識別できるようになります。
SID は、ドメイン内で共通のドメイン SID と、オブジェクトごとに異なる相対識別子(Relative ID:RID)からできています。RID が重複しないよう、RID マスターは各 DC に RID の範囲(RID プール)を割り当てます。RID プールは既定で 500 個ずつ割り当てられます。
DC は、手持ちの RID プールが少なくなると、使い切る前に次のプールを RID マスターに要求します。RID マスターと通信できないまま手持ちのプールを使い切ると、その DC ではユーザーの追加など、新しい SID が必要な操作ができなくなります。
インフラストラクチャマスター
ドメインごとに1台存在します。複数のドメインがある環境で、ドメイン A のユーザーをドメイン B のグループのメンバーにしたあと、ドメイン A でユーザー名を変更したとします。ドメイン B のグループに残っているメンバーの情報は、そのままでは古い名前のままです。
このとき、ドメイン B のインフラストラクチャマスターがグローバルカタログから最新の情報を取得し、ドメインをまたぐ参照(名前や SID)を更新します。
インフラストラクチャマスターは、グローバルカタログではない DC に置くのが原則です。グローバルカタログに置くと、更新すべき差分を見つけられず、ドメインをまたぐ参照が更新されなくなります。ただし、ドメイン内のすべての DC がグローバルカタログの場合や、Active Directory のごみ箱を有効にしている場合は、どの DC に置いてもかまいません。
5つの役割をまとめると、次のようになります。
| 役割 | 範囲 | 主な仕事 | 止まると困ること |
|---|---|---|---|
| スキーママスター | フォレスト | スキーマの変更 | スキーマの拡張ができない |
| ドメイン名前付け マスター | フォレスト | ドメインの追加・削除 | ドメインの追加・削除ができない |
| PDC エミュレーター | ドメイン | パスワード変更の優先受付、アカウントロックアウト、時刻同期の基準 | パスワード変更の反映が遅れる、時刻がずれる |
| RID マスター | ドメイン | DC への RID プールの割り当て | プールを使い切った DC でオブジェクトを作成できない |
| インフラストラクチャ マスター | ドメイン | ドメインをまたぐ参照の更新 | 他ドメインのオブジェクトの名前変更などが反映されない |
操作マスターの確認
現在の操作マスターを確認するには、任意の DC で、コマンドプロンプトを管理者として実行し、netdom query fsmo を実行します。
次は、すべての操作マスターが AD-1.hirotanoblog.local にある場合の表示です。
この記事の画面は、実際の画面ではなく、検証時の画面から設定する項目(見るポイント)を抜き出して描いたイメージです。バージョンによって、項目の並びや表記は変わります。
C:\Users\(伏せています)>netdom query fsmo| 1スキーマ マスター | AD-1.hirotanoblog.local |
| ドメイン名前付けマスター | AD-1.hirotanoblog.local |
| 2PDC | AD-1.hirotanoblog.local |
| RID プール マネージャー | AD-1.hirotanoblog.local |
| インフラストラクチャ マスター | AD-1.hirotanoblog.local |
コマンドは正しく完了しました。
| No. | 表示 | 意味 |
|---|---|---|
| 1 | スキーマ マスター ドメイン名前付けマスター | フォレスト単位の役割。どちらも AD-1 が持っている |
| 2 | PDC RID プール マネージャー インフラストラクチャ マスター | ドメイン単位の役割。それぞれ PDC エミュレーター、RID マスター、インフラストラクチャマスターのことで、どれも AD-1 が持っている |
PowerShell では、Get-ADDomain の PDCEmulator、RIDMaster、InfrastructureMaster と、Get-ADForest の SchemaMaster、DomainNamingMaster の各プロパティでも確認できます。
操作マスターの転送
DC の移行(リプレース)やハードウェアの保守などで、操作マスターを別の DC に移動することがあります。役割を持っている DC が動いている状態で移動することを「転送」と呼びます。
転送は GUI(Active Directory ユーザーとコンピューター、Active Directory ドメインと信頼関係、Active Directory スキーマの各スナップイン)でもできますが、今回は PowerShell の Move-ADDirectoryServerOperationMasterRole で行います。
コマンドの書き方を確認する
コマンドの形は次のとおりです。-Identity には役割を受け取る(移動先の)DC を指定します。
PowerShell
Move-ADDirectoryServerOperationMasterRole -Identity <移動先の DC> -OperationMasterRole <役割>
-OperationMasterRole には、役割の名前か番号を指定します。複数の役割はカンマで区切って並べます。
| 番号 | 名前(PowerShell) | 役割 |
|---|---|---|
| 0 | PDCEmulator | PDC エミュレーター |
| 1 | RIDMaster | RID マスター |
| 2 | InfrastructureMaster | インフラストラクチャマスター |
| 3 | SchemaMaster | スキーママスター |
| 4 | DomainNamingMaster | ドメイン名前付けマスター |
スキーママスターの転送には Schema Admins、ドメイン名前付けマスターの転送には Enterprise Admins、ドメイン単位の3つの役割の転送には Domain Admins のメンバーである必要があります。また、転送の前に DC 間のレプリケーションでエラーが出ていないことを確かめておきます。
AD-1 から AD-2 へ移動する
ドメイン hirotanoblog.local に AD-1 と AD-2 の2台の DC がある構成で、現在すべての操作マスターを持っている AD-1 から、AD-2 へ5つの役割を移動します。
AD-2 で PowerShell を管理者として実行し、次のように入力します。
AD-2(PowerShell)
Move-ADDirectoryServerOperationMasterRole -Identity AD-2 -OperationMasterRole 0,1,2,3,4
役割ごとに移動するかどうかの確認が出るので、それぞれ Y を入力します。
1PS C:\Users\(伏せています)> Move-ADDirectoryServerOperationMasterRole -Identity AD-2 -OperationMasterRole 0,1,2,3,4 操作マスターの役割の移動2役割 'PDCEmulator' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?3[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'RIDMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'InfrastructureMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'SchemaMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): Y 操作マスターの役割の移動役割 'DomainNamingMaster' をサーバー 'AD-2.hirotanoblog.local' に移動しますか?[Y] はい(Y) [A] すべて続行(A) [N] いいえ(N) [L] すべて無視(L) [S] 中断(S) [?] ヘルプ (既定値は "Y"): YPS C:\Users\(伏せています)>
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 実行したコマンド | 移動先に AD-2、役割に 0〜4 のすべてを指定している |
| 2 | 役割 ‘PDCEmulator’ を…移動しますか? | 指定した番号の順(0 の PDCEmulator から 4 の DomainNamingMaster まで)に、役割ごとの確認が出る |
| 3 | [Y] はい(Y) … : Y | Y でその役割を移動する。A を入力すると残りの役割も確認なしで移動する |
確認を出さずに実行したい場合は、-Confirm:$false を付けます。
移動したことを確認する
もう一度コマンドプロンプトを管理者として実行し、netdom query fsmo を実行します。操作マスターがすべて AD-2.hirotanoblog.local に変わったことが確認できます。
C:\Users\(伏せています)>netdom query fsmo| 1スキーマ マスター | AD-2.hirotanoblog.local |
| ドメイン名前付けマスター | AD-2.hirotanoblog.local |
| PDC | AD-2.hirotanoblog.local |
| RID プール マネージャー | AD-2.hirotanoblog.local |
| インフラストラクチャ マスター | AD-2.hirotanoblog.local |
コマンドは正しく完了しました。
| No. | 表示 | 意味 |
|---|---|---|
| 1 | 5つの役割すべてが AD-2.hirotanoblog.local | AD-1 から AD-2 への転送が完了した |
役割を持っている DC が故障して起動できない場合は、転送ができません。このときは、同じコマンドに -Force を付けて実行し、役割を強制的に移します(「強制」または「奪取」と呼びます)。-Force を付けても、まず通常の転送を試し、できなかった場合に強制します。
役割を強制的に移したあとは、元の DC をそのままネットワークに戻してはいけません。元の DC はドメインから削除してメタデータをクリーンアップし、再利用する場合はバックアップから戻さずに OS から入れ直します。強制は、元の DC が戻ってこないときだけに使う手段です。
まとめ
| やりたいこと | 方法 |
|---|---|
| 操作マスターを確認する | netdom query fsmo(または Get-ADDomain/Get-ADForest) |
| 操作マスターを転送する | Move-ADDirectoryServerOperationMasterRole-Identity 移動先 -OperationMasterRole 0,1,2,3,4 |
| 故障した DC から移す | 上のコマンドに -Force を付ける(元の DC は戻さない) |
操作マスターは、フォレストに2つ、ドメインごとに3つあり、それぞれ1台の DC だけが持っています。DC をリプレースするときは、古い DC を降格する前に役割を転送し、netdom query fsmo で移動先に変わったことを確かめておくと安心です。
コメント