Active Directory数据库复制原理

简介:

前面的博文中和大家聊了很多关于域的话题,比如说额外预控、域的恢复等,但是大家可否知道我们上面说的这些都是靠两个域之间的数据库相互复制实现的,那么域之间的数据究竟是如何复制的呢,下面我们就来聊聊域数据库的复制原理:

在聊之前我们首先要知道一下几个关键问题:

1、域数据库存放的位置:c:\\windows\ntdsntds.dit

2、站点:一组高速且可靠连接的计算机称为站点

域的复制分为以下两种模式:

1、多主机复制模式:一台域控制器内的数据库发上变化,会通知其他域控制器进行同步。(15s同步一次)

2、紧急数据:会立即同步到PDC主机。

 

数据库复制遵循以下原理:

当域控中的控制器数量发生变化,例如增加或减少域控制器上的进程,KCC就会进行Active Directory复制括扑的计算。KCC被翻译成知识一致性验证器,我们在任务管理器的进程列表中看不到KCC,因为它属于LSACC进程的一部分,KCC可以自动计算出域控制器进行计算时所有的括扑,当域控制器数量减少时,KCC倾向于在域中使用环形括扑进行Active Directory进行复制。也就是说,当一个域控制器的Active Directory内容发生变化时,这个更改不会同时传递给其他域控制器,而是要沿着KCC设计的环形括扑一一传递下去。而且为了实现冗余以及为了提高效率,KCC设计的括扑还是双环括扑。下图(图一)就是一个域控制器的括扑示意图,从图中可以看到,每个域控制器都有两个复制伙伴,Active Directory的复制沿着顺时针和逆时针两个方向进行。

image

                                                                  图一

域的数据库复制遵循以下规则:

1、对象属性:对象的修改次数即版本号(属性从1开始)

2、修改时间:在不同的DC上对对象修改的时间。(靠后优先)

3、修改对象的DC的GUID:对比GUID号大小。(谁大谁优先)

OK,说了这么多文字性的东西详细许多朋友看的都困了,下面我们就通过一个小实验来为大家说明一下:

server01、server02是一个域控的故障转移群就,我们在server01上新建用户,然后利用我们前面说的windows server backup 工具对其进行 系统备份,然后删除用户,在利用我们所备份的数据对其进行恢复,请问所删除用户能还原成功吗?

实验准备:

1、两台windows server 2012的服务器

2、两台服务器做成故障转移群集

3、安装windows server backup

具备上述条件以后我们开始实验:

首先我们打开server01的服务器管理器:

image

点击工具:

image

点击Active Directory用户和计算机:

image

鼠标右键我们的域名:

image

点击新建:

image

点击组织单位:

image

输入我们要新建的组织单位名称,在这里我输入text,点击确定:

image

鼠标右键我们新建的text:

image

点击新建:

image

点击用户:

image

在这里我新建用户tom,点击下一步:

image

输入用户密码,点击确定:

image

新建用户完成,我们打开另一台域控的用户和计算机:

image

可以看到,此域控也有TOM用户。

ok,下面我们开始对server01的域控进行备份:

打开server01的服务器管理器:

image

点击工具:

image

点击windows server backup:

image

点击本地备份:

image

点击一次性备份:

image

系统弹出备份向导,我们保持默认点击下一步:

image

注意,这里要选择自定义,点击下一步:

image

点击添加项目:

image

这里我们勾选系统状态,点击确定:

image

点击下一步:

image

系统询问我们备份位置,我们选择本地磁盘,点击下一步:

image

可以看到系统已经自动读取出我们的E盘了,点击下一步:

image

点击备份:

image

备份开始,我们等待备份结束:

image

OK,备份完成,点击关闭。

下面我们删除tom这个用户:

打开服务器管理器:

image

点击工具:

image

点击用户和计算机:

image

鼠标右键TOM:

image

点击删除:

image

点击是:

image

OK!可以看到TOM用户已经被删除!

下面我们利用我们刚刚备份的对其进行恢复:

重新启动计算机,在计算机开机时按F8,进入安全模式:

image

这里我们选择进入目录修复模式:

image

我们以本地管理员身份登陆:

image

点击管理----windows server backup:

image

点击本地备份:

image

点击恢复:

image

注意这里勾选此服务器点击下一步:

image

这里可以看到我们要恢复的信息,点击下一步:

image

注意这里勾选系统状态,点击下一步:

image

这里勾选原始位置,点击下一步:

image

点击确定:

image

点击恢复:

image

点击是:

image

OK系统开始恢复,我们稍等片刻:

image

恢复完成,系统提示我们重新启动,我们点击 重新启动

image

