一、描述

在生产环境中,不仅我们的应用服务器需要做高可用,数据服务器同样需要做高可用,否则,一旦数据服务器出问题,整个系统就直接崩溃了。

这里我们介绍一下,使用SqlServer镜像的方式实现SqlServer的高可用。

二、搭建准备

我使用的是虚拟机来搭建环境:

机器名

版本

IP

WIN-SJPRGC2O1KO

Windows server 2008 R2

192.168.213.148

WIN-73NJ6DU4SO7

Windows server 2008 R2

192.168.213.149

WIN-LMIMQ4P4OCB

Windows server 2008 R2

192.168.213.150

我们分别为三台机器安装数据库SqlServer 2008 R2。 

为了方便,我直接禁用了三台机器的防火墙,生产环境下,允许5022端口即可。

三、开始搭建

我们选取192.168.213.148这台机器当作主体机器(解释一下,镜像里面分为主体机器,镜像机器和见证机器,主体就是我们实际用到的,而镜像就相当于一个备份,见证机器的作用是监督主体机器,当主体机器发生故障时,会自动将镜像机器变为主体机器,见证机器为可选方案,没有见证机器时,故障切换需要手动进行;当有见证机器时,故障切换将自动进行),选取192.168.213.149,为镜像机器。

1.   创建数据库主密钥

USE master
GO
CREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Asd123';

*注:这个密钥要相对复杂一些。

主体机器和镜像机器都执行该语句。

2.   创建证书

CREATE CERTIFICATE CertAWITH Subject = 'CertA',Expiry_Date = '2019-1-1';

主体机器和镜像机器都执行该语句。注意替换CertA  为CertB

3.   创建端点

IF NOT EXISTS ( SELECT  1FROM    sys.database_mirroring_endpoints )BEGINCREATE ENDPOINT [DatabaseMirroring] STATE = STARTED AS TCP ( LISTENER_PORT = 5022,LISTENER_IP = ALL ) FOR DATABASE_MIRRORING ( AUTHENTICATION =CERTIFICATE CertA , ENCRYPTION = REQUIRED Algorithm AES, ROLE =ALL );END

主体机器和镜像机器都执行该语句。注意替换CertA为CertB

4.   备份证书

BACKUP CERTIFICATE CertATO FILE = 'C:\Shares\Certs\ CertA.cer

主体机器和镜像机器都执行该语句。注意替换CertA为CertB

每台机器上应该拥有所有的证书,即主体机器应该有CertA和CertB,镜像机器也应该有CertA和CertB

5.   创建登陆账户

创建互相登陆的账号,即为主体服务器创建镜像服务器的登陆账号,为镜像服务器创建主体服务器的登陆账号。

CREATE LOGIN LoginB WITH PASSWORD = 'Asd123';

主体机器和镜像机器都执行该语句。注意替换LoginB为LoginA

6.   为登陆账户创建用户

CREATE USER UserB For Login LoginB;

主体机器和镜像机器都执行该语句。注意替换LoginB为LoginA, UserB为UserA

7.   使用证书为用户授权

CREATE CERTIFICATE CertBAUTHORIZATION UserBFROM FILE = 'C:\Certs\CertB.cer';

主体机器和镜像机器都执行该语句。注意替换CertB为CertA, UserB为UserA

8.   为登陆账户授权端口

GRANT CONNECT ON ENDPOINT::[DatabaseMirroring] TO [LoginB];

主体机器和镜像机器都执行该语句。注意替换LoginB为LoginA

9.   备份与还原

备份没什么好说的直接下一步就可以,还原时要注意一下:

10.          创建镜像

分别在主体和镜像上面点一下任务—镜像,把图中那个地址复制下来,备用。

镜像机执行:

ALTER DATABASE HADBTestSET PARTNER = 'TCP://WIN-SJPRGC2O1KO:5022';

HADBTest为我要创建镜像的数据库

同样在主机上将备机设置为PARTNER

执行完成后,我们刷新一下数据库就可以看到如下的样子

主体:

镜像:

四、测试

1.   测试故障切换

我们已经完成了搭建,那么我们来测试一下,加入主体机器故障了,我们需要切换至镜像机器。可以在镜像机上执行如下代码,将镜像数据库强制切换为主体数据库。

