您的位置:首页 > 运维架构 > 网站架构

使用数据库镜像保障高可用的数据库应用(上)

2009-05-01 10:43 197 查看
什么是数据库镜像: 基于软件的高可用性解决方案 快速的故障转移恢复,低硬件成本 基于数据库级别实现
数据库镜像应用过程-->见下图:



数据库镜像中的服务器角色: 主体服务器-->承载主体数据库 接受用户连接和事务处理请求 镜像服务器-->承载镜像数据库 作为主体数据库的热备份 仅在故障转移后接受用户连接,处理事务请求 见证服务器-->监视服务器状态和连接性,实现自动故障转移
主体数据库和镜像数据库互为伙伴: 主体和镜像是可以相关转换的 故障转移后伙伴角色发生变化 -->见下图:



数据库镜像会话: 每个伙伴维护数据库镜像的状态信息-->伙伴数据库 见证服务器 各服务器实例通过ping交换消息相互监视-->操作系统级别 库实例级别 数据库级别
镜像会话的周期: 会话初始化-->镜像请求事务日志记录,与主体服务器实现同步 会话过程-->主体服务器将日志记录传输给镜像服务器 各个角色之间相互监视会话状态 会话终结-->发生故障转移 管理员终止数据库镜像
故障转移: 对于高可用性的数据库镜像模型中-->主体数据库不可用将出发自动故障转移 在短时间内恢复服务(<10Sec)
快速恢复机制: SQL 2000数据库必须等还原过程全部完成后才能使用-->Redo(Rolled forward)+Undo(Rollback)
|Redo Undo|
数据库还原过程 -->可以开始使用
SQL 2005数据库在完成Redo后就可以开始使用-->Redo | Undo
数据库还原过程 -->可以开始使用
操作模式: 数据库镜像有三种操作模式
操作模式 事务安全 传输机制 是否要仲裁 见证服务器 故障转移类型
高可用性 FULL 同步 Y Y 自动或手动
高级别保护 FULL 同步 Y N 仅手动
高性能 OFF 异步 N N/A 仅强制
高可用操作模式: 服务器角色-->主体服务器 镜像服务器 见证服务器 应用场景-->要求高服务可用性 要求实现自动故障转移 确保数据的完整
高级别保护模式: 服务器角色-->主体服务器 镜像服务器 应用场景-->高的数据完整性要求 不要求自动故障转移 对服务的可用性要求较低
高性能模式: 服务器角色-->主体服务器 镜像服务器 应用场景-->主体服务器和镜像服务器距离很远 通讯链路有明显的延迟 对性能的要求高于数据的完整
事务安全性: FULL-->主体和镜像数据库同步传输的模式 主体在发送日志后等待镜像的确认 主体和镜像的日志完全一致 OFF-->主体和镜像数据库异步传输的模式 主体在发送日志后不等待镜像的确认,继续处理后续的操作 主体失败时在镜像上有可能丢失一些日志数据
仲裁: 只适用于设置了见证服务器的会话-->高可用性镜像会话 镜像会话必须存在仲裁,数据库才可用-->必须连接两个或以上的服务器实例 确保在任何时间只有一个伙伴为数据库提供服务 仲裁的改变将有可能导致故障转移
配置数据库镜像步骤: 准备镜像数据库 创建数据库镜像端点 配置安全性 启动数据库镜像
准备数据库: 条件-->主体数据库必须是完全恢复模式 创建镜像数据库-->在镜像服务器上使用NORECOVERY选项恢复主体数据库备份 继续恢复后续日志备份(NORECOVERY)
配置数据库镜像端点(Endpoint): 数据库镜像端点实现镜像会话的通讯过程 默认不存在,需要手动创建数据库镜像端点 基于TCP协议在会话服务器实例间收发消息 每个镜像端点都在唯一的TCP端口号上侦听
创建数据库镜像端点(1): 需要在每个实例上创建 创建者必须是System Admins角色成员 设置端点角色 激活端点
CREATE ENDPOINT DbMirroring
AS TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(ROLE=PARTNER,ENCRYPTION=SUPPORTED)
Go
ALTER ENDPOINT DbMirroring STATE=STARTED
Go
创建数据库镜像端点(2): 端点的加密类型
CREATE ENDPOINT DbMirroring
STATE=STARTED
AS TCP(LISTENER_PORT=5022)
FOR DATABASE_MIRRORING(ROLE=WITNESS,ENCRYPTION=SUPPORTED)
配置安全性: 数据库镜像中的实例之间必须可信-->账户可以登录到服务器和连接到端点 在端点上配置身份验证-->Windows身份验证(同在信任域) 基于证书的身份验证(跨非信任域) 授予服务账户对端点的CONNECT权限 如果所有的实例都使用相同的服务账户
启动数据库镜像: 指定镜像数据库的伙伴 指定主体数据库伙伴 指定见证服务器 指定事务安全选项
ALTER DATABASE Northwind SET PARTNER =N'TCP://MIR-A:5022'
Go
ALTER DATABASE Northwind SET PARTNER =N'TCP://MIR-B:5022'
Go
ALTER DATABASE Northwind SET WITNESS =N'TCP://MIR-W:5022'
Go
ALTER DATABASE Northwind SET SAFETY FULL;
数据库镜像配置: 使用T-SQL配置-->可以使用更丰富的配置选项 使用Management Studio-->数据库镜像安全性配置向导 基于向导的配置过程简单快捷
查看数据库镜像状态: Management studio-->数据库属性->镜像状态 系统视图-->sys.database_mirroring sys.database_mirroring_witness
如何配置高可用性数据库镜像呢?
首先介绍一下环境结构: 计算机名称: MIR-A将配置成主体服务器 IP地址: 192.168.0.1 计算机名称: MIR-B将配置成镜像服务器 IP地址: 192.168.0.2 计算机名称: MIR-W将配置成见证服务器 IP地址: 192.168.0.3



