前言

最近参与的一个项目,因为我负责服务器相关的环境搭建,被甲方告知需要实现数据库的高可用,由于服务器与数据库是甲方提供的,一般这种情况都是谁提供谁负责,也不知道为什么就落到了我头上,不管怎么原因总之我是兴奋的,因为之前只是对集群的概念有所了解,并没有真正实践过。

甲方的需求是A,B两台服务器部署数据库,能够在其中一台机数据库服务奔溃后,迅速启用另外一台的数据库服务,以实现数据源的高可用,SQL Server提供了好几种解决方案,最开始看的是镜像数据库,发现是过时的结局方案后,又有个故障转移群集看了几分钟发现目录下面还有个Always on,最终选择了它,关于这几种方案的优劣,下文会有解释



SQL Server高可用的几种可用方案

数据库镜像:此功能处于维护模式并且可能会在 Microsoft SQL Server 将来的版本中被删除。 请避免在新的开发工作中使用该功能,并着手修改当前还在使用该功能的应用程序。 改为使用 AlwaysOn 可用性组。此为官方文档原话!

故障转移群集实例(FCI):SQL Server 利用 WSFC 服务的高可用性和灾难恢复方案,由一个域控服务器与多个sql server服务组成一个群集,每个服务就是一个节点,当其中一个服务不可用时,会将自动将另一个可用的启用,需要域控服务器。

AlwaysOn可用性组:AlwaysOn 可用性组 功能是一个提供替代数据库镜像的企业级方案的高可用性和灾难恢复解决方案。此功能可最大程度地提高一组用户数据库对企业的可用性,支持去中心化。

官方文档关于故障转移群集实例(FCI)AlwaysOn可用性组的异同


为什么使用该方式解决此问题

因为这是微软官方推荐的SQL Server高可用的技术,配置简单,支持去中心化,最多支持1个主副本8个辅副本。


实现该技术的基础条件

  1. Windows Server 2012(或更高)
  2. 非AD域服务器
  3. Windows Server故障转移集群(WSFC)中的一个节点
  4. 确保 WSFC 包含足够的节点来支持可用性组配置。(一节点一副本)
  5. SQL Server 2012年或更高版本


实践的环境

服务角色名称 IP 名称
节点1 193.168.25.125

mesdatadev.net

节点2 193.168.25.124

mesdatatest.net

集群IP(虚拟网址) 193.168.25.201

cluster

侦听器(虚拟网址) 193.168.25.189

guard


实现步骤

服务器已经准备妥当,数据库已经正常安装,关闭防火墙,开始下面的步骤!

搭建故障转移集群(WSFC)

    A. 添加故障转移集群服务

1.打开【服务器管理器】,点击【管理】,点击【添加角色与功能】

2.点击【下一步】

3.点击【下一步】

4.点击【下一步】

5.点击【下一步】

6.勾选【故障转移集群】,如有弹窗点击【添加功能】,点击【下一步】

7.点击【安装】,等待安装成功。

B. 添加DNS后缀

1. 使用 Windows 键 + X 快捷方式,选择【系统】,或者右击我的电脑,点击【属性】,服务器不好截图,这里使用自己电脑演示

C. 找到目录【C:\Windows\System32\drivers\etc】更改下面的【hosts】文件,加入各个节点的IP与主机名,集群IP与集群名称,以及侦听器IP与名称。以下是我的环境需要加入的配置参数:

193.168.25.125 mesdatadev.net
        193.168.25.124 mesdatatest.net
        193.168.25.201 cluster
        193.168.25.189 guard

D. 在其他节点重复A,B与C三个步骤即可

E. 创建故障转移集群并添加节点,此步骤在任意一个需要添加到集群的节点均可操作

1. 打开服务器管理器,点击【工具】,点击【故障转移群集管理器】

2. 点击【操作】,点击【创建集群】

3. 点击【下一步】

4. 输入需要组成节点的主机名称,点击【添加】

5. 点击【下一步】

6. 点击【下一步】

7. 点击【下一步 】

8. 点击【下一步】

9. 点击【下一步】

10.验证通过,点击【完成】

11. 配置集群的名称与IP,这里输入事先定好的名称与IP即可,要跟hosts文件中配置的一致,确认无误后点击【下一步】

12. 点击【下一步】

13. 群集创建成功,点击【完成】

测试故障转移集群(WSFC)是否有效

  A. 节点正常状态

B. 关闭节点1时的状态

C. ping 群集IP,测试是否可用

D. 到这里群集就配置成功了

搭建AlwaysOn可用性组

A. 开启AlwaysOn可用性组:找到SQL Server的配置管理器,选中SQL Server服务,选中服务实例,弹窗时选中AlwaysOn高可用,点击启用AlwaysOn可用性组,点击应用,每个节点的数据库都要设置该项。

B. 设置一个共享文件夹,群集上的节点均可正常访问即可,用于后面同步证书以及第一次的数据同步。

    D. 设置密钥与证书,设定节点一位主副本,节点二为辅副本;

        1. 节点一的脚本:根据自身的环境进行修改

