利用SQL SERVER 2005数据库镜像实现可用性分析

我们首先来看一下什么是数据镜像:

现在几乎所有的应用系统都是基于数据库的,那么数据库的负荷是比较大的,在一天24小时中,任何时间都有可能会有数据要保存到数据库,或是从数据库中读出数据。任意时刻都会有用户连接到我们的数据库服务器上,几十,几百甚至成千上万个用户来连接使用我们的数据库,那么不论是计划内的宕机还是计划外的故障都会造成一定的损失。给我们的用户或是企业带很大的损失,特别是随着数据时代的到来,用户对数据的使用提出了更高的要求,那么作为一个DBA,就要想怎么做才能将这个损失减少到最低,正是因为基于这种需求,数据库镜像技术出现了!SQL SERVER2005中首次提出了数据库镜像概念。特点:

基于软件的高可用性解决方案 那是完全基于软件的高可用性解决方案。不需要增加硬件成本,也就是低硬件成本

快速的故障转移恢复, 最主要的一个亮点,就是快速的故障转移恢复。3秒(对于用户或是DBA是特别有吸引力的) 数据量大的情况一般10秒.

在这个数据库镜像技术中有一个数据库服务器我们称为主数据库。它负责用户的连接和数据的处理。还有一个是从服务器,确切来说,这里应该叫镜像服务器,上面也有一个数据库,叫镜像数据库,这个数据库用于存放我们主数据库的一个热备份。也就是说它虽然不连接用户机,但是它对于主服务器上的数据更改呀,变化呀,都能做一个热备份,也就是说如果用户更新了主数据库中的内容,那么主数据库会根据镜像技术将更新传送给镜像服务器,这样就能保证主服务器和从服务器之间的数据是一致的,那么假如说由于某种原因,我们的主服务器或是主数据库不可用了,例如,网络中断,系统故障等等,那么客户端会重新定向到镜像服务器,那么客户端仍然能读取数据,写入数据,他感觉不到主数据库服务已经宕机了。所以采用数据库镜像技术以后,对于用户来说这个可用性就增强了,而且对于故障恢复时间也缩短了。那么客户仍然可以向镜像数据库上写数据。读数据,更新相关的事务,这是我们应用数据库镜像的一个过程。 想实现这个过程,必须要涉及到这么几个角色:

数据库镜像中的服务器角色:这几个角色刚才通过图形介绍了一点,那么在2005中有三种服务器角色,分别是

主体服务器:承载主体数据库

接受用户连接和事务处理请求 也就是说主体服务器正常的情况下就是主体服务器来提供服务

镜像服务器:承载镜像数据库

作为主体数据库的执备份 所谓热备份是说,主体数据库上的变化会立即反应硬驱镜像数据库上。

仅在故障转移后接受用户连接,处理事务请求

见证服务器:监视服务器状态和连接性,实现自动故障转移 也就是说见证服务器会时刻监视两个服务器的状态和连接性,当主体服务器发生宕机或者不可用以后,见证服务器会立即启用故障转移,将镜像服务器切换为主体服务器。继续为用户提供服务器

这是数据库镜像中的三个服务器角色,但是要注意一下就是这三个角色不是固定下来的,是可以变化的:

主体数据库和镜像数据库互为伙伴:

主体和镜像是可以相互转换的

故障转移后伙伴角色发生变化

当主体服务器正常的情况下,用户所有的连接及数据的更新都是直接送到主体服务器的,只不过是主体服务器再将数据备份到镜像服务器上,但是主体服务器不可用时,此时角色就发生了改变。镜像服务器就变成了主体服务器。那么如果原来的主体服务器恢复正常了,那么怎么办,它就会成为镜像服务器。所以它们的角色就彻底变化了。那如果这个服务器又不可用了。那么又是一个转换的过程。

那大家可能又要问一个问题就是这三个角色怎么知道到底哪一个可用,哪一个不可用:

各个服务器实例通过PING交换消息相互监视。与DOS命令的PING原理差不多,但是功能比DOS下的PING要强大的多,DOS下的PING只是检查网络的连通性,而此处的PING即要监视网络的连通性,这是第一步,还要监视数据库服务器实例的运行情况,服务器是否是正常的,还有就是这个服务器上的数据库是否正常。

总结一下数据库镜像工作过程:

