本文出自 “叶俊生” 博客,请务必保留此出处http://yejunsheng.blog.51cto.com/793131/175814

活动目录复制介绍: 什么是目录分区   什么是复制拓扑 自动产生复制拓扑   全局编录和分区复制
2003371
首先要安装Windows Server 2003安装光盘里面的SUPPORT--TOOLS--SUPTOOLS.MSI这个软件  通过开始--运行--输入adsiedit.msc按确定来打开ADSI EDit这个工具   展开Domain可以看到域分区里面的数据   展开OU=Domain Controller可以看到当前有二台域控制器  一台叫做DC1  另一台叫做DC2  展开Configuration可以看到配置分区里面的数据  按CN=Partitions可以看到有多少个分区  其中有二个特定的应用程序分区 展开CN=Sites可以看到有多少个站点 可以看到当前有二个站点  展开CN=Servers可以看到当前有多少台服务器   展开Schema可以看到架构分区里面的数据  里面存储了定义好的类Schema和属性Schema  它在整个森林里面进行复制的  配置分区也是在整个森林里面复制的  域分区是在同一个域之间的DC进行复制的 
2003372
展开域分区--按OU=人事部   在右边空白处右键--新建--按Object--按user--下一步  我在Value里面就输入b  接着下一步 按完成后就可以看到CN=b这个文件夹了 就是说已经创建了一个用户名叫做b的用户了  你打开Active Directory用户和计算机后  按人事部后也可以看到一个叫做b的用户了  
2003374
通过开始--程序--管理工具--选择Active Directory站点和服务   我提前创建了2个站点 它们分别叫做Site1 Site2  并且我已经把Default-First-Site-Name(默认站点)删除掉了  在站点内部进行复制  就是说A1 A2 A3它们都在一个站点内 逻辑上是在域内 它会以一个小时为周期去检查有没有遗漏的数据  按Site1  对着NTDS Site Settings右键--选择属性  按更改计划可以看到默认是一小时一次 就是说它会每隔一个小时去检查有没有遗漏的数据需要复制的 而不是说AD每隔一个小时复制一次的  AD复制默认是以拉的方式或者更改通知的方式 我通知你 我这边有数据更新了 你来跟我拿 你跟我做复制更新 我把数据传给你 你再把我传给你的数据写到你的数据库里面
2003377
现在可以看到有二个站点 有二台DC  是同一个域的两台DC  逻辑上只有一个域两台DC  物理上有两个站点分别位于不同的子网  DC1放在Site1里面 在192.168.1.0/24这个子网里面   DC2放在Site2里面  在192.168.2.0/24这个子网里面    
2003376
我现在来到DC2这台计算机 它是在192.168.2.0/24这个子网里面 在命令提示符里面输入ipconfig /all按回车键  可以看到它的IP地址为192.168.2.2 默认网关为192.168.2.254 我来ping 192.168.1.2一下  为什么也能ping通呢?  因为我有一台Windows Server 2003用二块网卡做成路由器  第一块网卡的IP地址为192.168.1.254  第二块网卡的IP地址为192.168.2.254  你可以通过看那个TTL值就知道中间经过一个路由器了 现在那个TTL值为127 因为默认情况下那个TTL值是128  每经过一个路由器TTL值就减1  所以可以知道这两台DC之间是通过路由器来进行通讯的   但是这样就能够保证这二台DC能够进行复制吗?不是的  这二台DC之间要想直接复制的话 必需有一个自动生成的连接对象才可以
2003378
展开Site1--按NTDS Settings后可以看到一个自动生成的连接对象  如果这两台DC之间不能够产生自动生成的连接对象的话  那么这两台DC之间是不能够直接复制的    比如我手动来复制一下 如果是同一个站点内会通过更改通知复制的  对着自动生成的连接对象右键--选择立即复制副本  可以看到现在可以立即复制了  没有任何问题  那么这个连接对象是怎么产生的呢?可以看到它是自动生成的 说明不是我创建的  那是谁创建的呢?那是由DC1上面所运行的KCC这个静象去动态地创建了到DC2的连接对象 
2003379
如果你的企业里面有多台DC 你不想让DC1和DC7之间做间接复制 你希望DC1和DC7之间能够直接复制怎么办呢? 按DC1对着NTDS Settings右键--选择新建Active Directory连接  在服务器名里面按DC7  按确定  然后对着DC7右键--选择立即复制副本就ok了 你可以手动创建到其他DC的连接对象  这样有什么好处呢? 比如DC8已经损坏了 这个时候我可以马上创建DC1到DC7的连接对象
2003382
我现在来到客户端 在命令提示符里面输入ipconfig /all按回车键后可以看到这台计算机的IP地址为192.168.2.3  可以知道它是在192.168.2.0这个子网里面 这个时候它就会去找离它最近的DC登录了  通过开始--运行--输入regedit按确定打开注册表编辑器  找到注册表编辑器下面那个路径  双击DynamicSiteName这个键值  在数值数据里面可以看到Site2 这个时候它就会问Site2里面yejunsheng.com这个域里面的DC是谁 它就会找一个离它最近的DC登录了 因为DC2的IP地址为192.168.2.2也是在192.168.2.0这个子网里面 并且它们都是属于Site2这个站点  所以这台客户机就去找DC2登录了  在命令提示符里面输入nslookup按回车键  可以看到当前默认DNS服务器是dc1.yejunsheng.com  IP地址为192.168.1.2   输入yejunsheng.com按回车键后可以看到192.168.2.2在前面 而192.168.1.2在后面  通过看这个也知道当前该客户端登录yejunsheng.com这个域是去找DC2登录的 
2003383                                                   我现在来到DC1这台域控制器 并且它是一台DNS服务器 在命令提示符里面输入nslookup按回车键  输入yejunsheng.com按回车键可以看到192.168.1.2这个IP地址在前面而192.168.2.2这个IP地址在后面
2003385
   如果没有站点链接 Site1和Site2之间是没办法复制的  要想它们能够进行复制就新建一个站点链接  展开Inter-Site Transports 对着IP右键--选择新站点链接  名称就叫做Site1-Site2吧   在此站点链接中的站点里面按Ctrl键把Site1和Site2全选定  按确定就ok了 这个时候Site1和Site2之间就能够进行复制了 
