More Related Content Similar to 仮想化した DC を PowerShell で複製する Similar to 仮想化した DC を PowerShell で複製する (20) More from junichi anno (16) 仮想化した DC を PowerShell で複製する2. DC 仮想化のメリット
• スケーラビリティ
• 物理 PC がなくても展開可能
• サーバーのロールバック(スナップショット)
• 自動展開のしやすさ
• パブリックウラウドへの移行
• 仮想 DC を IaaS に展開
2
3. 仮想 DC の展開
• サーバーマネージャーを使用して
• Windows PowerShell を使用して
• VHDファイルを所定の手続きでクローン
いずれの処理もリモートから行える
3
5. 仮想 DC のクローン手順
1. ソース DC で FSMO が起動していないことを確認。起動してい
る場合には他の DC に移動。
2. ソース DC をクローン可能な DC として認可する
3. 非互換アプリを調査し CustomDCCloneAllowList.xml を生成
4. 複製先情報を記載した DcCloneConfig.xml ファイルを作成
5. ソース DC をシャットダウン
6. ソース DC を Export
7. ソースを起動
8. Exportしたイメージを新しい仮想マシンとして Import
9. 複製先マシンを起動( DC 間複製が開始される)
5
6. $SourceDC = "ITCAMP-DC02"
$DistDC = "ITCAMP-DC03"
DCクローンを自動化するスクリプト例
$distPDCEmu = "ITCAMP-DC01"
$SourceHyperVHost = "ITCAMP-FS" DC01 DC02 複製 DC03
$DistHyperVHost = "ITCAMP-FS"
ここから
$VMStore = "¥¥$DistHyperVHost¥VMStore"
コマンドを実行 ITCAMP-FS
step1 $ConfirmPreference = "none"
Move-ADDirectoryServerOperationMasterRole -Identity $distPDCEmu -OperationMasterRole PDCEmulator
step2 Get-ADComputer $SourceDC | %{Add-ADGroupMember -Identity "Cloneable Domain Controllers" -Members $_.samAccountName}
step3 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" `
step4 -IPv4DefaultGateway "192.168.210.254" `
-CloneComputerName "$Args" `
-SiteName "Default-First-Site-Name" } `
-ArgumentList $DistDC
step5 Stop-VM -ComputerName $SourceHyperVHost -Name $SourceDC
step6 Get-VM -ComputerName $SourceHyperVHost -Name $SourceDC | %{ Export-VM $_ -Path $VMStore}
step7 Start-VM -ComputerName $SourceHyperVHost -Name $SourceDC
$CFG = (Dir "$VMStore¥$SourceDC¥Virtual Machines¥*.xml").FullName
step8 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
step9 Start-VM -ComputerName $DistHyperVHost -Name $DistDC
6
9. Step3.非互換アプリを調査し CustomDCCloneAllowList.xml を生成
Invoke-Command -ComputerName $SourceDC -ScriptBlock { Get-
ADDCCloningExcludedApplicationList -GenerateXml -Force }
コマンドレットを実行することで、
C:¥Windows¥NTDS¥CustomDCCloneAllowList.xml ファイルが作成される
<AllowList> </Allow>
<Allow> <Allow>
<Name>Active Directory Management Pack Helper <Name>HealthService</Name>
Object</Name> <Type>Service</Type>
<Type>Program</Type> </Allow>
</Allow> <Allow>
<Allow> <Name>QWAVE</Name>
<Name>System Center Operations Manager 2012 <Type>Service</Type>
Agent</Name> </Allow>
<Type>Program</Type> <Allow>
</Allow> <Name>System Center Management APM</Name>
<Allow> <Type>Service</Type>
<Name>Microsoft Silverlight</Name> </Allow>
<Type>WoW64Program</Type> <Allow>
</Allow> <Name>wlidsvc</Name>
<Allow> <Type>Service</Type>
<Name>AdtAgent</Name> </Allow>
<Type>Service</Type> </AllowList> 9
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
すでに作成されていると上書きでいないので注意
10
11. DcCloneConfig.xml の例
<?xml version="1.0"?> <DNSResolver></DNSResolver>
<d3c:DCCloneConfig <DNSResolver></DNSResolver>
xmlns:d3c="uri:microsoft.com:schemas:DCCloneConfig"> <DNSResolver></DNSResolver>
<ComputerName>ITCAMP-DC03</ComputerName> </StaticSettings>
<SiteName>Default-First-Site-Name</SiteName> </IPv6Settings>
<IPSettings> </IPSettings>
<IPv4Settings> </d3c:DCCloneConfig
<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>
11
12. Step 5:ソース DC をシャットダウン
Stop-VM -ComputerName $SourceHyperVHost -Name $SourceDC
12
13. Step 6:ソース DC を Export
Get-VM -ComputerName $SourceHyperVHost `
-Name $SourceDC | %{ Export-VM $_ -Path $VMStore}
13
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
重要!!インプレースインポート
はできない!
15
17. 仮想 DC 展開の留意点
• 単一障害点にならないこと
少なくとも2台のHyper-V サーバーに1台づつ展開
V-DC V-DC V-DC V-DC
Hyper-V Hyper-V Hyper-V
1つのハードウェアの障害が複数のDCに影響を与えないようにすること
できるだけ物理的に異なるリージョンに配置すること
可能であれば、少なくとも1台は物理 DC を構築しておくこと
17
18. • セキュリティ上の考慮点
• できるだけ DC のみの単一機能のサーバーとし、ホスト、ゲストともに
Server Core を採用すること
V-DC
(Server Core)
Hyper-V
(Server Core)
• 必要に応じて RODC を検討すること
• VHDファイルの安全性に考慮すること
• VHDファイルが含まれるドライブごと暗号化することをお勧め
18
23. • セキュリティ上の考慮点(つづき)
• ホストコンピューターは死守すること
• 可能であればホストコンピューターは管理用ネットワークのみと通
信を行うように設定されていること
• ホストコンピューターはゲストであるDCのドメインに所属させない
Sysvol 共有に 1 V-DC V-DC 3
アタック
Hyper-V
(domain member)
DC からスタート
アップスクリプトを
送り込む 2
23
24. • パフォーマンスの考慮点
• Windows Server 2008 の場合約10%の性能減
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%
Adtest.exe 使用 http://www.microsoft.com/en-us/download/details.aspx?id=15275
24
25. • 展開に関する考慮点
• 差分ディスクは使わないこと
固定
実使用 指定領域に達す
可変 未使用領域
領域 るまで自動拡張
差 差 差
差分 元の領域
分 分 分
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
26
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
• 恒久的
27
28. USN とは
• Update Sequence Number
• オブジェクトを変更、作成、するごとに +1
• ドメインコントローラーごとに管理されている
• ドメインコントローラー間でどこまで複製が完了したかを確認するための番号
• ドメインコントローラーに変更が加えられるたびに加算される
My USN=200
複製 My USN=100
USN_DC2 = 100 USN_DC1 = 200 High
Watermark
DIT DC1からは DIT
DC1 USN=200まで DC2
複製完了したと
いうこと
28
29. 複製の基本動作:
High Watermark をベースにした差分複製
HWM
My USN=200
複製リクエスト USN_DC1 = 200
複製無し
DIT DIT
DC1 DC2
ユーザー
追加
50人 My USN=250
複製リクエスト USN_DC1 = 200
USN=201~250 250
DIT DIT
DC1 DC2
29
30. USN ロールバック問題
My USN=250 USN_DC1 = 250
DIT DIT
DC1 DC2
なんらかの原因でロールバック
My USN=200 複製リクエスト USN_DC1 = 250
複製無し
DIT DIT
DC1 DC2
30
31. ユーザー
追加
50人 My USN=250 複製リクエスト USN_DC1 = 250
複製無し
DIT DIT
DC1 DC2
ユーザー
追加
10人 My USN=260 複製リクエスト USN_DC1 = 250
USN=251~260 260
DIT DIT
DC1 DC2
31
32. USN ロールバックの検知
• 「USN がロールバック」だけが発生すると、複製は停止する
• Windows Server Backup から古い DIT をリストアした場合
• 古い VHD ファイルをリストアした場合
• 古い Export ファイルをインポートした場合
Event ID 2103:Active Directory データベースがサポートされていな
い方法で復元されました。Active Directory はこの状態が継続している間、
ユーザーのログオンを処理できません。
32
33. Invocation ID
• Invocation ID:ディレクトリデータベース(NTDS.DIT)のID
• DITのバージョン識別子として扱われる
DIT
Invocation ID
33
34. USN ロールバック問題を回避するには
Invocation ID をリセット(変更)する必要がある
DC1 が把握している DC1 DC2 が把握している
(自分自身)の状態 DC1 の状態
USN = 1000
DC1(A)@USN1000
InvocationID = A
USNロールバック
USN = 500 DC1(A)@USN1000
頭から複製
InvocationID = B DC1(B)@USN500
DIT変更(USN変更)
USN = 600 DC1(A)@USN1000
差分複製
InvocationID = B DC1(B)@USN600
34
35. 旧バージョンでのスナップショットによるUSNロールバック
スナップショットをリストアした場合にはロールバックが検知されない
Create
Snapshot
• +100 users rollback
USN added はDC2に反映されない→50ユーザーが複製されてしまう
TIME: T2 • All others are either on one or the other DC
USN: 200
• 100 ユーザー(RID =600- 1000
ID: A RID Pool: 500 - 599)は SID 競合 USNs >100
DC2 receives updates:
T1 Snapshot USN: 100
Applied!
+150 more users created
TIME: T4
DC2 receives updates: USNs >200
35
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 をリセットしてから、コミット
同じ操作を、起動時に実行する
36
38. Windows Server 2012 ではこうなっている
DC2
DC1
Timeline of events
Create USN: 100
TIME: T1
Snapshot ID: A savedVMGID: G1 VMGID: G1
+100 users added
TIME: T2 USN: 200
ID: A savedVMGID: G1 VMGID: G1
DC1(A)@USN = 200
DC2 receives updates: USNs >100
T1 Snapshot USN: 100
TIME: T3
Applied! ID: A savedVMGID: G1 VMGID: G2
… missing users replicate
DC2 again accepts updates: USNs >100
+150 users created: VM generation ID の差異が発生 back to DC1
USN: 101-250
TIME: T4
ID: B savedVMGID: G2 VMGID: G2 DC1(A)@USN = 200
DC1(B)@USN = 250
USN re-use avoided and USN rollback PREVENTED : all 250 users converge correctly across both DCs
38
39. 結局のところ...
以下の用途には使えないので注意
「作成したユーザーを削除したい」
「変更したユーザーの属性を元に戻したい」
• Authoritative Restore を使用しましょう
• または Forefront Identity Manager を使用し、メタデータで管
理しましょう
消してしまったユーザーを復元するには「ゴミ箱」を使いましょう
39