SQLserver Alwayson实现要点

之前一直没有完全弄清楚Alwayson的原理,包括可用组的概念,集群的架构是怎么样的,故障转移是如何实现的,读写分离是如何实现的,故障转移和可用组群的关系,稍微学习总结一下。
最重要的结论是:
1、标准的AlwaysOn方案提供读写分离的是统一的listener(包括虚拟IP、连接地址和端口,由WSFC机制在配置时创建);但实际通信通过重定向完成,即客户端实际通信不是和listener而是与真正的某个副本通信。
2、读写分离需要应用感知是否只读请求,需要数据库驱动支持并包含在请求中表明是Readonly还是Readwrite
3、故障切换是实例级别,多个主备实例提供同一个的浮动IP地址,客户端无感知;可用组是数据库级别,客户端有感知(通过listener重定向)。

一、集群架构
实现alwayson需要部署SQLServer集群,而实际上所谓SQLServer集群其实是部署在Windows集群上的一个应用程序,本质上是需要部署一个Windows故障转移集群(WSFC)。SQLServer集群则是部署在Windows集群每个节点上的SQLServer应用,最多有个16个节点。
按照官方的架构,实际上有三个层次:
层次一:Windows集群,Windows集群本身也有底层服务器的故障转移功能;
层次二:AlwaysOn高可用组,一个高可用组包含了一个主副本(读写副本)和多个辅助副本(只读副本,2014版最多8个),每个副本可以可以是单个SQLServer节点,也可以是多个(2个?)SQLServer节点组成的故障转移集群。一个高可用组对应了一个侦听器,侦听器通过的浮动IP来实现。
层次三:AlwaysOn故障转移集群,这个集群需要共享存储。
在这里插入图片描述

二、读写分离实现
1、Alwayson高可用组对外是提供了一个统一的访问连接,即侦听器,客户端任何时候都是连接这个Windows集群上配置的SQLserver集群专用侦听器而不是某个节点,侦听器需要事先配置好IP地址、连接串(hostname)和端口(默认1433)。前面提到这个地址是浮动地址。
listener的IP、连接串和端口是WSFC集群配置的,即配置了以后就增加了相应AG的浮动IP、DNS了。

2、高可用组同时配置了一个router,这个router存储了高可用组中每个副本(SQLServer实例)的数据库hostname和端口;当listener发现请求是只读请求时,将在router中查找只读副本的hostname,并通过重定向响应给client,client按照返回的hostname和端口访问只读副本。
上面有两个问题需要解决:
**1)listener如何知道是只读请求?**在client请求中增加当然,这个涉及客户端请求增加相应内容,需要客户端有对应版本才能支持。请求具体见下面ApplicationIntent字段,只有ReadOnly和ReadWrite 两个选项。
Server=tcp:MyAgListener,1433;Database=Db1;IntegratedSecurity=SSPI;ApplicationIntent=ReadOnly;MultiSubnetFailover
**2)如何实现重定向?**在数据库驱动层面实现,比如JDBC/ODBC可以识别重定向消息和需要重新连接的hostname和端口。

3、故障转移集群(FCI)和可用组(AG)的区别
最核心的差异,**FCI是SQLServer实例级别(可以认为是物理级别),AG是数据库级别(逻辑级别)。**因此两者关系就比较清楚了。访问者对实例是无感的,只看到数据库对象(地址、端口、hostname),库的层级在实例上面。对于某个AG中的数据库,它在AG中有多个副本,每个副本都可以是FCI集群,因为副本是逻辑层,它并不了解也不关心底层是单节点还是FCI。副本使用FCI的好处就是增加了这个副本自身的可用性,即单节点down了这个副本并没有不可用,同时FCI的多个实例不能部署在同一个节点(服务器)上。
从AG的概念可以理解:一个AG的所有可用性副本必须运行在Windows群集的不同节点上。运行在同一个节点上的两个不同实例不能用作同一个AG的副本。

在这里插入图片描述

4、实现负载均衡
故障转移群集是用于获得高可用性的,而非用于实现负载平衡。SQL Server 没有任何内置的、自动负载平衡功能。必须通过应用程序的物理设计来实现负载平衡。

参考:
全面学习WSFC:http://blog.51cto.com/wzde2012/2054015
Alwayson介绍:
http://blog.51cto.com/dufei/1386333
http://www.mamicode.com/info-detail-1173395.html
https://blog.csdn.net/DBA_Huangzj/article/details/54015470

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
SQL Server AlwaysOn是一种高可用性和灾难恢复解决方案,它基于SQL Server数据库引擎的一组功能和技术。 要简单搭建SQL Server AlwaysOn,需按以下步骤进行操作: 1. 确保已安装SQL Server数据库引擎,并且在所有参与AlwaysOn的服务器上安装了相同的版本和服务包。 2. 创建一个Windows Server故障转移集群,该集群将作为AlwaysOn配置的基础。确保集群中的每台服务器都满足Windows Server故障转移集群的最低要求。 3. 在每台服务器上打开SQL Server配置管理器,启动SQL Server对应的服务。 4. 在主服务器上创建一个数据库并设置为全同步恢复模式。将该数据库设置为复制到其他参与AlwaysOn的服务器。 5. 在主服务器上进行AlwaysOn的配置,右键点击数据库,选择"属性",然后选择"AlwaysOn高可用性"选项卡。勾选"启用AlwaysOn可用性组"和"自动故障转移"选项。 6. 单击"向导"按钮,按照提示创建可用性组。设置虚拟名称和监听器,选择其中一个服务器作为主服务器,配置备机的读取访问。 7. 在从属服务器上重复步骤6,将其添加到可用性组中。 8. 在主服务器上启动可用性组。 9. 在从属服务器上验证可用性组的配置。确保数据库在主服务器上运行,并且从属服务器显示为已同步。 10. 测试故障转移功能。分别关闭主服务器和从属服务器,观察数据库是否能够自动切换到其他服务器上,并保持数据的一致性。 以上简单搭建SQL Server AlwaysOn的步骤仅是基本流程,具体配置和设置可能因环境和需求的不同而有所差异。建议参考官方文档或咨询专业人员以获取更加详细的指导。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qq_36718740

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值