亲身经历的一个项目,老板忽然提出,对数据库的负债要实施分流,来个数据库一个负责读,而另一个负责写,后台是需要同步两个数据库的状态。找了很多的资料,发现新版的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 亲身实历记的更多相关文章

  1. SQL Server 2012 AlwaysOn集群配置指南

    1. AlwaysOn介绍 AlwaysOn是SQL Server 2012提供的全新综合.灵活.高效经济的高可用性和灾难恢复解决方案.它整合了镜像和群集的功能,基于OS 故障转移群集(Windows ...

  2. SQL SERVER 2012 AlwaysOn - 维护篇 03

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

  3. SQL SERVER 2012 AlwaysOn– 数据库层面 02

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

  4. 从0开始搭建SQL Server 2012 AlwaysOn 第三篇(安装数据,配置AlwaysOn)

    这一篇是从0开始搭建SQL Server 2012 AlwaysOn 的第三篇,这一篇才真正开始搭建AlwaysOn,前两篇是为搭建AlwaysOn 做准备的 操作步骤: 1.安装SQL server ...

  5. 从0开始搭建SQL Server 2012 AlwaysOn 第二篇(配置故障转移集群)

    本篇主要讲配置Windows 故障转移集群及遇到的相关问题(坑),因为AlwaysOn是基于Windows的故障转移集群的 在讲解步骤之前需要了解一下故障转移集群仲裁配置 四种集群的仲裁配置: 1.多 ...

  6. 从0开始搭建SQL Server 2012 AlwaysOn 第一篇(AD域与DNS)

    随着业务发展,公司需要提高数据安全与性能需求,所以需要对新技术预研(先采坑),做技术积累: 了解相关AlwaysOn 故障转移集群(热备),数据路由(ICX),Moebius(莫比斯数据路由) 决定测 ...

  7. SQL SERVER 2012 AlwaysOn - 操作系统层面 01

    搭建 AlwaysOn 是件非常繁琐的工作,需要从两方面考虑,操作系统层面和数据库层面,AlwaysOn 非常依赖于操作系统,域控,群集,节点等概念: DBA 不但要熟悉数据库也要熟悉操作系统的一些概 ...

  8. SQL Server 2012 AlwaysON 同步延迟时间

    SELECT availability_mode_desc , role_desc , replica_server_name , last_redone_time , GETDATE() now , ...

  9. 服务器搭建域控与SQL Server的AlwaysOn环境过程(三)配置故障转移

    0 引言 主要讲述如何搭建故障转移集群,因为AlwaysOn是基于Windows的故障转移集群的. 在讲解步骤之前需要了解一下故障转移集群仲裁配置 下面图片来自<Windows Server20 ...

随机推荐

  1. Java-接口和抽象类区别

    在类的设计中,需要明确一个原则,一个类不要去继承一个已经实现好的类,只能继承抽象类或实现接口,如果接口和抽象类都可以使用,那么优先使用接口,避免继承局限

  2. Head First 设计模式之工厂模式(Factory Pattern)

    前言: 除了使用new操作符之外,还有更多制造对象的方法.你将了解到实例化这个活动不应该总是公开的进行,也会意识到初始化会造成“耦合”的问题.工厂模式将会从复杂的依赖中帮你脱困. 1.   简单的工厂 ...

  3. Hadoop总结篇之四---底层通信是怎么做到的

    上一篇介绍了一个job的提交过程.期间多次提到通信协议.那么协议是什么? 协议其实就是通信的双方所遵守的一套规范,这套规范规定了通信时传输的数据的固定的格式. 4.1 RPC协议:在hadoop中,我 ...

  4. 黄聪:关闭Win2003开机提示“上次意外关机”对话框

    很多人在使用win2003服务器(特别是vps)的时候,都会意外关机,然后出现开机提示“上次意外关机”对话框,如果不及时发现,会影响到使用该服务器的网站,所以必须把这提示关闭,方法如下: 1.开始菜单 ...

  5. 【学】AngularJS日记(3)- $apply(), run()方法

    $scope.$apply()方法可以强制$apply()里运行的函数所改变的model里的数据直接反应到view里,因为在angular的环境中,有时会用到原生js或者jquery的时候,这些行为有 ...

  6. Sublime Text 2/3安装使用及常用插件

    一.介绍 Sublime Text 是一款较新的编辑器,它轻量.简洁.高效,良好的扩展性以及跨平台等特性,使得越来越多的开发人员喜爱.它是一款收费的商业软件,但可以免费无限制无限期的试用,只会偶尔提醒 ...

  7. [Linux] IP绑定解释 BindIp

    一.缘由: 今天安装Mongodb,本来想限制只能内网或者某几台机器可以访问,看到配置文件有个net.bindIp选项, 就自以为是的认为,他可以像nginx那样限制访问来源IP,其实大错特错.这里配 ...

  8. mongodb配置文件

    启动MongoDB有2种方式,一是直接指定配置参数,二是指定配置文件.这里先介绍配置文件,启动方式如下: 1.mongod --config /etc/mongodb.conf 配置如下: verbo ...

  9. maven scope含义的说明

    依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中.让我们详细看一下每一种范围: compile (编译范围) compile是默认的范围:如果没有提供一个范围,那该依赖的 ...

  10. C#封装好的Win32API

    Kernel.cs using System; using System.Runtime.InteropServices; using System.Text; using HANDLE = Syst ...