USE masterGOALTER DATABASE HADBTest SET PARTNER FORCE_SERVICE_ALLOW_DATA_LOSSGO 

待故障机器修复成功后,我们可以恢复挂起的镜像

USE masterGOALTER DATABASE HADBTest SET PARTNER Resume  GO 

恢复已修复故障机为主体机器,在当前主体机器上执行

USE masterGOALTER DATABASE HADBTest SET PARTNER FAILOVER       GO

五、完善

到这里我们已经完成了镜像的搭配,也尝试了故障切换,但是尝试过后,我们发现了一个问题,就是发生故障时,我们还要人为去切换,这就是个很大的问题。所以为了解决这个问题,我们将见证机器加入进来。

与之前一样,我们为见证机器建立证书:

--创建主密钥USE masterGOCREATE MASTER KEY ENCRYPTION BY PASSWORD = 'Asd123';--创建证书CREATE CERTIFICATE CertCWITH SUBJECT = ' CertC ',EXPIRY_DATE ='2019-1-1' ;GO--授权端点CREATE ENDPOINT Endpoint_MirroringSTATE = STARTEDAS TCP (LISTENER_PORT=5022)FOR DATABASE_MIRRORING (AUTHENTICATION = CERTIFICATE CertC, ENCRYPTION = REQUIRED ALGORITHM AES, ROLE = ALL  );

--备份证书

BACKUP CERTIFICATE HOST_C_cert TO FILE = 'C:\Certs\CertC.cer';

每台机器上应该拥有所有的证书,即主体机器应该有CertA,CertB和CertC,镜像机器也应该有CertA,CertB和CertC,见证机器上应该有CertA,CertB和CertC。

在见证机器上添加主体和镜像机器的账户用户和端点

--主体:USE master;CREATE LOGIN LoginA WITH PASSWORD = 'Asd123';GOCREATE USER UserA FOR LOGIN LoginA;GOCREATE CERTIFICATE CertAAUTHORIZATION UserAFROM FILE = 'C:\Certs\CertA.cer'GOGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO LoginA;GO--镜像CREATE LOGIN LoginB WITH PASSWORD = 'Asd123';GOCREATE USER UserB FOR LOGIN LoginB;GOCREATE CERTIFICATE CertBAUTHORIZATION UserBFROM FILE = 'C:\Certs\CertB.cer'GOGRANT CONNECT ON ENDPOINT::Endpoint_Mirroring TO LoginB;GO--在主体和镜像机器上,将见证机器创建账户用户和端点USE master;CREATE LOGIN LoginC WITH PASSWORD = 'Asd123';GOCREATE USER UserC FOR LOGIN LoginC;GOCREATE CERTIFICATE CertCAUTHORIZATION UserCFROM FILE = 'C:\Certs\CertC.cer'GOGRANT CONNECT ON ENDPOINT::DatabaseMirroring TO LoginC;GO--在主体机器上执行语句,将见证机器加入进来:ALTER DATABASE HADBTest SET WITNESS = 'TCP:// WIN-LMIMQ4P4OCB '

现在加入见证机器成功了,我们就可以实现自动的故障转移了。

六、访问

故障转移是完全没问题了,但是似乎有一个更大的问题要解决,就是,主体和镜像本身就是两台不同ip的机器,那么怎么访问呢?

在ADO.NET中提供了Failover Partner属性来解决这个问题,填写镜像数据库的ip地址,一旦出现了连接错误,ado.net会在超时以后自动去连接镜像数据库。

连接字符串示例如下:

    <add name="Model1" connectionString="data source=192.168.213.149;Failover Partner=192.168.213.148;initial catalog=HADBTest;persist security info=True;user id=sa;password=Asd123;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />

转载于:https://www.cnblogs.com/Yuuuuu/p/9318671.html

