注意:微软官方并未正式宣布Lync2013能够使用Sql Server的AlwaysOn高可用性技术,本文只是采取一些旁门左道取巧的办法达到该目的,其实施完成后还存在一些问题和风险,搭来稳定还好,如果真出了啥岔子……阅读本文也需要有一定的Lync2013实施经验,因为其中省略了一些大家熟知的步骤(主要是懒得截图凑篇幅,如果有步骤不明白可以留言交流)
目前据我们所知,Lync的后端SQL数据库高可用只能有两种办法
1、SQL clustering
2、SQL mirroring
(Database software support in Lync Server 2013
https://technet.microsoft.com/en-us/library/gg398990.aspx)
前者需要额外的共享存储,后者需要一台额外的见证服务器。这样一来在中小型高可用架构当中,就会涉及到成本问题。
Alwayson是个好功能,靠着从DAG学来的经验(然而并没有心跳线!?),用事务日志级别的复制保持主副本和辅助副本的同步,只需要使用到本地磁盘;成本低廉。(关于alwayson的原理,如果没听说过,或者跟它不熟,请先参考以下文档:
https://msdn.microsoft.com/zh-cn/library/hh403414.aspx
http://blog.csdn.net/dreamyuzhou/article/details/18989543)
早在2014年的Lync conference上,Lync产品组的人就说过alwayson功能将会添加对Lync的支持,然而时至今日……依然没有官方声称可以了。
于是某天实在忍不住了,仔细想了想其到底是哪里不支持。做了一些分析如下:
其实这是一个先有鸡后有蛋的问题,首先AlwaysOn就跟Exchange的DAG一样,你得先有数据库,然后才能有DAG组。那么同样的,在安装好两台SQL Server之后,我得先建立数据库,然后才能对这些数据库进行AG组的操作。
而且,AlwaysOn就算搭建好了,那么它只提供一个侦听器供调用,这个侦听器的意义是,你只能对现有AG组里的数据库进行增删读写,而不能跳出去,通过这个侦听器来创建数据库。
那么问题来了,Lync 2013在发布拓扑的时候,就开始执行创建数据库的操作了。那,我在发布拓扑的时候,后端数据库连接里填的一定是某个单台数据库服务器名或是某个Cluster的名称,而不能是AlwaysOn的侦听器名称。
OK,那将拓扑里的后端数据库改成侦听器名称不就行了吗?问题又来了,拓扑发布了之后,这玩意儿他不让改…除非删除拓扑,即移除当前的中央存储位置。也就是说,我们在Lync拓扑里,先写其中一台SQL,发布拓扑,让它吭哧吭哧创建完需要的库,接下来杀鸡取卵,把创建好的数据库加到AG组里,然后删除部署,删除中央存储位置,重新发布一个拓扑,里面写的是AG组,这样Lync去检查数据库结构的时候发现,咦!数据库都建好了,只需要做做修改就能用了。然后顺利发布新的拓扑,有了新拓扑,再把Lync前端部署掉,测一下客户端连通性。搞定~
好,思路有了。搭个环境试试吧,毕竟问题不会自己跳出来,而是是动手了才能发现的。
环境里一共需要5台机器:屌丝环境,一切从简。
LyncFE.contoso.com 前端
LyncBE-1.contoso.com 后端节点1
LyncBE-2.contoso.com 后端节点2
DC.contoso.com 域控及CA
win7client.contoso.com 客户端
基本配置部分我就不写了,什么起域控啊,起CA啊,这都是基础知识。
我们首先装好两台后端上的SQL Server 2014,注意Sql Server 2014的小版本,如果是老的版本Lync 2013在创建数据库的时候会报未识别SQL版本。
安装完成之后,还得安装WSFC,即故障转移群集服务,不然这个地方无法勾选。
发挥Windows Server 2012 的优势,一台控制整个场~
接着打开故障转移群集管理器,创建群集。注意在验证群集那一步选择不要验证,要记住,咱很穷,没有共享存储卷!
取个名字,配个ip地址,AlwaysOn毕竟依赖WSFC,还是得认真规划一下这一步的选项。
创建完成之后,再打开Sql Server配置管理器,在SQL实例上单击右键 - 属性,选择AlwaysOn高可用性,然后勾上“启用AlwaysOn可用性组”,两个后端节点都得勾一下。
创建一个共享文件夹,供两个后端节点在创建AlwaysOn当中进行初次数据文件同步,在共享权限里把两台SQL服务器的计算机账户直接加进去给FullControl,免得后面麻烦。
接下来我们打开LyncBE-1即第一台节点上的SQL 控制台,创建一个临时的数据库,并且确认这个数据库的选项里头,恢复模式为“完整”
然后对其进行一次“完整”备份
备份完成之后,开始创建alwaysOn的可用性组,取个名字叫SqlAG好了。
此时我们的临时数据库已经满足了可用性组的先决条件,直接勾选,然后下一步。
这里我们将第二个节点LyncBE-2添加进来,它会自动识别为辅助角色。至于后面的可读辅助副本是啥意思,大家可以去参考文章一开头给出的AlwaysOn文档。
选择最后的侦听器选项卡,就直接创建一个AG组的侦听器,端口号就写SQL默认的端口1433好了,记得为其规划一个ip地址。
创建完AG组之后,开始数据同步,初次同步通过我们最开始建立的共享位置来完成。填入共享路径。
woops,最后一步报错了,原来是临时数据库的存放文件夹必须对应辅助副本节点上的相同位置,换句话说,我在LyncBE-1上的C:\sqldata文件夹下放的数据库,在LyncBE-2上也必须有一个C:\sqldata文件夹。
默认共享直接创建一个C:\sqldata,再来一次验证。
验证通过!
创建完成!在SQL控制台面板中,右击可用性组的名字,选择显示面板,是不是像看到了DAG的那个面板一样亲切?
手动验证下故障转移试试?没问题。
OK,那到这里,我们首先通过一个测试数据库建立起了AlwaysOn可用性组。
下一节,我们就聊聊怎么一步步的偷梁换柱,杀鸡取卵,把一个屌丝架构的Lync 2013搭在这个高可用性组上面。
不得不说,在win2012R2下面用SQL 2014建立AlwaysON真是简单,如果是在2008R2的操作系统上面搭这个,你需要额外打上以下几个补丁,而且每一个都需要你留个Email然后等它发到你邮箱里…