我现在来到计算机名称叫做MIR-A的计算机 当要配置数据库镜像的时候 需要做数据库的准备 就是需要对主体服务器上的要做数据库镜像的数据库进行备份 备份完成之后再把这个备份还原到镜像数据库服务器上 1.全选在MIR-A上,对Northwind数据库做完全备份的语句 按执行来备份Northwind这个数据库



展开数据库--对着Northwind这个数据库右键--选择属性 注意: 在数据库属性的选项里面的恢复模式必须是完整 如果是大容量日志或者简单的话 那么数据库镜像配置就会失败的



我已经在MIR-A这台计算机上把Tools这个文件共享出来了 我现在来到计算机名称叫做MIR-B这台计算机 打开我的电脑--在地址里面输入\\MIR-A按回车键后可以看到Tools这个文件了-打开Tools这个文件夹之后就可以看到刚才备份的Ntbackup.bak这个文件了 我把Ntbackup.bak这个文件复制到本地计算机的C盘的Tools这个文件夹里面



我现在来做一下恢复Northwind数据库的备份 2.全选在MIR-B上,将MIR-A上恢复Northwind数据库的备份,并使用NORECOVERY选项的语句 按执行 恢复完成之后我们来看一下Northwind这个数据库当前的状态 展开数据库--按F5键来刷新一下--可以看到Northwind这个数据库当前的状态是正在还原... 表示这个数据库当前是不可用的 就是说现在是没有办法去连接Northwind这个数据库的 这就已经完成数据库的准备了 接下来就是创建数据库镜像端点了 需要分别在主体服务器、镜像服务器、见证服务器上都创建端点



我现在来到计算机名称叫做MIR-A这台主体服务器创建端点 1.全选在MIR-A上,创建数据库镜像端点,用于伙伴通讯的语句 按执行 展开服务器对象--端点--数据库镜像--可以看到一个叫做DbMirroringEP的端点 这就是我刚才创建的一个数据库镜像端点



我现在来到计算机名称叫做MIR-B这台镜像服务器创建端点 2.全选在MIR-B上,创建数据库镜像端点,用于伙伴通讯的语句 按执行 展开服务器对象--端点--数据库镜像--可以看到一个叫做DbMirroringEP的端点 这就是我刚才创建的一个数据库镜像端点



我现在来到计算机名称叫做MIR-W这台见证服务器创建端点 3.全选在MIR-W上,创建数据库镜像端点,用于伙伴通讯的语句 按执行 展开服务器对象--端点--数据库镜像--可以看到一个叫做DbMirroringEP的端点 这就是我刚才创建的一个数据库镜像端点



