SQL Server复制情况下的高可用方案(一)镜像+复制

数据库镜像可以与事务复制一起使用实现数据库整体的高可用性和高性能,其中镜像可以提供故障检测和故障转移,复制则用于实现读写分离。

数据库镜像涉及一个数据库的两个副本,这两个副本通常驻留在不同的计算机上。 在任何给定时间都只有一个数据库副本可供客户端使用。 该副本称为主体数据库。 客户端对主体数据库所做的更新应用到数据库的另一副本(称为镜像数据库)。 镜像涉及将在主体数据库上执行的每个插入、更新或删除操作的事务日志应用到镜像数据库上。

复制将数据和数据库对象从一个数据库复制和分发到另一个数据库,然后在数据库之间进行同步以保持一致性。

主体数据库和镜像数据库必须共享分发服务器

主体数据库/发布数据库:10.86.3.100,机器名WIN-3-100

镜像数据库:10.86.3.101,机器名WIN-3-101

分发数据库:10.86.3.102,机器名WIN-3-102

订阅数据库1:10.86.3.103,机器名WIN-3-103

数据库名称mydb,端口都是1433

镜像配置的验证方式采用证书验证

步骤1:配置镜像

  • 通过备份方式准备镜像数据库

在主体数据库上创建完整备份和日志备份,官方文档指出,需要至少一个日志备份:

BACKUP DATABASE [mydb] TO DISK = N‘D:\backup\mydb.bak‘ WITH NOFORMAT, NOINIT,  NAME = N‘mydb-完整数据库备份 ‘, SKIP, NOREWIND, NOUNLOAD,  STATS = 10
GO
BACKUP LOG [mydb] TO  DISK = N‘D:\backup\mydb.trn‘ WITH NOFORMAT, NOINIT,  NAME = N‘mydb-事务日志 备份‘ , SKIP , NOREWIND , NOUNLOAD ,  STATS = 10
GO

将备份拷贝到镜像服务器上,在镜像服务器上恢复备份,需要指定RESTORE WITH NORECOVERY

RESTORE DATABASE [mydb] FROM  DISK = N‘D:\backup\mydb.bak‘ WITH   FILE = 1,  NORECOVERY ,  NOUNLOAD ,  STATS = 10
GO
RESTORE LOG [mydb] FROM  DISK = N‘D:\backup\mydb.trn‘ WITH   FILE = 1,   NORECOVERY,  NOUNLOAD,  STATS = 10
GO
  • 配置出站连接和证书

主体数据库配置如下:

--创建密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘password‘
SELECT * FROM sys.symmetric_keys
--创建证书
CREATE CERTIFICATE cert_3_100
   WITH SUBJECT = ‘HOST_A certificate for database mirroring‘,
   EXPIRY_DATE = ‘1/1/2020‘
SELECT * FROM sys.certificates ;
--创建端点
CREATE ENDPOINT master_instance
   STATE = STARTED
   AS TCP (
      LISTENER_PORT=5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE cert_3_100
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   )
SELECT name , role_desc , state_desc , connection_auth_desc , encryption_algorithm_desc
   FROM sys.database_mirroring_endpoints
--备份证书到其他系统
BACKUP CERTIFICATE cert_3_101 TO FILE = ‘d:\cert_3_100.cer‘;
GO  

镜像数据库配置如下:

--创建密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = ‘password‘
SELECT * FROM sys.symmetric_keys
--创建证书
CREATE CERTIFICATE cert_3_101
   WITH SUBJECT = ‘HOST_A certificate for database mirroring‘,
   EXPIRY_DATE = ‘1/1/2020‘
SELECT * FROM sys.certificates ;
--创建端点
CREATE ENDPOINT backup_instance
   STATE = STARTED
   AS TCP (
      LISTENER_PORT=5022
      , LISTENER_IP = ALL
   )
   FOR DATABASE_MIRRORING (
      AUTHENTICATION = CERTIFICATE cert_3_101
      , ENCRYPTION = REQUIRED ALGORITHM AES
      , ROLE = ALL
   )
SELECT name , role_desc , state_desc , connection_auth_desc , encryption_algorithm_desc
   FROM sys.database_mirroring_endpoints
--备份证书到其他系统
BACKUP CERTIFICATE cert_3_101 TO FILE = ‘d:\cert_3_101.cer‘;
GO
  • 配置入站连接和证书

主体数据库配置如下:

USE master
--为其他系统创建登录名
CREATE LOGIN login_3_101 WITH PASSWORD = ‘password‘;
SELECT * FROM sys.server_principals
--创建一个使用该登录名的用户
CREATE USER user_3_101 FOR LOGIN login_3_101
SELECT * FROM sys.sysusers
--将证书与用户关联,并将镜像库生成的证书文件放到指定目录中
CREATE CERTIFICATE cert_3_101
   AUTHORIZATION user_3_101
   FROM FILE = ‘d:\cert_3_101.cer‘