正常情况下,配置好数据库镜像以后,用户只能连接主体数据库,但此时镜像数据库是不可用的。用户连上去也没有用。用户只能使用主体服务器时,主体服务器会将数据一方面写到自己的数据库中,另一方面通过事务日志的方式传给镜像服务器,写到镜像服务器的数据库,此时主体服务器会进入一个等待状态。等待镜像服务器的确认,也就是当镜像服务器的数据成功写入到镜像数据库以后会发一个消息给主体数据库,说我现在已经完成了数据的更新了也就是在镜像服务器上执行了一个REDO的过程。这是一个确认。当主体服务器收到这个确认以后会给客户端一个回应,说刚才的那个数据更新的操作已经完成了

那么为什么能实现一个快速恢复机制,这主要和2005中的一个机制是分不开的

但SQL 2005不是没有必要等到回滚结束只要在REDO之后就可以使用了,至于UNDO的操作,在用户使用的过程中你再继续UNDO,所以当主体服务器发生数据更新了,镜像服务器会以最短的时候来时间更新,以至于如果主体数据发生故障了,镜像服务器右以在最短的时间内接替主服务器进行工作。

下面来介绍一下数据库镜像中的三种操作模式:

高可用性:最常用的。

高级别保护

高性能

下面咱们分别来看一下这三种模式,当然最主要的就是高可用性,这是使用比较广的一个模式

高可用性模式:

服务器角色: 主体服务器 镜像服务器 见证服务器

应用场景:

要求高可用性的场合 如股票交易 证券交易 银行等。

要求实现自动故障转移

确保数据的完整: 要求只要是用户提交到服务器上的数据,那怕说数据刚提交上主体服务器就发生故障了,也能保证数据不会丢失。故障转移之后的数据是不会丢失,从而保证数据库的完整性

高级别保护模式:

我们从名称上也能看出来,它的重点在于对数据的一种保护,而不是实现可用性

服务器角色: 主体服务器 镜像服务器

应用场景:

高的数据完整性要求

不要求自动故障转移

对服务的可用性要求较低 也就是说主体数据库的宕机还是可以接受的,但是数据的丢失是不可以接受的,那么这种场合可以使用高级别保护模式

因为没有见证服务器,所以是不能进行自动的故障转移的。那如果主体服务器不可用,那么想实现故障转移,只能是手工完成,所以对服务器的可用性要求较低

高性能模式:

服务器角色: 主体服务器 镜像服务器

应用场景:

主体服务器和镜像服务器距离很远的时候 十几公里或是完全两个城市

通讯链路有明显的延迟

对性能的要求高于数据的完整性

原理是:当主体服务器收到用户的操作后,将此事务传给镜像服务器,因此距离远所以有明显的延迟,所以他不会等镜像服务器的确认,也就是说它不管这个数据到底有没有写到镜像服务器,所以这种模式就在于尽快的响应用户的请求,也就是对用户对性能有一个较高的要求,这个要求是高于数据的完整性。

这种模式下会存在数据的丢失,也就是说如果主体服务器宕机了,我们会把镜像服务器作为主体服务器,但是不能保证这里面的数据就是和主体服务器上的数据是一致的,因为有可能会有丢失。

我们对几个概念简单的介绍一下:

事务安全性:

FULL 主体和镜像数据库同步传输的模式,

主体在发送日志后等待镜像的确认

主体和镜像的日志完全一致

OFF

主体和发送日志后不等待镜像的确认,继续处理后继的操作。

主体失败时在镜像上可能丢失部分数据

仲裁:在高可用性或是高级别保护模式下需要仲裁。以决定那一个服务器是主体服务器,

仲裁的改变将导致故障转移,如主体服务器发生故障了,则会发生仲裁的改变,将镜像服务器定为主体服务器。

形成仲裁的形式一般有这么几种:

下面我们就来看一下如何配置数据库镜像: 这应该是大家感觉很兴奋的,因为听我西里哗拉的讲了半天。终于不用再受罪了。其实配置很简单的,只要注意几个步骤就行了。

准备镜像数据库 在镜像服务器上准备镜像数据库

创建数据库镜像端点 在各个服务器上配置镜像端点

配置安全性

启动数据库镜像

下面我们就具体看一下如何去做,有哪些需要注意:

这里需要提到的一点的就是在SQL SERVER2005刚刚发布出来的时候数据库镜像这个服务默认是关闭的,也是不支持的。在刚刚发布SQL SERVER2005正式版本的时候,认为数据库镜像这个技术还不成熟,有待完善。所以如果你使用的是正式版本则无法使用这个技术。

那么需要下载SP1或是以上的补丁。


· 版本号


sql server 2005 版本


9.00.1399


sql server 2005(初始版本)


9.00.2047


sql server 2005 SP1


9.00.3042


sql server 2005 SP2

我们这里直接打SP2补丁:略

准备数据库:

条件 很重要:

主体数据库必须是完全恢复模式

创建镜像数据库

