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

    //innertext 火狐不同版本不兼容 document.getElementById("user-content").textContent=content; 博主使用的是最 ...

  2. Java--super关键字用法

    看了马老师的视频,百度了一下,随即敲了一些代码,super是超人,超级的意思,层面上理解为父类 class Person { Person(){             System.out.prin ...

  3. electron知识点

    1.打开chrome开发工具栏: BrowserWindow.openDevTools();

  4. AutoVue打开ProE工程图中文乱码

    解决办法: 在AutoVue安装目录/Bin/allusers.ini中增加 [Options]ProELang=Chinese_cn

  5. 批处理定时重启print打印服务,解决打印机异常队列堆积

    公司有台打印机,由于是公用的,经常出现一个较大的文档卡在队列里面,导致队列后面的打印无法被执行,人工去清理岂不是太费事了,下面分享一个批处理文件 @echo off echo 计划任务开始执行 3 e ...

  6. winform中messageBox七个参数的使用(转载)

    private void button1_Click(object sender, EventArgs e) { MessageBox.Show(" 1 个参数 ”); } private ...

  7. HTML JavaScripts

    JavaScript JavaScript是一门编程语言,浏览器内置了JavaScript语言的解释器,所以在浏览器上按照JavaScript语言的规则编写相应代码之,浏览器可以解释并做出相应的处理. ...

  8. 将页面打印成excel

    在servlet中调用 try { File fileWrite = new File("D:/Write.xls"); fileWrite.createNewFile(); Ou ...

  9. php 图片base64编码生成dataurl和保存为图片

    <?php header('Content-type:text/html;charset=utf-8'); //读取图片文件,转换成base64编码格式 $image_file = 'aaa.j ...

  10. xcode中使用xib添加autolayout中constrain to margins的不同

    在使用xcode7 在storyboard中添加autolayout中发现 如果添加在view 直接添加到viewcontroller的view 上 constrain to margins    只 ...