SELECT * FROM sys.certificates
--授权对远程镜像端点的登录名的 CONNECT权限,授权完成后,完成对登录到所需的证书身份验证的设置
GRANT CONNECT ON ENDPOINT::master_instance TO login_3_101

镜像数据库配置如下:

USE master
--为其他系统创建登录名
CREATE LOGIN login_3_100 WITH PASSWORD = ‘password‘;
SELECT * FROM sys.server_principals
--创建一个使用该登录名的用户,并将主体库生成的证书文件放到指定目录中
CREATE USER user_3_100 FOR LOGIN login_3_100
SELECT * FROM sys.sysusers
--将证书与用户关联
CREATE CERTIFICATE cert_3_100
   AUTHORIZATION user_3_100
   FROM FILE = ‘d:\cert_3_100.cer‘
SELECT * FROM sys.certificates
--授权对远程镜像端点的登录名的 CONNECT权限,授权完成后,完成对登录到所需的证书身份验证的设置
GRANT CONNECT ON ENDPOINT::backup_instance TO login_3_100
  • 配置镜像

选择主体数据库mydb数据库对象右键->任务->镜像->配置安全性

因为要采用高性能方式,所以不需要见证服务器

当同步完成后,主体数据库会显示“(主体,已同步)”,镜像数据库会显示(已同步,正在还原)

步骤2:配置分发服务器

  • 在发布服务器、分发服务器和订阅服务器配置hosts文件,加入如下配置:

10.86.3.101    WIN-3-101

10.86.3.102    WIN-3-102

10.86.3.103    WIN-3-103

10.86.3.104    WIN-3-104

  • 将10.86.3.102配置成分发服务器,分发数据库的快照文件建议配置相应的访问权限,因为我的账户有访问权限,所以略去这步

在分发服务器上,选择复制->配置分发,按照下图操作:

点击添加

剩下的就直接下一步,直到完成即可

  • 在分发服务器属性对话框中启用发布服务器

在分发服务器复制选项->分发服务器属性->发布服务器,点击添加按钮,选择发布服务器WIN-3-100,在弹出需要设置管理链接密码的对话框中,输入管理链接的密码

  • 在主体数据库(发布数据库)和镜像数据库中指定分发数据库

首先在WIN-3-100上配置,在复制功能上右键->配置分发,按照图中指示配置,选择"使用以下服务器作为分发服务器",点击添加按钮,选择WIN-3-102作为分发服务器

输入管理密码与步骤3中配置的管理链接密码一致

下一步,直至完成。然后如法炮制,在镜像服务器中将WIN-3-102配置为分发服务器,指向同一分发数据库和快照文件

步骤3配置发布服务器

选择复制->本地发布->新建发布,按照如下步骤操作

如果要发布的数据库非常大,建议选择业务空闲期进行初始化快照

配置用于故障转移的复制代理(快照代理和日志读取代理)

启动复制监视器,选择发布服务器,选择快照代理,右键代理配置,选择代理配置文件

输入代理名称,取消勾选“仅显示次配置文件中使用的参数”,指定 –PublisherFailoverPartner 代理参数的镜像名称WIN-3-100

按照上述方法,设置日志读取器代理,指定–PublisherFailoverPartner 代理参数的镜像名称WIN-3-100

创建完成之后还有关键的一步,就是在主体和镜像服务器上执行 DBCC TRACEON(1448,-1),如果可以重启最好加入到实例的启动参数中去。如果不设置该参数,会报复制的事务正等待下一次日志备份或等待镜像伙伴更新

步骤4配置订阅服务器

在订阅服务器中(WIN-3-103)中建立订阅复制,选择复制->本地订阅(右键)->新建订阅

步骤5测试

连接发布库,向测试表中插入数据并查询

USE mydb
INSERT INTO Admin( user_name) VALUES(‘master‘ )
SELECT * FROM admin WHERE user_name=‘master‘

连接订阅库,查询插入数据

USE mydb
SELECT * FROM admin WHERE user_name=‘master‘

故障切换:

停止主体数据库服务,过一会在镜像库执行强制接收

use master ;
alter database mydb set partner FORCE_SERVICE_ALLOW_DATA_LOSS; --强制接收

切换成功后,新的主体数据库显示‘主体,已断开连接’

在新的主体服务器执行:

USE mydb
INSERT INTO Admin( user_name) VALUES(‘mirror‘ )
SELECT * FROM admin WHERE user_name=‘mirror‘

在订阅服务器查看:

USE mydb
SELECT * FROM admin WHERE user_name=‘mirror‘

测试成功(测试成功的图居然忘记截了。。。)

当宕机的原主体数据库连接上来后,现在的主体数据库状态由“主体,已断开”变成“主体,挂起”,此时需要在现主体数据库上执行恢复操作,主体数据库状态变为“主体,已同步”

use master ;
alter database mydb set partner resume;
时间: 2024-08-05 07:08:30

SQL Server复制情况下的高可用方案(一)镜像+复制的相关文章