在主体数据库上做一个完全备份,在镜像服务器上使用NORECOVER选项恢复主体数据库。

继续恢复后续日志备份(NORECOVER) NORECOVER 很重要

配置数据库镜像端点 (ENDPOINT)

数据库镜像端点实现镜像会话的通讯,也就是各个服务器的入口点,有点类似于端口号。但不是。也就是说你创建了这个端点之后,各个服务器之间就可以使用TCP协议进行实例间的通讯。每个镜像端点上都在一个唯一的TCP端口号上侦听,一般大家都使用5022号端口。

创建数据库镜像端点:

需要在每个实例上创建

只有管理员组的成员才能权限。

设置端点角色 即有的是伙伴端点,有的是见证端点,所以必须要指定。

激活端点 默认是不能使用的,所以要激活。

下面我们看一下使用T-SQL 语句创建端点

CREATE ENDPOINT DBMIRRORING

AS TCP(LISTENER_PORT=5022)当然也可以使用其他端口,只要没有被使用

FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED) GO

-- 创建的是一个数据库镜像端点,角色是伙伴,通讯过程是通过加密的。

ALTER ENDPOINT DBMIRRORING STATE=STARTED GO --激活

此时这个端点就开始侦听了。

创建见证服务器的端点:创建的时候激活端点。

CREATE ENDPOINT DBMIRRORING

STATE=STARTED AS TCP(LISTENER_PORT=5022)

For DATABASE_MIRRORING (ROLE=WITNESS,ENCRYPTION=SUPPORTED)

配置安全性:

数据库镜像中的实例之间必须可信 都使用WINDOWS 身份验证或是基于证书的身份验证(非信任域),为了简单为例,我们使用WINDOWS身份验证。

赋予服务帐户对端点的连接权限。

在这里我们都使用相同的用户名口令

下面我们创建完端点后就要启动数据库镜像,注意顺序很重要

指定镜像数据库的伙伴 在镜像服务器上操作

指定主体数据库伙伴 在主体服务器上操作

指定见证服务器 在见证服务器上操作

指定事务安全选项 FULL 还是 OFF

对应语句分别是:

ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER1H:5022'

–-在SERVER2(镜像)上执行

ALTER DATABASE NOTHWIND SET PARTNER=N'TCP:/SERVER2:5022'

--在SERVER1(主体)上执行

ALTER DATABASE NOTHWIND SET WITNESS=N'TCP:/SERVER3:5022'

--在SERVER1(主体)上执行

ALTER DATABASE NOTHWIND SET SAFETY FULL;

--在SERVER1(主体)上执行 高可用性

当然也可以使用SMSS

那么完成之后怎么来查看数据库镜像是否完成,可以通过以下两种方法:

SMSS 数据库属性---镜像状态

T-SQL

SELECT * FROM SYS.DATABASE——MIRRORING

SELECT * FROM SYS.DATABASE——MIRRORING——WITNESS

下面我们具体看一下配置高可用性数据库镜像

我们使用T-SQL 可以很明显的看到配置的过程。

下面我来介绍一下我们所使用的环境:

SERVER1为主体服务器

SERVER2为镜像服务器

SERVER3 为见证服务器

首先我们要

准备数据库:一个是备份主体数据库,一个是在镜像服务器上恢复。

所以

在SERVE1上:

BACKUP DATABASE NORTHWIND TO DISK='C:\NW.BAK'

在 SERVER2上:

RESTORE DATABASE NORTHWIND FROM DISK='C:\NW.BAK' WITH NORECOVERY

创建数据库端点:

1. 在SERVER1上创建数据库镜像端点,用于伙伴通讯

Create endpoint dbmirrep as tcp (listener_port=5022)

For database_mirroring (role=partner,encryption=supported );

Alter endpoint dbmirrep state=started

通过图形界面可以查看到

2. 在SERVER2上创建数据库端点,也是用于伙伴通讯

Create endpoint dbmirrep as tcp (listener_port=5022)

For database_mirroring (role=partner,encryption=supported)

Alter endpoint dbmirrep state=started

3. 在SERVER3上创建镜像端点,用于见证通讯

CREATE ENDPOINT DBMIRREP AS TCP (LISTENER_PORT=5022)

FOR DATABASE_MIRRORING (role=witness,encryption=supported)

ALTER ENDPOINT DBMIRREP STATE=STARTED

4. 检查端点配置

SELECT * FROM SYS.DATABASE_MIRRORING_ENDPOINTS

也可以通过图形界面查看

配置数据库镜像安全性:也就是指定哪些用户可以使用这个端点。肯定是管理员,一般用户不让他访问。