-- 节点一上执行:创建主密钥/证书/端点,备份证书到共享文件夹中。
USE master;
GO---- 设定密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456.M';
GO
---- 修改密钥,假如不小心输错
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '123456.M';  CREATE CERTIFICATE Cert_1
WITH SUBJECT = 'Cert_1',
START_DATE = '2017-12-01',EXPIRY_DATE = '2099-12-31'; --证书的有效时间
GO
----导出证书,将证书放在共享文件夹里面
BACKUP CERTIFICATE Cert_1
TO FILE = '\\MESDATADEV\temp\Cert_1.cer';
GO---创建端点,
----此账户是连接数据库的账户
---侦听端口,1024 和 32767 之间的任何数字都有效。侦听IP地址,默认值为 ALL,表示侦听器将接受任何有效 IP 地址上的连接
CREATE ENDPOINT [SQLAG_Endpoint]
AUTHORIZATION [MESDATADEV\Administrator]-- 账户
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)-- 端口
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_1, ENCRYPTION = REQUIRED ALGORITHM AES)
GO---- 执行到这里时,请确保各个节点,设置密钥,生成证书并导出
---- 在主要副本上,还原所有次要副本证书。
---- 在每个次要副本上,还原主要副本的证书,另外在任何其他副本上,也可能是还原主要副本的证书
CREATE CERTIFICATE Cert_2
FROM FILE = '\\mesdatadev\temp\Cert_2.cer';
GO

2. 节点二的脚本:根据自身的环境进行修改

-- 节点二上执行:创建主密钥/证书/端点,备份证书到共享文件夹中。
USE master;
GO---- 设定密钥
CREATE MASTER KEY ENCRYPTION BY PASSWORD = '123456.M';
GO
---- 修改密钥,假如不小心输错
ALTER MASTER KEY REGENERATE WITH ENCRYPTION BY PASSWORD = '123456.M';  CREATE CERTIFICATE Cert_2
WITH SUBJECT = 'Cert_2',
START_DATE = '2017-12-01',EXPIRY_DATE = '2099-12-31'; --证书的有效时间
GO
----导出证书,将证书放在共享文件夹里面
BACKUP CERTIFICATE Cert_2
TO FILE = '\\MESDATADEV\temp\Cert_2.cer';
GO---创建端点,
----此账户是连接数据库的账户
---侦听端口,1024 和 32767 之间的任何数字都有效。侦听IP地址,默认值为 ALL,表示侦听器将接受任何有效 IP 地址上的连接
CREATE ENDPOINT [SQLAG_Endpoint]
AUTHORIZATION [MESDATATEST\Administrator]-- 账户
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)-- 端口
FOR DATA_MIRRORING
(ROLE = ALL,AUTHENTICATION = CERTIFICATE Cert_2, ENCRYPTION = REQUIRED ALGORITHM AES)
GO---- 执行到这里时,请确保各个节点,设置密钥,生成证书并导出
---- 在主要副本上,还原所有次要副本证书。
---- 在每个次要副本上,还原主要副本的证书,另外在任何其他副本上,也可能是还原主要副本的证书
CREATE CERTIFICATE Cert_1
FROM FILE = '\\mesdatadev\temp\Cert_1.cer';
GO

3. 如果出现没有权限导出证书,检查实例的账户是否有权限

E. 创建可用性组

1. 在主副本上准备一个数据库,输入一些测试数据,并且进行备份,我这里的主副本是节点一。

2. 选中Always On高可用,点击新建可用性组向导

3.  点击【下一步】

4. 输入可用性组名称

5. 选择需要同步的数据库,点击【下一步】

6. 点击【添加副本】,登录另一个节点的数据库实例即可

7. 根据需要配置,配置的含义在官方中有详细的描述。

8. 配置备份首选项,在节点一进行备份,点击【下一步】。

9. 选择数据同步的方式,选中【完整的数据库和日志备份】,输入事先准备好的共享文件目录,点击【下一步】

10. 验证,这里没有配置侦听器,所以有警告,侦听器可以后面配置,不碍事,点击【下一步】

11. 完成

12. 如果辅副本上从主副本同步的数据库一直卡死在 正在还原 状态,可以先把数据从可用性组上删除,没有出现该问题直接看【15】

13. 删除时要在主副本上操作。

14. 继续添加刚才删除的数据库,后面的步骤和创建可用性组向导的方式差不多,就不再截图了

15. 成功后的效果图

16. 数据库同步成功后,开始添加侦听器,可用性组侦听器是一个虚拟网络名称 (VNN),客户端可连接到此名称以访问 AlwaysOn 可用性组的主副本或辅助副本中的数据库。

17. 设置侦听器DNS名称与虚拟IP,使用事先设定的名称与IP,端口使用SQL Server默认的端口1433,点击【下一步】。

18. 侦听器配置成功,做完这一步,基本上就结束了,接下来验证配置是否成功。

测试高可用是否有效

