SQL Server 2012 AlwaysOn 亲身实历记
亲身经历的一个项目,老板忽然提出,对数据库的负债要实施分流,来个数据库一个负责读,而另一个负责写,后台是需要同步两个数据库的状态。找了很多的资料,发现新版的alwayson可以实现这个功能。
研读了alwayson 的大量资料,发现他的功能增加了不少,不但不再依靠原来的share disk的架构,而且增加了更大的灵活性,据说要取代log shipping 和Mirror database。不是帮助微软吹嘘,真的进步不少,但还是一个库是只读的,一个为可以读写。
一下是实施的具体步骤,和在实施中说遇到的问题及解决办法:
一 实施的架构
我们采用了三台服务器,其中两台是SQL Server,另外一台是文件服务器(用来投票)。架构如下:

微软有写过白皮书,他所介绍的建构是四台机器,其中一台在不同的站点中,我们公司没有那么有钱,我们只是采用了2台机器的架构。
具体的微软的文档可以参照我之后的文档列表。
二 准备步骤
考虑需要用什么样的投票架构。在这之前,微软使用的架构是share disk的高冗余建构,因为要使用共享的存储,很多条件下难以实施,才采用了现在的几种该机的方法,新增加的有三种,共四种,如下,是微软的原话,不多解释,有兴趣的可以顺着我后面的链接,研究。

但总的一条原则是: 总的服务器数量最好是奇数。
我们采用了3台服务器的工作方式(其中一台为文件服务器)
三 详细步骤如下
1. 在所有的三台Windows server 2012 服务器上安装Windows Failover Cluster Server. 并且运行Windows failover Cluster 向导新建一个Windows Cluster.不一定要有共享的存储。我采用的仲裁方式为:偶数站点+文件共享 的方式建立仲裁机制。用的另外一台文件服务器做的quorum. 仲裁方式的选定需要注意的是: 所有的Node(包括文件服务器)的总数最好为奇数(Odd).
详细的配置如下:

2.建立好Windows Failover Cluster 后,再在每个server 上安装SQL Server.在SQL Server Engine中的Avaiable Group 标签中,输入刚刚建立好的Windows Failover Cluster 名称。开启Avaiable Group 功能。

3. 根据Avaliable Group 的向导建立新的AG组。比较重要的步骤是建立AG的侦听器。其中要注意的地方是:刚刚建立的WFCS的名称中的侦听(wfsc 的侦听)对所在的域控制的OU具有特殊的权限--'Create object' , ' Read all priority' 。其目的是,需要通过WFCS的名称来建立具体Role 的侦听器(侦听器有自己的名称和所对应的IP地址),WFCS 通过自己的域账号(类似于服务器名称)建立自己Role中的侦听器(AG也属于WFCS中的一个具体的应用。

如果顺利AG就算是建立好了。没有什么特别的东西。根据微软的白皮书,一步步的往下走就可以了。
但是,微软毕竟是微软。在部署的过程中,遇到了很多的问题,很多在白皮书中没有设计,好在都解决了。现在细数一下,这些微软给我们挖了的这些坑。坑的这个词,是我在遇到问题后,才找资料时看到的有些同仁说的。觉得很恰当,拿来主义了。
坑一: 建立好AG组后,不能打开WFCS控制见面,出现如下错误:

是WFCS自身的问题,需要安装相应的补丁:KB2750149
坑二: 所建立的侦听不能自动的分配SQL Server的链接(读链接和写链接)。AG的一个很大的特点就是:可以实现数据库的读链接和写链接的分离。但是测试后,发现说建立的alwayson 的侦听不能实现读写的数据库分离。很郁闷,在测试时,读和写的Session都集中到了一台服务器上。还是在微软官方的MSDN上找到了答案。
1. 建立好AG后,需要在不同的服务器上设置Read-only routing list .只需在一台服务器上(primary)上设置即可,会自动同步到其他的(secondary)服务器上。命令如下,只能用SQL或Powershell 完成。
1)建立secondary 的URL链接。
微软的例子如下:

AG1:是AG的名称,可以根据自己的定义修改。
computer01: 说明在那台SQL上,
TCP后面的地址也要修改。
2)建立Read-Only list 表,原理是: 主的SQL Server发现有只读的session进入时,会根据这个表来移到到底在哪个只读服务器接收。