创建完成端点之后 我们还可以使用语句来查看当前的端点 4.全选检查端点配置的语句 按执行 在下面可以看到当前端点的名称(DbMirroringEP)和其他更详细的信息



接下来就配置数据库镜像的安全性 我来到计算机名称叫做MIR-A这台主体服务器 我在刚才创建的DbMirroringEP这个端点上授予SQL2k5SP2这个服务账户拥有CONNECT权限 1.全选授予SQL2k5SP2这个服务账户拥有CONNECT权限的语句 按执行 注意: 当前的所有服务器使用的服务账户和口令是SQL2k5SP2



展开安全性--登录名--对着SQL2k5SP2这个服务账户右键--选择属性--按安全对象--按添加--选择特定类型的所有对象--按确定--把端点沟上 按确定 可以看到在DbMirroringEP这个端点上SQL2k5SP2这个服务账户拥有Connect权限



我来到计算机名称叫做MIR-B这台镜像服务器 我在刚才创建的DbMirroringEP这个端点上授予SQL2k5SP2这个服务账户拥有CONNECT权限 1.全选授予SQL2k5SP2这个服务账户拥有CONNECT权限的语句 按执行 注意: 当前的所有服务器使用的服务账户和口令是SQL2k5SP2



我来到计算机名称叫做MIR-W这台见证服务器 我在刚才创建的DbMirroringEP这个端点上授予SQL2k5SP2这个服务账户拥有CONNECT权限 1.全选授予SQL2k5SP2这个服务账户拥有CONNECT权限的语句 按执行 注意: 当前的所有服务器使用的服务账户和口令是SQL2k5SP2 这样就已经为所有实例服务器配置镜像所需要的安全性了 接下来就是启动数据库镜像了



我现在来到计算机名称叫做MIR-B这台镜像服务器 1.全选在MIR-B上,指定伙伴端点的语句 按执行 注意: 启动镜像的时候一定记得第一步是在将要成为镜像数据库服务器的这个实例上做 也就是说在这台镜像服务器上做 接下来就要到主体服务器上启动数据库镜像了



我来到计算机名称叫做MIR-A这台主体服务器 2.全选在MIR-A上,指定伙伴端点的语句 按执行 展开数据库--按F5键来刷新一下--可以看到在主体服务器上Northwind这个数据库已经显示为主体,已同步了 说明当前镜像已经配置成功了 而且主体数据库和镜像数据库的数据已经同步完成了



我现在来到计算机名称叫做MIR-B这台镜像服务器看一下数据库的状态 展开数据库--按F5键来刷新一下--可以看到Northwind这个数据库的状态从原来的正在还原变成了镜像,已同步 / 正在还原了 这就表明了这台数据库服务器已经成为一台镜像数据库服务器 而它的状态是一直在同步中 注意: 这台镜像数据库服务器是不能够让用户直接去访问的 这台数据库服务器当前是不可用的 因为它是作为镜像数据库的 只有主体数据库才可用的 现在就已经完成镜像数据库的启动了 当前的镜像模式是高级别数据保护的模式 接下来就是把高级别数据库保护的模式转化成自动模式-->也就是设置成高可用性模式 必须在主体服务器上设置当前会话的见证服务器的端点



我现在来到计算机名称叫做MIR-A这台主体服务器 设置当前会话的见证服务器的端点 3.全选在MIR-A上,指定见证服务器端点的语句 按执行 执行完成之后会话中就包含见证服务器了



我们都知道在高可用性的模式下还需要把数据库镜像的模式去更改为安全事务的状态 3.全选配置数据库镜像事务安全级别的语句 按执行 这样就完成了整个高可用性模式的配置了



最后可以使用系统视图去查看当前镜像数据库的状态和数据库镜像所使用的端点的一些信息 3.全选通过系统目录视图查看数据库镜像配置情况的语句 按执行之后就可以看到镜像数据库的状态和数据库镜像所使用的端点的一些信息了