A. 检查数据是否能正常同步:修改主副本中数据库的数据,然后在辅副本中进行查看是否同步。

    B. 检查侦听器是否可用:使用侦听器的IP登录数据库查看是否能够正常访问。

    C. 是否能进行故障转移:重启主副本的数据库服务,查看辅副本是否转换为主副本。


总结

A. 整个配置的话,步骤比较长,总体可分两部分,一个是故障转移集群的配置,一个是可用性组配置。

B. 需要耐心,小心细致。


参考资料

    文档:不建议先看,建议先把整体的实现方式看完,因为官方文档实在过于详细,文档嵌文档,而且可读性不好,但是有个大体的了解再看的话会很有帮助,毕竟是官方!文档在此!!!!

    博客:SQL Server AlwaysON从入门到进阶系列文章

使用Always on方式搭建SQL Server的域独立可用性组数据库集群相关推荐

  1. sql server只读_如何在SQL Server 2016中为可用性组配置只读路由

    sql server只读 The SQL Server Always On Availability Groups concept was introduced the first time in S ...

  2. 当SQL Server爱上Linux:配置 SQL Server 2017 上的可用性组初体验

    作者 | 张乐奕:Oracle ACE 总监,ACOUG (中国 Oracle 用户组)联合发起人.Oracle 数据库高可用解决方案与  Exadata 一体机专家.长于数据库故障诊断,性能调优.作 ...

  3. 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http: ...

  4. (转) 从0开始搭建SQL Server AlwaysOn 第三篇(配置AlwaysOn)

    原文地址: http://www.cnblogs.com/lyhabc/p/4682986.html 这一篇是从0开始搭建SQL Server AlwaysOn 的第三篇,这一篇才真正开始搭建Alwa ...

  5. 从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点)

    从0开始搭建SQL Server AlwaysOn 第四篇(配置异地机房节点) 第一篇 http://www.cnblogs.com/lyhabc/p/4678330.html 第二篇 http:// ...

  6. 在Windows Server 2012 R2中搭建SQL Server 2012故障转移集群

    需要说明的是我们搭建的SQL Server故障转移集群(SQL Server Failover Cluster)是可用性集群,而不是负载均衡集群,其目的是为了保证服务的连续性和可用性,而不是为了提高服 ...

  7. 用JDBC直连方式访问SQL Server 2005详解

    用JDBC直连方式访问SQL Server 2005详解 1.安装JDK,配置其环境变量:(笔者所用版本为1.6版) (1)从官方网http://java.sun.com/jdk下载安装文件. (2) ...

  8. 【Microsoft Azure 的1024种玩法】四十八.基于Azure Virtual Machines快速搭建SQL Server应用

    [简介] SQL Server系列软件是Microsoft 公司推出的关系型数据库管理系统,本文的主要内容是围绕着Azure Virtual Machines 来快速搭建SQL Server应用,使我 ...

  9. Asp.net使用oledb方式连接SQL server

    ASP.net 使用OleDb对象方式连接sql server 1.首先要导入oledb.net数据提供程序的命名空间 2.OleDb方式连接sql server 的语法格式为: OleDbConne ...

最新文章

  1. 7.Spring Security 退出登录
  2. python3 __import__ 简介
  3. linux系统编码修改
  4. mysql proxies_priv_Mysql5.7.18利用MySQLproxies_priv实现类似用户组管理实例分享
  5. Sharepoint中遭遇The Path specified cannot be used at this time.
  6. 学python好找工作么-学完Python好找工作吗?为什么有人学完找不到工作?
  7. 卡尔曼滤波matlab_卡尔曼滤波(kalaman Filter)
  8. Node中的Http模块和Url模块的使用
  9. 神经网络初始化trick:大神何凯明教你如何训练网络!
  10. 雷军自述:我十年的程序员生涯
  11. DataFormatString格式化
  12. Oracle用户管理的备份与恢复(冷热)
  13. 通过完全由有理数构成的区间套来揭示无理数的存在
  14. 海信智能电视如何看电视直播
  15. 网上教务评教管理系统(教学评价系统)
  16. 移动安全规范 — 1 -WIFI连接安全规范
  17. 如何做好区块链社区?得社区者得天下
  18. 【无标题】https://e-cloudstore.com/ec/api/applist/index.html#/
  19. Hello New World 写在 Conflux 网络 Tethys 上线之际
  20. 计算机毕业设计php_thinkphp_vue的校园论坛网站

热门文章

  1. bootstrapValidator 版本差异问题导致的submitHandler失效问题
  2. 鸿蒙可以安装安卓app吗,华为鸿蒙支持安卓应用吗 华为鸿蒙OS适配应用有哪些
  3. 实验二 电压放大电路实验
  4. 全景视频中后期加名字追踪
  5. 配置阿里云负载均衡全站HTTPS集群
  6. ios7版 30天精通iPhone手机编程
  7. Mysql系列之创建用户、删除用户、修改密码
  8. 定位BUG是前端还是后端问题?
  9. ARKit之路-AR截屏
  10. VS中MessageBox与AfxMessageBox用法与区别