SqlServer2008R2镜像(无域)相关推荐

  1. Sql server 2016 Always on 实现无域高可用

    Sql server 2016 Always on 实现无域高可用 上一篇:sql server 2016 Always on 无域部署教程 使用三台服务器组成了sql server 高可用,但是基于 ...

  2. 无域控AlwaysOn实战教学 (一)

    前言 最近正好给客户安装部署无域控的Always On .详细说明下安装部署的细节和碰到的坑.欢迎各位同学拍砖和评论,有什么问题都可以在下面留言. 什么是Always On SQL Server 20 ...

  3. sql server 2016 Always on 无域部署教程

    sql server 2016 Always on 无域部署教程 一.环境描述 1.1.前言 SQL Server AlwaysOn功能在SQL Server 2012版本就已经出来了,AlwaysO ...

  4. SQL Server2016无域群集与高可用性AlwaysON配置新手教程

    Doc教程文档下载地址: https://download.csdn.net/download/chenhui389/12701070 一.准备工作: 1.安装服务器操作系统,这里以为windwows ...

  5. 第三篇——第二部分——第四文 配置SQL Server镜像——非域环境

    原文: 第三篇--第二部分--第四文 配置SQL Server镜像--非域环境 本文为非域环境搭建镜像演示,对于域环境搭建,可参照上文:http://blog.csdn.net/dba_huangzj ...

  6. CVPR 2020 Oral | 无域标签下高清场景时移变换

    ©PaperWeekly 原创 · 作者|武广 学校|合肥工业大学硕士生 研究方向|图像生成 同一个场景在不同时间段存在着一定的变化,这主要取决于光照对图像的成像的影响,如何通过一个时间段的场景图像在 ...

  7. SQL SERVER 2016 AlwaysOn 无域集群+负载均衡搭建与简测

    之前和很多群友聊天发现对2016的无域和负载均衡满心期待,毕竟可以简单搭建而且可以不适用第三方负载均衡器,SQL自己可以负载了.windows2016已经可以下载使用了,那么这回终于可以揭开令人憧憬向 ...

  8. 配置SQL Server 2016无域AlwaysOn

    Windows Server 2016 以及 SQL Server 2016出来已有一段时间了,因为Windows Server 2016可以配置无域的Windows群集,因此也能够以此来配置无域的S ...

  9. Alwayson无域安装测试

    一. IP及名称规划 IP 名称 说明 192.168.1.111 WIN16-TEST.test.com 节点1 192.168.1.112 WIN16-TEST02.test.com 节点2 19 ...

  10. 从零搭建故障转移,sql server2016 AlwaysOn无域高可用性全教程

    一.简介 环境:小编使用的服务器是windows server 2016(系统服务器) + sql server 2016(数据库服务器) (windows server 2016 + sql ser ...

最新文章

  1. 编译Hi3516a osdrv目录
  2. RocketMQ 介绍 msgId生成算法
  3. 看看C# 6.0中那些语法糖都干了些什么(终结篇)
  4. Python爬虫图形界面封装版本
  5. mysql insert replace_mysql 操作总结 INSERT和REPLACE
  6. easui Pagination Layout
  7. linux查看python环境_运维笔记linux环境提示python: command not found hello
  8. CSS绝对定位元素居中的几种方法
  9. poj 2503 Babelfish trie树!!!!指针版和数组版 基础
  10. Python实现中文转化为对应的拼音以及拼音转化为相应的中文
  11. php基础之时间函数(date(), time(), microtime())
  12. 错误解决办法:‘NULL’ was not declared in this scope
  13. 去除firefox火狐更新提示
  14. 图 邻接矩阵幂的含义 离散数学定理14.11
  15. 线性插值、抛物插值、Lagrange插值 | Lagrange拉格朗日插值法(一)
  16. c语言中数组名和数组名取地址理解
  17. 计算机网络安全教程第三版课后答案
  18. 2021-11-02 没羞没臊的商家装傻充愣昧着良知昧着基本人格耍赖达到丧心病狂程度.
  19. 社群空间站一键发布微信群精品优质社群的搜索和发布平台
  20. 计算机在医学应用图片,数字图像处理技术在医学领域的应用

热门文章

  1. Bootstrap 公布长期支持计划,Bootstrap 3 生命周期结束
  2. vue 中 Excel 的导入导出
  3. 电脑时钟倒计时_倒计时久坐休息提醒工具
  4. 使用echarts(三)自定义图表仪表盘
  5. 数据库主键从某个值开始自增
  6. ionic 环境安装
  7. css定位能用android,绝对的CSS定位显示android html上的空白区域
  8. 上海找python工作容易吗_Python 在上海什么程度才能找到工作?
  9. oracle function 写查询语句_五个 SQL 查询性能测试题,只有 40% 及格率,你敢来挑战吗?...
  10. mysql 写入性能瓶颈_如何通过性能调优突破MySQL数据库性能瓶颈?