DatabaseMirroring搭建

来源:互联网 发布:2016程序员笔记本推荐 编辑:程序博客网 时间:2024/05/22 15:27

1.    概述

数据库镜像维护一个数据库的两个副本,这两个副本必须驻留在不同的 SQL Server 数据库引擎 服务器实例上。通常,这些服务器实例驻留在不同位置的计算机上。启动数据库上的数据库镜像操作时,在这些服务器实例之间形成一种关系,称为“数据库镜像会话”。其中一个服务器实例使数据库服务于客户端(“主体服务器”),另一个服务器实例则根据镜像会话的配置和状态,充当热备用或温备用服务器(“镜像服务器”)。同步数据库镜像会话时,数据库镜像提供热备用服务器,可支持在已提交事务不丢失数据的情况下进行快速故障转移。未同步会话时,镜像服务器通常用作热备用服务器(可能造成数据丢失)。在“数据库镜像会话”中,主体服务器和镜像服务器作为“伙伴”进行通信和协作。两个伙伴在会话中扮演互补的角色:“主体角色”和“镜像角色”。在任何给定的时间,都是一个伙伴扮演主体角色,另一个伙伴扮演镜像角色。每个伙伴拥有其当前角色。拥有主体角色的伙伴称为“主体服务器”,其数据库副本为当前的主体数据库。拥有镜像角色的伙伴称为“镜像服务器”,其数据库副本为当前的镜像数据库。如果数据库镜像部署在生产环境中,则主体数据库即为“生产数据库”。数据库镜像涉及尽快将对主体数据库执行的每项插入、更新和删除操作“重做”到镜像数据库中。重做通过将活动事务日志记录的流发送到镜像服务器来完成,这会尽快将日志记录按顺序应用到镜像数据库中。与逻辑级别执行的复制不同,数据库镜像在物理日志记录级别执行。从 SQL Server 2008 开始,在事务日志记录的流发送到镜像服务器之前,主体服务器会先将其压缩。在所有镜像会话中都会进行这种日志压缩。

2.      目的

发生灾难时,在具有自动故障转移功能的高安全性模式下,自动故障转移可快速使数据库的备用副本联机(而不会丢失数据)。在其他运行模式下,数据库管理员可以选择强制服务(可能丢失数据),以替代数据库的备用副本

3.      测试环境

3.1.       主服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4x

3.2.       镜像服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4y

3.3.       见证服务器

Windows 2008R2 64bit,2G Mem,CPU 2.0GHz,局域网,IP:192.168.102.4z

4.      配置镜像

4.1.       准备工作

4.1.1.  账户建立

Windows账户建立:分别在”主服务器”,”镜像服务器”,”见证服务器”,上建立本地帐号”public”,密码设置相同。

4.1.2.  端口开放

保持三台服务器端口5022端口可用,可用telnet命令测试,telnetIP 5022(建立完通讯端点后测试)

4.2.       配置镜像(基于工作组模式)

4.2.1.  主服务器上执行

use master
 
go
 
--创建登陆账户
 
create login [TestServer1\public] from windows
 
go
 
--创建通讯端点
 
create endpoint endpointmirror
 
state=started --创建的同时激活端点
 
as
  tcp(listener_port=
5022)
 
for 
  database_mirroring(encryption=supported,role=partner)
 
go
 
--授予账户[TestServer1\public]对端点的connect权限
 
grant connect on endpoint::endpointmirror to [TestServer1\public]
 
go
 
--数据库模式确认
 
alter database Northwind set Recovery full with no_wait
 
go
 
--在主服务器上进行数据库备份
 
backup database Northwind
 
to disk='d:\dbbackup\Northwind.bak'

 


 

4.2.2.  镜像服务器上执行

use master
 
go
 
--创建登陆账户
 
create login [TestServer2\public] from windows
 
go
 
--创建通讯端点
 
create endpoint endpointmirror
 
state=started --创建的同时激活端点
 
