SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group
前言:
- Windows Server AD域
- DNS基础设施
- DHCP(如需)
- Windows Server Failover Cluster(WSFC)
- WSFC上的节点
为什么使用AlwaysOn可用组?
- 多网卡及TCP/IP网络用于网络冗余。
- 新的多数节点集仲裁模型 (从 Windows server 2003 SP1 开始) 移除磁盘依赖项,并增加对多站点群集的支持。
- 使用多个计算机节点以抵消核心节点硬件故障(如主板等)。
什么是AlwaysOn可用组:
- 副本数量:SQL 2012中最大5个:1主4次要副本。SQL 2014中为1主8次要共9个副本。
- 同步复制的设置:最大3个,其他副本只能使用异步模式。
- 自动故障转移数量:最多2个,并且必须为同步模式。
行版本的影响:
可读辅助副本? | 启用了快照隔离或 RCSI 级别隔离? | 主数据库 | 辅助数据库 |
---|---|---|---|
否 | 否 | 无行版本或 14 个字节的系统开销 | 无行版本或 14 个字节的系统开销 |
否 | 是 | 行版本和 14 个字节的系统开销 | 无行版本但有 14 个字节的系统开销 |
是 | 否 | 无行版本但有 14 个字节的系统开销 | 行版本和 14 个字节的系统开销 |
是 | 是 | 行版本和 14 个字节的系统开销 | 行版本和 14 个字节的系统开销 |
缺少统计信息的影响:
优点:
- 没有共享存储:每个服务器\实例都使用本地存储,并且移除了共享存储的单点故障风险。
- AlwaysOn侦听器服务用于接受集中请求到HA数据库组。
- 多个可用可用数据库取代了传统的一主一备(往往是不可读)。
- 更合理的Failover功能。
- 在副本层面挂起数据移动。
- 支持多IP子网。
- 可以把备份负载分摊到次要数据库。
部署可用组:
是否要使用列出的端点? 英文: The Endpoints tab lists at least one endpoint that uses only Windows Authentication. However, the server instance might be running under a nondomain account. To use the listed endpoint, change the corresponding SQL Server service account to a domain account. To continue using the nondomain account, alter the endpoint to use a certificate. Do you want to use the listed endpoints?
对于这种警告,通常有两种方式:
- 最合理:各节点使用同一个域账号启动SQL Server,可以使用较低权限的域用户账号。
- 权宜之计:在有些情况下,账号并非随你操作,所以你可以使用类似语句授权:
- GRANT CONNECT ON endpoint::hadr_endpoint
- TO [domain\servername$]
GRANT CONNECT ON endpoint::hadr_endpoint
TO [domain\servername$]
- CREATE ENDPOINT [Hadr_endpoint]
- STATE=STARTED
- AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
- FOR DATA_MIRRORING (ROLE = ALL
- , AUTHENTICATION = WINDOWS NEGOTIATE
- , ENCRYPTION = REQUIRED ALGORITHM AES)
CREATE ENDPOINT [Hadr_endpoint]
STATE=STARTED
AS TCP (LISTENER_PORT = 5022, LISTENER_IP = ALL)
FOR DATA_MIRRORING (ROLE = ALL
, AUTHENTICATION = WINDOWS NEGOTIATE
, ENCRYPTION = REQUIRED ALGORITHM AES)
但是基于很多原因,还是尽量使用相同的、有足够权限的域账号进行配置。关于这部分的内容可以查阅官方文档:可用性组侦听器和服务器主体名称 (SPN)
AG1listener.Adventure-Works.com
的可用性组配置 SPN,所有实例都应被配置为在域帐户 corp/svclogin2
下运行:
- setspn -A MSSQLSvc/AG1listener.Adventure-Works.com:1433 corp/svclogin2
setspn -A MSSQLSvc/AG1listener.Adventure-Works.com:1433 corp/svclogin2
接下来是【备份首选项】,如下图:
- FULL:完整,其字面解释如下图,这个选项要求完整和日志备份,并把备份还原到每个次要副本中。
- Join Only:仅联接,已经以【NORECOVERY】模式还原数据库,这个选项直接把库加入可用组中。
- Skip initial data synchronisation:跳过初始化数据同步,这个选项可以让你在完成向导之后还原数据库和把次要副本加入AlwaysON可用性组中。
- get-clusterresource -cluster "WindowsClusterName" | where-object{$_.ResourceType -ilike "SQL Server Availability Group"} | ft
get-clusterresource -cluster "WindowsClusterName" | where-object{$_.ResourceType -ilike "SQL Server Availability Group"} | ft
注意替换上面的WindowsClusterName。
- ALTER AVAILABILITY GROUP [YourAG] FAILOVER
ALTER AVAILABILITY GROUP [YourAG] FAILOVER
配置只读路由:
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE1\INST1'
WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE1\INST1'
WITH
(SECONDARY_ROLE (
READ_ONLY_ROUTING_URL
=
N'TCP://stokecsclnode1.stokecs2.co.uk:58001'
));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE2\INST1'
WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE2\INST1'
WITH
(SECONDARY_ROLE (
READ_ONLY_ROUTING_URL
=
N'TCP://stokecsclnode2.stokecs2.co.uk:58001'
));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE3\INST1'
WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE3\INST1'
WITH
(SECONDARY_ROLE (
READ_ONLY_ROUTING_URL
=
N'TCP://stokecsclnode3.stokecs2.co.uk:58001'
));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE1.george.com:1433'));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE2.george.com:1433'));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE3' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE3' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE3.george.com:1433'));
ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE1' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE1' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE1.george.com:1433')); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE2' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE2' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE2.george.com:1433')); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE3' WITH (SECONDARY_ROLE (ALLOW_CONNECTIONS = READ_ONLY)); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE3' WITH (SECONDARY_ROLE (READ_ONLY_ROUTING_URL = N'TCP://CLUSTERNODE3.george.com:1433'));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE1\INST1'
WITH (PRIMARY_ROLE (
READ_ONLY_ROUTING_LIST
= (
'STOKECSCLNODE3\INST1', 'STOKECSCLNODE2\INST1', 'STOKECSCLNODE1\INST1'
)));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE2\INST1'
WITH (PRIMARY_ROLE (
READ_ONLY_ROUTING_LIST
= (
'STOKECSCLNODE3\INST1', 'STOKECSCLNODE1\INST1', 'STOKECSCLNODE2\INST1'
)));
ALTER AVAILABILITY GROUP
[STOKEAG_1]
MODIFY REPLICA ON
N'STOKECSCLNODE3\INST1'
WITH (PRIMARY_ROLE (
READ_ONLY_ROUTING_LIST
= (
'STOKECSCLNODE2\INST1', 'STOKECSCLNODE1\INST1', 'STOKECSCLNODE3\INST1'
)));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE3', 'CLUSTERNODE2', 'CLUSTERNODE1')));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE3', 'CLUSTERNODE1', 'CLUSTERNODE2')));
- ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
- N'CLUSTERNODE3' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE2', 'CLUSTERNODE1', 'CLUSTERNODE3')));
ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE1' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE3', 'CLUSTERNODE2', 'CLUSTERNODE1'))); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE2' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE3', 'CLUSTERNODE1', 'CLUSTERNODE2'))); ALTER AVAILABILITY GROUP GeorgeAG MODIFY REPLICA ON
N'CLUSTERNODE3' WITH (PRIMARY_ROLE (READ_ONLY_ROUTING_LIST = ('CLUSTERNODE2', 'CLUSTERNODE1', 'CLUSTERNODE3')));
挂起数据移动:
测试故障转移场景和观察结果:
自动故障转移:
手动和强制故障转移:
在故障转移过程中群集角色资源状态:
总结:
SQL Server AlwaysON从入门到进阶(6)——分析和部署AlwaysOn Availability Group的更多相关文章
- SQL Server AlwaysON从入门到进阶(1)——何为AlwaysON?
本文属于SQL Server AlwaysON从入门到进阶系列文章 本文原文出自Stairway to AlwaysOn系列文章.根据工作需要在学习过程中顺带翻译以供参考.系列文章包含: SQL Se ...
- SQL Server AlwaysON从入门到进阶(3)——基础架构
本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本文将更加深入地讲解WSFC所需的核心组件.由于AlwaysOn和FCI都需要基于WSFC之上,因此我们首先要了解在Wind ...
- SQL Server AlwaysON从入门到进阶(2)——存储
本文属于SQL Server AlwaysON从入门到进阶系列文章 前言: 本节讲解关于SQL Server 存储方面的内容,相对于其他小节而言这节比较短.本节会提供一些关于使用群集或者非群集系统过程 ...
- SQL Server审计功能入门:SQL Server审核 (SQL Server Audit)
原文:SQL Server审计功能入门:SQL Server审核 (SQL Server Audit) 介绍 Audit是SQL Server 2008之后才有的功能,它能告诉你"谁什么时候 ...
- SQL Server审计功能入门:更改跟踪(Change Tracking)
原文:SQL Server审计功能入门:更改跟踪(Change Tracking) 介绍 更改跟踪是一种轻量型解决方案,它为应用程序提供了一种有效的更改跟踪机制.常规的,自定义变更跟踪和读取跟踪数据, ...
- SQL Server审计功能入门:CDC(Change Data Capture)
原文:SQL Server审计功能入门:CDC(Change Data Capture) 介绍 SQL Server 2008引入了CDC(Change Data Capture),它能记录: 1. ...
- Sql Server新手学习入门
Sql Server新手学习入门 http://www.tudou.com/home/_117459337
- 对Oracle 、SQL Server、MySQL、PostgreSQL数据库优缺点分析
对Oracle .SQL Server.MySQL.PostgreSQL数据库优缺点分析 Oracle Database Oracle Database,又名Oracle RDBMS,或简称Oracl ...
- sql注入(从入门到进阶)
随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多.但是由于这个行业的入门门槛不高,程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进 ...
随机推荐
- WebView根据加载的内容来控制其高度
一.先设置WebView的高度为0,然后在其加载结束后的代理方法中根据contentSize设置其高度 //初始话一个UIWebView: self.webView = [[[UIWebView al ...
- Sharepoint2013搜索学习笔记之设置sharepoint网站内容源(五)
第一步,进入管理中心,点击管理应用程序,点击search service 应用程序进入到搜索管理配置页面,点击内容源 第二步,点击新建内容源,给内容源命名,在爬网内容类型中选sharepoint网站, ...
- IT兄弟连 JavaWeb教程 AJAX以及JSON字符串经典案例
案例需求:客户端发送AJAX请求服务器端获取用户信息的数据. 案例实现: 在服务器端要将Java对象转换成JSON字符串,如果使用拼接JSON字符串的方式非常繁琐,并且非常容易出错,所以一般会借助第三 ...
- Python学习笔记(正则表达式)
\b - 表示以什么开头或结尾 \d - 匹配数字 \w - 匹配字母或数字或下划线或汉字(我试验下了,发现3.x版本可以匹配汉字,但2.x版本不可以) \s - 匹配任意的空白符 ^ - 匹配字符串 ...
- python 之 日志输出格式
# 定义日志文件的路径LOG_PATH=r'D:\code\SH_fullstack_s1\day15\ATM\log\access.log'BOSS_LOG_PATH=r'D:\code\SH_fu ...
- IDEA 小技巧之书签与收藏
原文地址:IDEA 小技巧之书签与收藏 最近翻阅 Spring 源码,由于源码调用链路很长,等看了十几类方法之后,想看前面调用方法就很不方便,需要查找历史的查看记录.还有时候看着看着就忘了中间某个方法 ...
- PJzhang:python快速搭建局域网文件共享服务器
猫宁!!! 参考链接:https://www.cnblogs.com/nopnog/p/8116848.html https://www.cnblogs.com/yili16438/p/d320932 ...
- BZOJ 1069: [SCOI2007]最大土地面积(旋转卡壳)
题目链接~ 1069: [SCOI2007]最大土地面积 思路很简单,极角排序求完凸包后,在凸包上枚举对角线,然后两边分别来两个点旋转卡壳一下,搞定! 不过计算几何的题目就是这样,程序中间的处理还是比 ...
- 黑马旅游网案例 Bug集锦
- 引入clipboard.js
引入clipboard.js var clipboardJS = new ClipboardJS('#accept-data'); // 括号内的是选择器