2003386
我现在把DC1里面自动生成的对象删除掉 这个时候KCC在运行时它检测到Site1和Site2之间有站点链接的话 现在DC1和DC2之间还没有产生自动生成的对象 它会自动产生自动生成对象的 我们也可以手动出发强制DC上的KCC 对着NTDS Settings右键--选择所有任务--按检查复制拓扑  看到了吗?DC1里面的自动生成的对象又回来了  注意:如果你把Site1和Site2之间的站点链接删除掉了  并且把它们自动生成的对象删除掉了  这个时候按检查复制拓扑是没有用的了   不能产生自动生成的对象了 就是说要让它产生自动生成的对象一定有站点链接存在 
复制协议:RPC:可以用于站点内复制也可以用于站点之间复制    SMTP:它只能作为站点之间的复制 并且它不能用于同一个域内的DC复制 它可以用于不同域之间复制的  一般情况下我们都会考虑用IP协议  什么时候用SMTP协议呢?当我跟对方物理链接不通的时候可以用邮件传输 那么这个时候我们可以用SMTP协议  换句话说SMTP在复制的时候 它只能够复制架构分区和配置分区的数据
2003392
是不是站点之间有站点链接就可以开始复制了呢?不是的  每一个站点都要推选出一台服务器来首先参与站点之间的复制 然后站点之间的复制再推选出两台服务器之间完成之后再去做站点内部的复制  现在站点1和站点2有站点链接了  Site1和Site2之间可以进行复制了  我指的是站点之间的复制 不是DC和DC之间的复制  但是Site1和Site2之间的复制必需有一个代表吧  比如说Site1推选DC1来复制  Site2推选DC2来复制  我们之间复制完成了  接下来在Site内部以拉的方式解决  作为某一个站点一个代表者我们通常叫做桥头堡服务器桥头堡服务器它默认是由站点间拓扑生成器推选出来的   展开Site1--Servers--对着NTDS Settings右键--选择属性可以看到Site1的拓扑生成器是DC1   每一个站点的拓扑生成器就会自动去推选出一台桥头堡服务器  推选出一台桥头堡服务器之后再运行桥头堡服务器上的KCC建立到其他站点桥头堡服务器的链接对象  如果你不想让它自动推选桥头堡服务器  也可以手动推选桥头堡服务器  比如我对着DC1右键--选择属性   添加协议   按IP按添加  按确定  这个时候DC1就成为桥头堡服务器了  DC1和DC2之间用什么协议复制是可以更改的  对着自动生成对象右键--选择属性  在传输里面可以看到IP  RPC  SMTP这三种协议  一般情况下我们都保持默认值 不需要更改它
2003393
在Active Directory站点和服务里面对着IP右键--选择属性   在常规里面可以看到沟上为所有站点链接搭桥  什么意思呢?这个沟打上就是去启用了站点链接的传递性  换句话说 DC1和DC3是可以复制的  通过DC2来复制  我们根本不需要手动去创建站点A和站点C之间的站点链接桥 假设有A B C吧 有AB的站点链接 BC的站点链接 我们不需要再创建链接桥ABC或者创建一个AC的站点链接了 默认有一个站点链接的传递性
复制冲突机制:属性冲突  相同名字冲突  移动对象至被删除的OU冲突
2003394
我现在来到DC1这台域控制器 打开Active Directory用户和计算机 对着alice右键--选择属性  按电话  在家庭电话里面输入123 按确定  AD在复制的时候复制的是属性 当一个属性里面有多个值的话  在Windows 2003里面只复制一个单一的值
2003395
我现在来到DC2这台域控制器  对着alice右键--选择属性  按电话 在家庭电话里面输入456  按确定   复制结果会是什么呢?
2003396
    我现在来到DC1这台域控制器  在命令提示符里面输入repadmin /showmeta cn=alice,ou=yejunsheng,dc=yejunsheng,dc=com  按回车键   可以看到homePhone的版本号是1   时间是2008-04-21 13:54:22   如果在DC2那台域控制器的homePhone版本号是2的话 最终复制的结果  可知电话号码肯定是456  因为DC2的版本号比DC1的版本号高  如果版本号是一致的  它就会看时间 那台域控制器的时间晚就生效 