DRBD(Distributed Replicated Block Device) 分布式块设备复制 进行集群高可用方案

DRBD是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. 外文名 DRBD drbdadm 高级管理工具 drbdsetup 置装载进kernel的DRBD模块 drbdmeta 管理META数据结构 目录 1 DRBD基础 2 DRBD功能 ? 工作原理 ? 版本 DRBD基础 编辑 Distributed Replicated Block Device(DRBD)是一个用软件实现的.无共享的.服务器之间镜像块设备内容的存储复制解决方案. DRBD Logo 数据镜像

MySQL高可用方案之多级复制

在大部分场景中我们都是用MySQL主从复制来实现数据库的冗余,这里是用多级复制来处理,多级复制可以快速简单的处理数据库的故障,数据库有A.B.C服务器,正常情况下A为主.B为A的从.C为B的从. A-->B-->C 当A出现问题时,将B设为主,C为B的从,A正常后就为C的从 B-->C-->A 当B出问题后,C为主,A为C的从,B为A的从,如此反复可以快速解决问题 角色 IP 主机名 数据库版本 主 192.168.2.241 db1 5.6.29 备 192.168.2.242

生产环境下mycat高可用方案mycat+keepalive(1)

#主master配置如下 cat  /etc/keepalived/keepalived.conf global_defs { notification_email { [email protected] } #notification_email_from [email protected] #smtp_server 10.168.0.48 #smtp_connect_timeout 10 router_id nginx } vrrp_script chk_haproxy { script "

SQL Server 高可用方案

方案一:Asynchronous Mirror + Alias 方案介绍 数据库服务器配置异步镜像关系,程序客户端连接串配置别名连接. 1. 在SQL Server客户端配置中创建别名,在客户端的连接串设置中用别名代替服务器名或IP地址. 2. 写一个实用程序,在镜像角色切换的时候,更新别名. 3. 更新别名可通过修改相应的注册表字符串来完成,位于HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo 方案优缺点 优点

也谈Exchange Server 2010单站点的高可用设计

Exchange Server 2010 是一种消息传递平台,提供了电子邮件.日程安排以及用于自定义协作和消息服务应用程序的工具. 1.Exchange Server 2010服务角色 Exchange 2010 包括以下五种服务器角色: 1.1 邮箱服务器: 在 MicrosoftExchange Server 2010 中,邮箱服务器角色是可以在运行 Windows Server 2008 的服务器上安装并配置的几个服务器角色之一.邮箱服务器角色是最常用的服务器角色,在 Exchange 组

SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -2(虚拟IP视角)

1.需求描述 我们知道Windows Cluster 都是多节点的,当虚拟IP漂移的时候,一般都是从一个节点漂移到另外一个节点.如果可以及时捕捉到旧节点信息是什么.新节点信息是什么对我们提供高可用的数据库服务很重要,只有捕捉到这些信息后才可以进一步检查相应的Job.账号,甚至是调整相应的应用服务等. 2.基本原理 在上一节<SQL Server Alwayson架构下 服务器 各虚拟IP漂移监控告警的功能实现 -1(服务器视角)>,我们实现了针对某一个节点的监控即这个节点是否有虚拟IP新增或消

keepalived+mysql双主复制高可用方案

MySQL双主复制,即互为Master-Slave(只有一个Master提供写操作),可以实现数据库服务器的热备,但是一个Master宕机后不能实现动态切换.而Keepalived通过虚拟IP,实现了双主对外的统一接口以及自动检查.失败切换机制.联合使用,可以实现MySQL数据库的高可用方案. 实验环境:OS:centos 6.x x86_64系统MySQL版本: :mysql 5.6.22   64 位A: master :192.168.79.3 3306B: slave :192.168.

alwaysOn+SQL群集+cluster 高可用方案测试

在SQL2012以前,高可用自动切换方案就是SQL群集了,优点就是切换完全自动,缺点也有很多, 然后2012出现了alwaysOn特性,在高可用上有了很大的提升,今天这个测试是将2个特性结合在一起做一个高可用的方案. 这个方案的优点就是数据上,主数据只有一份,而且不受alwaysOn节点数限制,缺点就是切换时间比alwaysOn本身的要长一些. 准备很简单,AD1台 测试足够. 然后先准备2台服务器,做cluster,注意第3台要做alwaysOn副本的机器千万不要现在加入cluster, 然后

Windows Azure下Apache高可用服务配置介绍

pWindows Azure下Apache高可用服务配置介绍/p  pAzure现在不是一个什么新鲜话题了,但可以说Azure的功能还在逐渐增加,包括性能上的优化,具体就不多介绍了,近期呢闲着没事,就尝试在Azure上部署Apache服务的高可用性部署,如果在本地部署Apache服务的高可用性的话,会用到LVS+Keepalived等服务来实现Apache的高可用性配置,如果我们将Apache服务部署到windows azure上的话,就省去了LVS+Keepalived的配置,所以相对比较简单