分别执行:

Grant connect on endpoint::"dbmirrep" to "server1\dufei"

Grant connect on endpoint::"dbmirrep" to "server2\dufei"

Grant connect on endpoint::"dbmirrep" to "server3\dufei"

最后一个就是启动数据库镜像。注意:顺序 首先要从镜像服务上配置

在SERVER2上,指定伙伴端点:

ALTER DATABASE ITET SET PARTNER='TCP://SERVER1:5022'

在SERVER1上,指定伙伴端点:

ALTER DATABASE itet SET PARTNER='TCP://SERVER2:5022' –查看数据库

--到此为止,就是咱们前面所介绍的高级别保护模式。可以实现数据完整性,但是不能实现高可用性。所以还要继续,也就是说到这里为止,不要见证服务器也可以,但是不能实现故障的自动转移:

在 SERVER1上,指定见证服务器端点:

Alter database ITET set wiTness=N'TCP://SERVER3:5022'

设置数据库镜像事务安全级别:

ALTER DATABASE ITET SET SAFETY FULL

实验结束,但一定要注意细节

最后看一下数据库镜像角色切换:也就是如何实现故障转移

自动故障转移:

只针对高可用性模式

SAFETY=FULL

测试:禁用主服务器的网卡,查看库状态,再启用再查看

我们到这里已经知道了如何实现数据库镜像,那么用户如何来使用:客户端都是连接到主体服务器上进行工作的。那么如果主体服务器不可用了,那么就会造成用户连接的失败,它怎么知道去自动连接镜像服务器,这里一般使用ADO技术,如ASP.NET 或是微软所提借的连接工具。

我们这里借助WINDOWS 的集群功能:来进行测试:

SERVER1与SERVER2配置成WINDOWS集群:

实验到此结束!

本文出自 “杜飞” 博客

(0)