重启完成,系统提示我们按回车键继续,我们按下回车键:

image

进入桌面后系统给我们弹出服务器管理器,我们点击工具:

image

点击用户和计算机:

image

OK,进来之后我们发现我们所要恢复的用户TOM并没有成功恢复,这究竟是为什么呢?

如果仔细阅读刚开始我所说的东西的朋友一定会明白其实这是因为数据库复制遵循对象属性这个规则,我在备份时tom这个用户的版本号小许我删除时候的版本号,所以我在还原时候的版本号自然也就小于我删除时候的版本号,所以对象还原不成功。但是有些情况下这个对象是必须要还原成功的,那么我们就应该使用如下办法:

必须进行授权还原,手动增大对象的属性。具体操作如下:

重新启动系统,在开机时按F8进入安全模式:

image

这里我们选择进入目录修复模式:

image

我们以本地管理员身份登陆:

image

点击管理----windows server backup:

image

点击本地备份:

image

点击恢复:

image

注意这里勾选此服务器点击下一步:

image

这里可以看到我们要恢复的信息,点击下一步:

image

注意这里勾选系统状态,点击下一步:

image

这里注意一定要勾选对Active Directory文件执行授权还原,然后点击下一步:

image

点击确定:

image

点击恢复:

image

点击是:

image

开始恢复,我们等其恢复完成:

image

OK,回复完成,注意这里我们先不重启,在这里我们同时按下WIN+R:

image

输入cmd:

image

这里我们输入增大属性命令:ntdsutil,然后敲回车:

image

然后我们输入activate instance ntds,敲回车:

image

然后我们输入授权还原命令:authoritative restore,敲回车:

image

然后我们输入:restore object cn=tom,ou=text,dc=abc,dc=com,敲回车:

image

系统问我们是否确定进行授权还原,我们点击是:

image

OK,这里可以看到我们的版本号已经被增大到100000。现在我们点击重新启动:

开机之后打开服务器管理器:

image

点击工具:

image

点击用户和计算机:

image

我们可以看到,用户tom已经被成功恢复。

OK,到这里我们的实验就已经完成了,如果有不懂得朋友可以提问。



本文转自wuyvzhang 51CTO博客,原文链接:http://blog.51cto.com/wuyvzhang/1635896,如需转载请自行联系原作者


相关文章
|
3月前
|
算法 关系型数据库 MySQL
【MySQL 解析】数据库的乐观锁和悲观锁实现原理
【1月更文挑战第11天】【MySQL 解析】数据库的乐观锁和悲观锁实现原理
|
3月前
|
NoSQL 中间件 API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(下)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
80 2
|
3月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)(上)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
71 0
|
4月前
|
druid 网络协议 Java
再有人问你数据库连接池的原理,这篇文章甩给他!
在 Spring Boot 项目中,数据库连接池已经成为标配,然而,我曾经遇到过不少连接池异常导致业务错误的事故。很多经验丰富的工程师也可能不小心在这方面出现问题。 在这篇文章中,我们将探讨数据库连接池,深入解析其实现机制,以便更好地理解和规避潜在的风险。
|
1月前
|
缓存 Java 数据库连接
mybatis 数据库缓存的原理
MyBatis 是一个流行的 Java 持久层框架,它封装了 JDBC,使数据库交互变得更简单、直观。MyBatis 支持两级缓存:一级缓存(Local Cache)和二级缓存(Global Cache),通过这两级缓存可以有效地减少数据库的访问次数,提高应用性能。
282 1
|
2月前
|
存储 关系型数据库 数据库
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
数据库索引的原理,为什么要用 B+树,为什么不用二叉树?
|
2月前
|
NoSQL Java API
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
分布式锁【数据库乐观锁实现的分布式锁、Zookeeper分布式锁原理、Redis实现的分布式锁】(三)-全面详解(学习总结---从入门到深化)
298 0
|
3月前
|
存储 传感器 数据挖掘
请解释一下时序数据库的工作原理,并提供一个使用时序数据库的实际应用场景。
请解释一下时序数据库的工作原理,并提供一个使用时序数据库的实际应用场景。
180 0
|
3月前
|
存储 数据采集 搜索推荐
请解释一下搜索引擎数据库的工作原理,并提供一个使用搜索引擎数据库的实际应用场景。
请解释一下搜索引擎数据库的工作原理,并提供一个使用搜索引擎数据库的实际应用场景。
22 0
|
3月前
|
存储 算法 搜索推荐
请解释一下图形存储数据库的工作原理,并提供一个使用图形存储数据库的实际应用场景。
请解释一下图形存储数据库的工作原理,并提供一个使用图形存储数据库的实际应用场景。
50 0