View
2.051
Download
5
Category
Preview:
Citation preview
1
ドメインコントローラーの仮想化
2
DC 仮想化のメリット
• スケーラビリティ• 物理 PC がなくても展開可能
• サーバーのロールバック(スナップショット)• 自動展開のしやすさ• パブリックウラウドへの移行
• 仮想 DC を IaaS に展開
3
仮想 DC の展開
• サーバーマネージャーを使用して
• Windows PowerShell を使用して
• VHDファイルを所定の手続きでクローン
いずれの処理もリモートから行える
4
Hyper-V
DC01
①クローン先情報を埋め込む
②エクスポート VHD DC02③インポート
Hyper-V
DCクローンの動作イメージ
5
1. ソース DC で FSMO が起動していないことを確認。起動している場合には他の DC に移動。
2. ソース DC をクローン可能な DC として認可する3. 非互換アプリを調査し CustomDCCloneAllowList.xmlを生成4. 複製先情報を記載した DcCloneConfig.xmlファイルを作成5. ソース DC をシャットダウン6. ソース DC を Export
7. ソースを起動8. Exportしたイメージを新しい仮想マシンとして Import
9. 複製先マシンを起動( DC 間複製が開始される)
仮想 DC のクローン手順
6
$SourceDC = "ITCAMP-DC02"
$DistDC = "ITCAMP-DC03"
$distPDCEmu = "ITCAMP-DC01"
$SourceHyperVHost = "ITCAMP-FS"
$DistHyperVHost = "ITCAMP-FS"
$VMStore = "¥¥$DistHyperVHost¥VMStore"
$ConfirmPreference = "none"
Move-ADDirectoryServerOperationMasterRole -Identity $distPDCEmu -OperationMasterRole PDCEmulator
Get-ADComputer $SourceDC | %{Add-ADGroupMember -Identity "Cloneable Domain Controllers" -Members $_.samAccountName}
Invoke-Command -ComputerName $SourceDC -ScriptBlock { Get-ADDCCloningExcludedApplicationList -GenerateXml -Force }
Invoke-Command -ComputerName $SourceDC -ScriptBlock { `
New-ADDCCloneConfigFile -Static -IPv4Address "192.168.210.52" `
-IPv4DNSResolver "192.168.210.50" `
-IPv4SubnetMask "255.255.255.0" `
-IPv4DefaultGateway "192.168.210.254" `
-CloneComputerName "$Args" `
-SiteName "Default-First-Site-Name" } `
-ArgumentList $DistDC
Stop-VM -ComputerName $SourceHyperVHost -Name $SourceDC
Get-VM -ComputerName $SourceHyperVHost -Name $SourceDC | %{ Export-VM $_ -Path $VMStore}
Start-VM -ComputerName $SourceHyperVHost -Name $SourceDC
$CFG = (Dir "$VMStore¥$SourceDC¥Virtual Machines¥*.xml").FullName
MD ¥¥$DistHyperVHost¥F$¥$DistDC
Import-VM -ComputerName $DistHyperVHost -Path $CFG -GenerateNewId -Copy-VhdDestinationPath F:¥$DistDC
Get-VM -ComputerName $DistHyperVHost -Name $SourceDC |Where-Object {$_.State -EQ "Off"} | Rename-VM -NewName $DistDC
Start-VM -ComputerName $DistHyperVHost -Name $DistDC
DCクローンを自動化するスクリプト例
step1
step2step3
step4
step5step6step7
step8
step9
ITCAMP-FS
DC01 DC02 DC03複製
ここからコマンドを実行
7
Step 1: ソースDCでPDCエミュレーターが動作していないことを確認
PDCエミュレーターがインストールされているDCはクローンできない
$ConfirmPreference = "none"
Move-ADDirectoryServerOperationMasterRole -Identity $distPDCEmu `
-OperationMasterRole PDCEmulator
8
Step 2: ソースDCをクローン可能なDCに設定する
Get-ADComputer $SourceDC | %{Add-ADGroupMember `
-Identity "Cloneable Domain Controllers" -Members $_.samAccountName}
複製元となるドメインコントローラーを CloneableDomain Controllers のメ
ンバーにする
9
Step3.非互換アプリを調査し CustomDCCloneAllowList.xmlを生成
コマンドレットを実行することで、C:¥Windows¥NTDS¥CustomDCCloneAllowList.xml ファイルが作成される
Invoke-Command -ComputerName $SourceDC -ScriptBlock { Get-
ADDCCloningExcludedApplicationList -GenerateXml -Force }
<AllowList>
<Allow>
<Name>Active Directory Management Pack Helper
Object</Name>
<Type>Program</Type>
</Allow>
<Allow>
<Name>System Center Operations Manager 2012
Agent</Name>
<Type>Program</Type>
</Allow>
<Allow>
<Name>Microsoft Silverlight</Name>
<Type>WoW64Program</Type>
</Allow>
<Allow>
<Name>AdtAgent</Name>
<Type>Service</Type>
</Allow>
<Allow>
<Name>HealthService</Name>
<Type>Service</Type>
</Allow>
<Allow>
<Name>QWAVE</Name>
<Type>Service</Type>
</Allow>
<Allow>
<Name>System Center Management APM</Name>
<Type>Service</Type>
</Allow>
<Allow>
<Name>wlidsvc</Name>
<Type>Service</Type>
</Allow>
</AllowList>
10
Step4.複製先情報を記載した DcCloneConfig.xmlファイルを作成
Invoke-Command -ComputerName $SourceDC -ScriptBlock { `
New-ADDCCloneConfigFile -Static -IPv4Address "192.168.210.52" `
-IPv4DNSResolver "192.168.210.50" `
-IPv4SubnetMask "255.255.255.0" `
-IPv4DefaultGateway "192.168.210.254" `
-CloneComputerName "$Args" `
-SiteName "Default-First-Site-Name" } `
-ArgumentList $DistDC
すでに作成されていると上書きでいないので注意
11
DcCloneConfig.xml の例
<?xml version="1.0"?>
<d3c:DCCloneConfig
xmlns:d3c="uri:microsoft.com:schemas:DCCloneConfig">
<ComputerName>ITCAMP-DC03</ComputerName>
<SiteName>Default-First-Site-Name</SiteName>
<IPSettings>
<IPv4Settings>
<StaticSettings>
<Address>192.168.210.52</Address>
<SubnetMask>255.255.255.0</SubnetMask>
<DefaultGateway></DefaultGateway>
<DNSResolver>192.168.210.50</DNSResolver>
<DNSResolver>192.168.210.51</DNSResolver>
<DNSResolver></DNSResolver>
<DNSResolver></DNSResolver>
<PreferredWINSServer></PreferredWINSServer>
<AlternateWINSServer></AlternateWINSServer>
</StaticSettings>
</IPv4Settings>
<IPv6Settings>
<StaticSettings>
<DNSResolver></DNSResolver>
<DNSResolver></DNSResolver>
<DNSResolver></DNSResolver>
<DNSResolver></DNSResolver>
</StaticSettings>
</IPv6Settings>
</IPSettings>
</d3c:DCCloneConfig
12
Step 5:ソース DC をシャットダウン
Stop-VM -ComputerName $SourceHyperVHost -Name $SourceDC
13
Step 6:ソース DC を Export
Get-VM -ComputerName $SourceHyperVHost `
-Name $SourceDC | %{ Export-VM $_ -Path $VMStore}
14
Start-VM -ComputerName $SourceHyperVHost -Name $SourceDC
Step7. ソースDCを起動
複製先のDCは複製元DCと複製を開始するので、事前に起動しておく必要がある。
15
Step 8: Exportしたイメージを新しい仮想マシンとして Import
$CFG = (Dir "$VMStore¥$SourceDC¥Virtual Machines¥*.xml").FullName
MD ¥¥$DistHyperVHost¥F$¥$DistDC
Import-VM -ComputerName $DistHyperVHost `
-Path $CFG -GenerateNewId -Copy -VhdDestinationPath F:¥$DistDC
重要!!インプレースインポートはできない!重要!!インプレースインポートはできない!
16
Step9.複製先マシンを起動
17
仮想 DC 展開の留意点
• 単一障害点にならないこと 少なくとも2台のHyper-V サーバーに1台づつ展開
1つのハードウェアの障害が複数のDCに影響を与えないようにすること できるだけ物理的に異なるリージョンに配置すること 可能であれば、少なくとも1台は物理 DC を構築しておくこと
Hyper-V
V-DC V-DC
Hyper-V
V-DC
Hyper-V
V-DC
18
• セキュリティ上の考慮点• できるだけ DC のみの単一機能のサーバーとし、ホスト、ゲストともに
Server Core を採用すること
• 必要に応じて RODC を検討すること• VHDファイルの安全性に考慮すること
• VHDファイルが含まれるドライブごと暗号化することをお勧め
Hyper-V(Server Core)
V-DC(Server Core)
19
20
21
22
23
• セキュリティ上の考慮点(つづき)• ホストコンピューターは死守すること
• 可能であればホストコンピューターは管理用ネットワークのみと通信を行うように設定されていること
• ホストコンピューターはゲストであるDCのドメインに所属させない
Hyper-V(domain member)
V-DC V-DC
DC からスタートアップスクリプトを送り込む
1
2
3Sysvol 共有にアタック
24
Measurement Test Physical Virtual Delta
Searches/sec Search for common name in base scope (L1) 11508 10276 -10.71%
Searches/sec Search for a set of attributes in base scope (L2) 10123 9005 -11.04%
Searches/sec Search for all attributes in base scope (L3) 1284 1242 -3.27%
Searches/sec Search for common name in subtree scope (L6) 8613 7904 -8.23%
Successful binds/sec Perform fast binds (B1) 1438 1374 -4.45%
Successful binds/sec Perform simple binds (B2) 611 550 -9.98%
Successful binds/sec Use NTLM to perform binds (B5) 1068 1056 -1.12%
Writes/sec Write multiple attributes (W2) 6467 5885 -9.00%
• パフォーマンスの考慮点
• Windows Server 2008 の場合約10%の性能減
Adtest.exe 使用 http://www.microsoft.com/en-us/download/details.aspx?id=15275
25
• 展開に関する考慮点
• 差分ディスクは使わないこと
実使用領域
未使用領域
固定
可変
元の領域差分差分
差分
差分
指定領域に達するまで自動拡張
26
• 展開に関する考慮点(続き)
• VHDファイルを”単純複製”しないこと
• SID の重複
(..かといって ドメインコントローラーでの Sysprep は未サポート)
• USN(Update Sequence Number)ロールバック問題
• 起動しているドメインコントローラーを Export しないこと
詳細:http://technet.microsoft.com/en-us/library/
virtual_active_directory_domain_controller_virtualization_hyperv(v=ws.10).aspx
27
重要な 4 つの ID
• USN(Update Sequence Number)• オブジェクトが追加、変更、削除されるたびに+1• ドメインコントローラー個々に管理されている
• RID (Relative Identifier)• DC 内オブジェクトの通番.• SID の構成要素• RID Master の RID Pool によって集中管理されている
• Invocation(発動,召喚) ID• DIT のバージョン管理に使用される• Get-ADDomainController で参照可能
• GUID(Globally Unique IDentifier)• サーバー内オブジェクトのID• 恒久的
28
USN とは• Update Sequence Number• オブジェクトを変更、作成、するごとに +1 • ドメインコントローラーごとに管理されている• ドメインコントローラー間でどこまで複製が完了したかを確認するための番号• ドメインコントローラーに変更が加えられるたびに加算される
DC1 DC2
USN_DC2 = 100 USN_DC1 = 200
My USN=200 My USN=100複製
DIT DITDC1からはUSN=200まで複製完了したということ
HighWatermark
29
複製の基本動作:High Watermark をベースにした差分複製
DC1 DC2
USN_DC1 = 200My USN=200
DIT DIT
複製リクエスト
複製無し
DC1 DC2
USN_DC1 = 200My USN=250
DIT DIT
複製リクエスト
USN=201~250
ユーザー追加50人
250
HWM
30
USN ロールバック問題
DC1 DC2
USN_DC1 = 250My USN=250
DIT DIT
DC1
My USN=200
DIT
DC2
USN_DC1 = 250
DIT
複製リクエスト
複製無し
なんらかの原因でロールバック
31
DC1
My USN=250
DIT
DC2
USN_DC1 = 250
DIT
複製リクエスト
複製無し
ユーザー追加50人
DC1
My USN=260
DIT
DC2
USN_DC1 = 250
DIT
複製リクエスト
USN=251~260
ユーザー追加10人
260
32
USN ロールバックの検知
• 「USN がロールバック」だけが発生すると、複製は停止する• Windows Server Backup から古い DIT をリストアした場合• 古い VHD ファイルをリストアした場合• 古い Export ファイルをインポートした場合
Event ID 2103:Active Directory データベースがサポートされていない方法で復元されました。Active Directory はこの状態が継続している間、ユーザーのログオンを処理できません。
33
Invocation ID
• Invocation ID:ディレクトリデータベース(NTDS.DIT)のID• DITのバージョン識別子として扱われる
DITInvocation ID
34
USN ロールバック問題を回避するにはInvocation ID をリセット(変更)する必要がある
USN = 1000InvocationID = A
DC1 が把握している DC1(自分自身)の状態
DC2 が把握しているDC1 の状態
DC1(A)@USN1000
USN = 500InvocationID = B
DC1(A)@USN1000DC1(B)@USN500
頭から複製
USN = 600InvocationID = B
DIT変更(USN変更)
DC1(A)@USN1000DC1(B)@USN600
差分複製
USNロールバック
35
旧バージョンでのスナップショットによるUSNロールバック
TIME: T2
TIME: T4
Create
Snapshot
T1 Snapshot
Applied!
USN: 100
+150 more users created
DC2 receives updates: USNs >200
USN: 200
ID: A RID Pool: 600- 1000
+100 users added
DC2 receives updates: USNs >100
• USN rollback はDC2に反映されない→50ユーザーが複製されてしまう
• All others are either on one or the other DC
• 100 ユーザー(RID = 500 - 599)は SID競合
スナップショットをリストアした場合にはロールバックが検知されない
36
Windows Server 2012 では
Hyper-V ホストで VM-Generation ID を管理している
• ユニークな 128 ビットの ID
• 専用ドライバーによりゲストOSに通知できるようになっている
WS 2012 仮想 DC は VM-Generation ID をトラックする
• Active Directory database (DIT) に保存
• DIT への変更をコミットする前に、
• “DIT内部の VM-Generation ID” と “ホストが認識している VM-Generation ID” を比較
• 異なれば DCの invocation ID と RID pool をリセットしてから、コミット
同じ操作を、起動時に実行する
37
仮想 Domain Controller
Invocation ID
VM-Gen ID
DIT
Hyper-V ホスト
VM-Gen ID
比較
38
Windows Server 2012 ではこうなっている
Tim
eli
ne o
f even
ts
TIME: T2
TIME: T3
TIME: T4
Create
Snapshot
T1 Snapshot
Applied!
USN: 100
ID: A savedVMGID: G1
USN: 100
ID: A
USN: 101-250
ID: B
+150 users created: VM generation ID の差異が発生
DC1(A)@USN = 200
USN: 200
ID: A
+100 users added
DC2 receives updates: USNs >100
DC
1
DC
2
TIME: T1VMGID: G1
savedVMGID: G1 VMGID: G1
savedVMGID: G1 VMGID: G2
savedVMGID: G2 VMGID: G2
DC2 again accepts updates: USNs >100
USN re-use avoided and USN rollback PREVENTED : all 250 users converge correctly across both DCs
DC1(A)@USN = 200
DC1(B)@USN = 250
… missing users replicate
back to DC1
39
結局のところ...
以下の用途には使えないので注意「作成したユーザーを削除したい」「変更したユーザーの属性を元に戻したい」
• Authoritative Restore を使用しましょう• または Forefront Identity Manager を使用し、メタデータで管理しましょう
消してしまったユーザーを復元するには「ゴミ箱」を使いましょう
Recommended