相关推荐

  • SQL数据库与oracle数据库镜像有什么不同对比

    Oracle数据库与MSSQL数据操作上有很大的不同,但是,在镜像操作方面有类比的地方.这篇文章关于MSSQL数据库镜像在Oracle数据库中是如何实现的,它们之间存在哪些差异呢. 首先,微软SQL数据库中的镜像数据库类似于Oracle数据库中的备用数据库.我说的只是类似,确切的说,我们需要考虑不同数据库在自己体系中的差异.MSSQL作为一个实例来操作,一个实例包含几个数据库,你首先要登录一个实例,然后选择哪个数据库作用于该实例.而在Oracle数据库中,简单模式(忽略RAC)就只有一个数据库与

  • MySQL 数据库双向镜像、循环镜像(复制)

    对于双向数据库镜像,就是数据库A的数据变化要镜像到数据库B中,同时数据库B里的修改也要同时复制到数据库A里. 对于循环数据库镜像,就是多个数据库A.B.C.D等,对其中任一个数据库的修改,都要同时镜像到其它的数据库里. 应用:同一个Zen Cart网店的数据库和程序,可以放置在不同的主机上,在任一台主机上新增的订单.客户资料,都会同时加入其它的主机数据库里. 要实现双向或循环数据库镜像,首先要解决的就是防止数据库中自动递增(AUTO_INCREMENT)字段的冲突,以免多数据库各自生成一样的增量

  • mssql2005数据库镜像搭建教程

    一 概述 数据库镜像是SQL SERVER 2005用于提高数据库可用性的新技术.数据库镜像将事务日志记录直接从一台服务器传输到另一台服务器,并且能够在出现故障时快速转移到备用服务器.可以编写客户端程序自动重定向连接信息,这样一旦出现故障转移就可以自动连接到备用服务器和数据库. 优势:数据库镜像可以在不丢失已提交数据的前提下进行快速故障转移,无须专门的硬件,并且易于配置和管理. 二 环境准备 操作系统:Window 2003 enterprise sp2(至少两台,如要启用自动故障转移,必需三台

  • 简述SQL Server 2005数据库镜像相关知识

    SQL Server 数据库中,数据库镜像是用于提高数据库可用性的主要软件解决方案.数据库镜像基于每个数据库实现,并且只适用于使用完整恢复模式的数据库.简单恢复模式和大容量日志恢复模式不支持数据库镜像,数据库镜像不能镜像master.msdb.tempdb 或 model 数据库.本文我们主要就介绍一下数据库镜像的相关知识,接在来就让我们来一起了解一下吧! 数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的SQL Server 数据库引擎实例(服务器实例)上.通常,这些服务器实例驻留

  • SQL Server 2008 数据库镜像部署实例之一 数据库准备

    一.目标 利用Sql Server 2008 enterprise X64,建立异步(高性能)镜像数据库,同时建立见证服务器实现自动故障转移. 二.前提条件.限制和建议 2.1.伙伴双方(主体服务器和镜像服务器)及见证服务器必须使用相同版本的Sql Server 2.2.如使用见证服务器,择须确保其系统上安装 Sql Server 2005或更高版本 2.3.在镜像服务器上创建镜像数据库时,确保制定相同的数据库名称WITH NOREBOVORY来还原主题数据库备份.另外,还必须通过 WITH N

  • SQL Server 2005 镜像构建手册(sql2005数据库同步镜像方案)

    一. 镜像简介 1. 简介 数据库镜像是将数据库事务处理从一个SQL Server数据库移动到不同SQL Server环境中的另一个SQL Server数据库中.镜像不能直接访问;它只用在错误恢复的情况下才可以被访问. 要进行数据库镜像所需的最小需求包括了两个不同的SQL Server运行环境.主服务器被称为"主机",第二个服务器被称作"备机".主机数据库就是你实际用着的数据库,镜像数据库就是你的数据库的备用拷贝.当事务写入你的基本服务器的时候,他们也同样被传送到并

  • SQL Server 2008 数据库镜像部署实例之二 配置镜像,实施手动故障转移

    上一篇文章已经为配置镜像数据库做好了准备,接下来就要进入真正的配置阶段 一.在镜像数据库服务器上设置安全性并启动数据库镜像会话 1.展开数据库,选择VirtualManagerDB,点击右键选择任务--镜像 2.点击配置安全性,点选是,包括见证服务器 3.去掉见证服务器,以后进行配置 4.设置主体服务器,填入端点名称为site1 5.添加镜像服务器,取端点名为site2 6.指定服务账户为域管理员账户(可以在域内事先配置) 7.创建成功,点击关闭 8.弹出对话框,选择不开始开始镜像 9.点选高性

  • 监视SQLServer数据库镜像[图文]

    1.首先,打开SMS,在任意一个数据库上面点右键,任务,启动数据库镜像监视器. 2.点击注册镜像数据库,在服务器实例下拉菜单中选择镜像数据库的实例名,如果没有,可以直接点连接,然后在链接到服务器窗口中进行设置,如下图所示: 3.设置好后点确定就出现如下窗口所示了: 4. 点击警告选项卡,可以设置对警告的阈值进行设置,如下图所示: 5.在步骤3的窗口上点击历史记录,就可以查看SQLServer数据库镜像运行的历史记录了.如下图所示:

  • SQL Server 2008 数据库镜像部署实例之三 配置见证服务器

    前面已经完成了镜像数据库的配置,并进行那个了故障转移测试.接下来将部署见证服务器,实现自动故障转移. 一.关于见证服务器 1.若要支持自动故障转移,必须在高安全性模式下配置数据库镜像会话,并且还要具有第三个服务器实例(也称为"见证服务器").见证服务器是 SQL Server 的可选实例,它能使高安全性模式会话中的镜像服务器识别出是否要启动自动故障转移.与这两个伙伴不同的是,见证服务器并不能用于数据库.见证服务器的唯一角色是支持自动故障转移. 2.为了给数据库设置见证服务器,数据库所有

  • SQL Server误区30日谈 第10天 数据库镜像在故障发生后 马上就能发现

    误区10.数据库镜像在故障发生后,马上就能发现 错误 市面上大肆宣传数据库镜像技术可以在故障发生后,立即检测到错误并进行故障转移. 但事实并不是这样,检测到故障发生的速度要取决于故障的类型. 检测故障发生的最快的情况是,镜像中的主体实例崩溃,从而镜像服务器每秒一次的PING就无法返回值,从而知道主体服务器上不再有这个进程侦听相应的TCP端口,这种情况下,镜像服务器几乎瞬间就能发现故障. 检测到故障发生第二快的情况是主体服务器的操作系统崩溃.此时主体服务器不再响应镜像服务器的PING,从而在镜像服

  • SQL Server 2008 R2数据库镜像部署图文教程

    概述 "数据库镜像"是一种针对数据库高可用性的基于软件的解决方案.其维护着一个数据库的两个相同的副本,这两个副本分别放置在不同的SQL Server数据库实例中.建议使用不同位置的两台服务器来承载.在同一时刻,其中一台上的数据库用于客户端访问,充当"主体服务器"角色:而另一台则根据镜像会话的配置和状态,充当热备份服务器,即"镜像服务器角色",这两种角色不是绝对的. 优点 l 增强了数据保护功能 l 提高了数据库的可用性 l 提高了生产数据库在升级

随机推荐