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
复制代码
  • 配置入站链接和证书

主体数据库配置以下:post

复制代码
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数据库对象右键->任务->镜像->配置安全性测试

由于要采用高性能方式,因此不须要见证服务器spa

 

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

步骤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;
相关文章
相关标签/搜索