我现在来做一下自动故障转移 我把计算机名称叫做MIR-A这台主体服务器的本地连接禁用掉 然后你会发现在数秒钟之后 计算机名称叫做MIR-B这台镜像服务器会接管主体服务器成为主体数据库然后向用户提供服务 此时你到计算机名称叫做MIR-B这台镜像服务器来刷新一下数据库 你会发现Northwind这个数据库显示为(主体,已断开连接) 后面的已断开连接代表什么含义呢? 就是说虽然镜像服务器成为主体服务器 但是现在没有办法连接到以前的主体服务器 所以它们之间的连接是断开的 如果你到主体服务器上把网络连接启用的话 然后把主体服务器的数据库刷新一下 你会发现主体服务器的Northwind这个数据库会自动显示为(镜像,已同步 / 正在还原) 此时此刻你再回到镜像服务器上刷新一下数据库 你会发现Northwind这个数据库显示为(主体,已同步) 就是说现在那台宕机的的服务器又连接了 连接之后就自动跟二台服务器形成一个完全的仲裁 这是一个自动的故障转移 这个在高可用性的模式下是可以使用的 还有一个就是使用手动故障转移



如何实现手动故障转移的过程呢? 1. 全选在主体服务器上,执行故障转移过程的语句 按执行 执行之后就完成了一个手动的切换过程 按F5键来刷新一下数据库 你会发现Northwind这个数据库显示为(镜像,已同步 / 正在还原..) 表示已经成为镜像服务器了



我现在来到计算机名称叫做MIR-B这台计算机 它以前是一台镜像服务器 按F5键来刷新一下数据库 可以看到Northwind这个数据库显示为主体,已同步 表示已经实现服务器角色切换的过程了



我现在把见证服务器关闭 然后把事务的安全级别设置为OFF 1.全选在镜像服务器上,取消对见证服务器的配置语句 按执行 那么这个时候镜像就成为高性能的模式了 那么在高性能的模式中就可以使用强制服务 比如说我现在把镜像服务器的本地连接禁用掉 禁用掉之后主体服务器就不存在了 就是说主体服务器不可用了 然后到镜像服务器上看一下状态



我现在来到镜像服务器 可以看到Northwind这个数据库显示为(镜像,已断开连接 / 正在恢复) 那么这个时候说明主体服务器已经宕机了 但是因为这是一个高性能的模式而没有办法去让它自动地进行故障转移 那么此时就可以使用强制服务了 3.全选在镜像服务器上,强制服务的语句 按执行



我来到计算机名称叫做MIR-A这台主体服务器 按F5键来刷新一下数据库 可以看到Northwind这个数据库显示为(主体,已断开连接) 这就是在SQL Server 2005的数据库镜像中进行角色切换的几种场景和过程
注意事项: 主体数据库必须是完全还原模型 镜像数据库的初始过程-->必须由主体备份进行还原,且必须使用NORECOVERY选项 镜像数据库的名称必须与主体数据库相同 镜像数据库在会话过程中直接不可用-->处于还原过程 通过创建镜像数据库的快照访问镜像数据库 SQL 2005 SP1之前不提供对数据库镜像的支持-->需要使用-T1400跟踪标志启动服务
数据库镜像角色切换: 自动故障转移-->只针对高可用性模式 SAFETY=FULL 手动故障转移-->针对高可用性和高级保护模式 SAFETY=FULL 强制服务-->只针对高性能模式 SAFETY=OFF
自动故障转移: 会话中的每个实例相互检测存在状态(ping)-->物理服务器 SQL Server实例 主体、镜像数据库 当主体对镜像和见证服务器都不可见时发生故障转移-->镜像转换为新的主体数据库 主体恢复后协商成为新的镜像数据库 关闭见证服务将禁用自动故障转移
自动故障转移过程-->见下图:



手动故障转移: 在无故障的情况下手动切换角色-->在主体上执行手动转移操作: ALTER DATABASE Northwind SET PARTNER FAILOVER GO
当前连接到主体的用户被断开 可以作为服务器滚动升级的一种方法
手动故障转移实现滚动升级-->见下图:




强制服务: 在镜像数据库上强制启用服务-->有可能导致数据的丢失
ALTER DATABASE Northwind
SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSS
GO
通常应用在高性能模式 也可以应用在高可用性模式中: 镜像和见证服务器都不可用,要求快速恢复服务
在镜像数据库上强制服务-->见下图:


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息