2003397
我现在来到DC2这台域控制器   在命令提示符里面输入repadmin /showmeta cn=alice,ou=yejunsheng,dc=yejunsheng,dc=com按回车键   可以看到homePhone的版本号是2  并且时间是2008-04-21  14:11:10 比DC1的时间晚  这个时候可以知道两台域控制器最终复制的电话号码肯定是456了 
2003398
看到了吗?  现在DC1这台域控制器里面的alice这个用户属性里面家庭电话变成456了  刚才我输入的是123   但是我要说明一下 在Windows Server 2003里面首先要检查一个元素 是这个属性更新的次数  比如说我现在把DC1上的电话号码改成789了 那最终结果将会是789  它会先考虑变化的次数  再去考虑时间  简单说一句话谁最后写的电话号码谁就赢  如果DC1是最后写的就是DC1赢 如果DC2是最后写的就是DC2赢
2003399
我首先在DC1那台域控制器里面新建一个叫做a的OU  然后让DC1和DC2之间复制一下  我就把DC1里面的a这个OU删除掉  这个时候DC2还没有知道  DC2里面还是有a这个OU  然后我把alice这个用户拖曳到a这个OU里面 
2003400
我现在来到DC1这台域控制器   按F5键刷新了  还是看不到a这个OU并且也看不到alice这个用户   注意:实际上是可以看到alice这个用户的  在Active Directory用户和计算机里面按查看--选择高级功能   就可以看到一个叫做LostAndFound的OU  你按一下这个OU就可以看到alice这个用户了
repadmin工具:使用repadmin工具可以查看和手工创建复制拓扑  强制DC之间复制   查看复制的元数据  dcdiag工具:使用dcdiag工具可以分析DC的状态并且报告问题  执行一系列测试来确认系统各方面有没有问题