因为每个服务器都有可能为primary 服务器,所以两个都要加。
坑三: 链接Session 只读的一定要制定 Application intent =Read Only 和链接的AG数据库。否则还是不能分离读和写sessions.

微软参考:
1. alter avaiablity group
http://msdn.microsoft.com/zh-cn/library/ff878601.aspx
2. Trobleshoot alwaysOn availablity
http://msdn.microsoft.com/zh-cn/library/ff878308.aspx
3.AG Listeners and Client Connectivity
http://msdn.microsoft.com/zh-cn/library/hh213417.aspx
4.Configure Read-Only Routing
http://msdn.microsoft.com/zh-cn/library/hh710054.aspx
5. how to configure AG
http://blogs.msdn.com/b/alwaysonpro/archive/2014/03/31/use-readintent-routing-with-azure-alwayson-availability-group-listener.aspx
6.Chinese version about AG
http://www.cnblogs.com/aarond/p/3679915.html
SQL Server 2012 AlwaysOn 亲身实历记的更多相关文章
- SQL Server 2012 AlwaysOn集群配置指南
1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...
- SQL SERVER 2012 AlwaysOn - 维护篇 03
搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...
- SQL SERVER 2012 AlwaysOn– 数据库层面 02
搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)
这一篇是从0开始搭建SQL Server 2012 AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 操作步骤: 1.安装SQL server ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)
本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...
- 从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)
随着业务发展,公司需要提高数据安全与性能需求,所以需要对新技术预研(先采坑),做技术积累: 了解相关AlwaysOn 故障转移集群(热备),数据路由(ICX),Moebius(莫比斯数据路由) 决定测 ...
- SQL SERVER 2012 AlwaysOn - 操作系统层面 01
搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...
- SQL Server 2012 AlwaysON 同步延迟时间
SELECT availability_mode_desc , role_desc , replica_server_name , last_redone_time , GETDATE() now , ...
- 服务器搭建域控与SQL Server的AlwaysOn环境过程(三)配置故障转移
0 引言 主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的. 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Windows Server20 ...
随机推荐
- Oracle用法集锦
查询第一条数据 修改表名 ALTER TABLE tablename RENAME TO newtablename 修改列名: ALTER TABLE BD_PRI RENAME COLUMN EU_ ...
- BackgroundWorker学习
后台代码: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data ...
- [Linux] - Docker pure-ftp使用
Docker使用pure-ftp的方法及配置 1.用docker下载pure-ftp docker pull stilliard/pure-ftpd:hardened 2.下载完后直接运行 docke ...
- GDI+ 操作TIFF ccitt t.6 压缩
Bitmap Bi=new Bitmap("C:\img.tif"); SaveFileDialog sfdlg = new SaveFileDialog(); sfdlg.Fil ...
- 使用sql语句创建修改SQL Server标识列(即自动增长列)
一.标识列的定义以及特点SQL Server中的标识列又称标识符列,习惯上又叫自增列.该种列具有以下三种特点:1.列的数据类型为不带小数的数值类型2.在进行插入(Insert)操作时,该列的值是由系统 ...
- 黄聪:C#中HtmlAgilityPack判断是否包含或不包含指定的属性或值
//选择不包含class属性的节点 var result = node.SelectNodes(".//span[not(@class)]"); //选择不包含class和id属性 ...
- MVC+EasyUI 菜单导航的实现
一个简单的使用mvc+easyUi 动态菜单显示 直接上代码 前端 function initMenu() { $.get("/Admin/Home/GetNav", functi ...
- QQ右下角浮动窗口
<html><head><meta http-equiv="Content-Type" content="text/html; charse ...
- Python基础语法(二)
类中的方法定义前如果有 @staticmethod 则此方法通过类名调用,如:dict.fromkeys() : 如果没有,则此方法通过对象调用 三元运算 name=值1 if 条件 else 值2 ...
- 带你入门带你飞Ⅰ 使用Mocha + Chai + Sinon单元测试Node.js
目录 1. 简介 2. 前提条件 3. Mocha入门 4. Mocha实战 被测代码 Example 1 Example 2 Example 3 5. Troubleshooting 6. 参考文档 ...