as
  tcp(listener_port=
5022)
 
for 
  database_mirroring(encryption=supported,role=partner)
 
go
 
--授予账户[TestServer2\public]对端点的connect权限
 
grant connect on endpoint::endpointmirror to [TestServer2\public]
 
go
 
 
--在镜像服务器上还原数据库(前提数据库备份已拷贝)
 
restore database Northwind
 
from disk='d:\dbbackup\Northwind.bak'
 
with file=1,norecovery
 
 

4.2.3.  启动镜像

4.2.3.1.      镜像服务器执行

--启动镜像
 
alter database Northwind
 
set partner='TCP://192.168.102.4x:5022'

4.2.3.2.      主体服务器执行

--启动镜像
 
alter database Northwind
 
set partner='TCP://192.168.102.4y:5022'

4.2.4.  测试镜像效果

4.2.4.1.      主体服务器执行

use Northwind
 
go
 
create table table12(id int)

4.2.4.2.      镜像服务器执行

use master
 
go
 
if exists(select 1 from sys.databases 
                     
where name='snap_Northwind')
 
drop database snap_Northwind
 
go
 
create database  snap_Northwind
 
on
  (name=Northwind,filename=
'C:\....\snap_Northwind.snap')
 
as snap of Northwind
 
go
 
use  snap_Northwind
 
go
 
select name from sys.tables

4.2.4.3.      通过镜像监视器查看镜像状态

4.2.4.4.      使用系统视图查看镜像的状态

select * from sys.database_mirroring
 
go
 
select * from sys.database_mirroring_endpoints
 
go
 
select * from sys.database_mirroring_witness

4.2.5.  加入见证服务器

4.2.5.1.      见证服务器执行

use master
 
go
 
--创建登陆账户
 
create login [TestServer3\public] from windows
 
go
 
--创建通讯端点
 
create endpoint endpointmirror
 
state=started --创建的同时激活端点
 
as
  tcp(listener_port=
5022)
 
for 
  database_mirroring(encryption=supported,role=witness)
 
go
 
--授予账户[TestServer3\public]对端点的connect权限
 
grant connect on endpoint::endpointmirror to [TestServer3\public]
 
go

 

4.2.5.2.      主体服务器执行

--加入见证服务器
 
alter database Northwind
 
set witness='TCP://192.168.102.4z:5022'

5.      故障模拟

5.1.       数据库损坏

5.1.1.  停止主服务器的SQLServer服务。

5.1.2.  此时辅助服务器自动切换为主体角色(主体已断开连接)(192.168.102.4y)

5.1.3.  启动原主体数据库的SQLServer服务(192.168.102.4x)

5.1.4.  此时192.168.102.4y变为(主体/已同步)状态,192.168.102.4x变成(镜像/已经同步)

5.2.       手动切换

5.2.1.  主体服务器执行

alter database Northwind
 
set partner failover

5.2.2.  主体及镜像角色自动实现了切换

6.      总结

6.1.       注意点

6.1.1.  基于工作组的镜像,需要在各服务器上建立相同的本地帐号,且密码相同

6.1.2.  启动镜像必须从镜像服务器开始执行

6.1.3.  见证服务器需要在主体服务器上加入

6.1.4.  数据库模式需要为完整模式

6.1.5.  各服务器的版本必须相同

6.1.6.  保证镜像数据库有足够的空间容纳镜像数据库

6.1.7.  在镜像服务器上还原数据库,要用Norecovery选项

6.1.8.  如果数据库镜像已经停止,则必须将对主体数据库执行的所有后续日志备份应用到镜像数据库中,然后才可以重新启动镜像

6.2.       结论

6.2.1.  基于工作组的镜像操作起来比基于证书的要简单,切换容易

6.2.2.  SQLAgent对于镜像来说是非必须的,不同于Log Shipping

6.3.       知识点

6.3.1.  修改数据库的所有者

alter authorization on Database::Northwind to [sa]