2012年3月25日日曜日

Active Directory レプリケーションが片方向だけエラーになる場合の対応手順

レプリケーションエラーの対応メモ(主に自分用)。
はじめに。
ADはマルチマスタなので、各ドメインコントローラが互いに双方向にデータのレプリケーションを行う。
いま面倒を見ているシステムにて、「片方向は問題なくレプリケーションできるが、反対方向のレプリケーションがある日突然エラーになる」という現象が起きている。これまで何度もこの障害に見舞われており、正直見飽きたぐらい。
どんなエラー?
レプリケーション問題が起きているドメインコントローラを仮にDC1, DC2とする。
起きた現象は、DC1→DC2のレプリケーションは問題ないが、DC2→DC1のレプリケーションがエラーになるというもの。
Figure.1 片方向だけレプリケーションエラー
DC1でrepadmin /showreplを実行し、状況を確認すると

YYYY-MM-DD HH:MI:SS の最後の試行は、失敗しました。結果は 1396 (0x574):
    ログオン エラー: 対象のアカウント名は間違っています。
とか
******* 警告: エラーが発生したため、KCC はこのレプリカ リンクを追加できませんでした。

とかのエラーメッセージが表示される。
後者は、日本語でググっても全く情報が出てこないので、レアケースなのかもしれない(英語でKCC could not add this REPLICA LINK due to error.でググると、そこそこ情報が出てくる)。
解消手順
※前提:接続オブジェクト(レプリカリンク)は、知識整合性チェッカー(Knowledge Consistency Checker, KCC)で自動作成することとする。
※この例では、ドメイン名をhoge.comとする。

1. 
入力方向のレプリケーションがエラーとなっているドメインコントローラ(DC1)で、コマンドプロンプトにて
net stop kdc
を実行し、Kerberos Key Distribution Centerサービスを停止する。

2. 
"Active Directory サイトとサービス"を開く。「ドメインコントローラの変更」でDC1を選択する。
DC1のNTDS Settingsを開き、DC2の接続オブジェクトを削除する。
Figure.2 接続オブジェクトを削除

3. 
DC1からDC2に2.の結果をレプリケーションする。
任意のDCでコマンドプロンプトを起動し、下記2行のコマンドを実行。
repadmin /replicate dc2 dc1 dc=hoge,dc=com
repadmin /replicate dc2 dc1 cn=configuration,dc=hoge,dc=com

他にもドメインコントローラがある場合、全てのドメインコントローラに対してレプリケーションを行うことが望ましい。

4. 
DC1でコマンドプロンプトを管理者として起動し、
repadmin /kcc
を実行する。これにより、KCCが新しい接続オブジェクトを作成してくれる。

Figure.3 接続オブジェクトが再度自動生成された
5. 
DC1からDC2に2.の結果をレプリケーションする。
任意のDCでコマンドプロンプトを起動し、下記2行のコマンドを実行。
repadmin /replicate dc2 dc1 dc=hoge,dc=com
repadmin /replicate dc2 dc1 cn=configuration,dc=hoge,dc=com
他にもドメインコントローラがある場合、全てのドメインコントローラに対してレプリケーションを行うことが望ましい。

6. 
ここまでの手順で多分直ってるので、DC2→DC1のレプリケーションを試行。
repadmin /replicate dc1 dc2 dc=hoge,dc=com
処理に成功すればOK。
失敗したら、2.~5.をもう一度。

7. 
1.で停止したKerberos Key Distribution Centerサービスを起動するため、
net start kdc
を実行する。

0 コメント:

コメントを投稿