到了研究一下LYNC高可用的时候了,我们今天就来谈谈如何实现LYNC服务器的高可用。在OCS时代,要实现这个OCS服务器的高可用有一个要求就是需要使用基于硬件的负载均衡器(HLB)(微软官方说软的不行),比如说F5的一些设备,这些设备一般价格都比较高,所以那个时候要研究还是有些困难。到了LYNC时代,终于发生了一些变化,LYNC在高可用方面也实现了很多改进,比如说借助DNS负载来实现高可用。要知道以前OCS可是不支持使用DNS来做负载均衡的。

不过需要说明的是,DNS负载均衡在使用中,用户还是会有非常短时间的离线然后再次登录的过程。

 我们先看看DNS负载均衡支持的一些服务:

 流  支持类型
SIP 流 所有服务器到服务器,客户端到服务器
媒体流 A/V边缘、AV MCU和媒体服务器到边缘
HTTP流 所有服务器到服务器之间的HTTP流

然后看看Technet上是怎么说的。

p_w_picpath

TECHNET的说明。从上面可以看到,其实LYNC并没有完全的离开基于硬件的负载均衡器,因为客户端到服务器的HTTP流还需要HLB,比如说地址簿、会议内容等的下载。为什么?因为HTTP和HTTP是以会话为中心的协议,如果客户端初始的时候是和A服务器连接,那么以后都需要持续和A联系,当使用DNS负载均衡的时候,就不能建立这个会话状态,所以不能保证客户端可以持续的和A连接。如果使用基于硬件的LB,由于HLB缓存了客户端-服务器的状态信息,所以无论如何,客户端都会认为自己是连接到A服务器,即便A服务器已经离线了。

 

基于DNS的LB道理非常简单,在DNS服务器上,一条A记录可以解析出多个前端的IP地址,当客户端连接不上某个IP地址的时候,它就会去连接第二个。 


实施DNS的LB的步骤也很简单,首先我们要是安装常规的LYNC企业版,创建好池,并添加进去了第一台服务器。然后按照常规准备好第二台服务器,加入域。然后我们就要修改拓扑了。

 

p_w_picpath

在池内新建一个服务器。

p_w_picpath

填入刚才准备好的服务器的FQDN。

p_w_picpath

然后在准备好的服务器内就可以插入LYNC的安装光盘了,我们看到准备AD已经完成,我们直接点击安装或更新LYNC SERVER系统。

p_w_picpath

搞定第一步,然后进入步骤二,其实过程和安装普通的LYNC前端没有任何区别,之后分配证书,然后启动服务就搞定了。

p_w_picpath

在管理工具的拓扑下面,我们可以看到在pool.lyncpbx.net里面有了两台前端服务器了,到这里基本的安装就完成了。下面我们就要配置一下DNS服务器了。 

p_w_picpath

我们看到_sipinternaltls._tcp.lyncpbx.net对应的主机是池的名称pool.lyncpbx.net。

 

p_w_picpath

通过我们的新建,我们可以看到pool这条A记录对应着2个IP地址,它们分别就是两台前端。


OK,到这里就搞定了基于DNS的LB了,很简单吧。

到客户端看看。

p_w_picpath

单一的pool可以解析出两个IP地址。

这个时候我们去看看客户端登录到哪台服务器上,把下面的文本复制出来,然后存到任意一台前端上,命名为***.ps1文件,然后执行。

#Defined Connection String
$connstring = "server=fe\rtclocal;database=rtcdyn;`
    trusted_connection=true;"
$connstring2 = "server=fe2\rtclocal;database=rtcdyn; `
    trusted_connection=true;"
 
#Define SQL Command
 
$command = New-Object System.Data.SqlClient.SqlCommand
 
$command.CommandText = "Select (cast (RE.ClientApp as `
    varchar (100))) as ClientVersion, `
    R.UserAtHost as UserName, `
    Reg.Fqdn `
    From `
    rtcdyn.dbo.RegistrarEndpoint RE `
    Inner Join `
    rtc.dbo.Resource R on R.ResourceId = RE.OwnerId `
    Inner Join `
    rtcdyn.dbo.Registrar Reg on Reg.RegistrarId =   `
    RE.PrimaryRegistrarClusterId `
    Order By ClientVersion, UserName "
 
#Make the connection to Server 1
 
$connection = New-Object System.Data.SqlClient.SqlConnection
$connection.ConnectionString = $connstring
$connection.Open()
 
$command.Connection = $connection
 
 
$sqladapter = New-Object System.Data.SqlClient.SqlDataAdapter
$sqladapter.SelectCommand = $command
 
$results = New-Object System.Data.Dataset
 
$recordcount=$sqladapter.Fill($results)
 
$connection.Close()
 
$overallrecords = $overallrecords + $Results.Tables[0]
 
#Make the connection to Server 2
 
$connection.ConnectionString = $connstring2
$connection.Open()
 
$command.Connection = $connection
 
 
$results = New-Object System.Data.Dataset
$recordcount=$sqladapter.Fill($results)
 
$connection.Close()
 
$overallrecords = $overallrecords + $Results.Tables[0]
 
#End Section 2
 
$overallrecords | Export-Csv "PoolDistribution.csv"
Write-Host -ForegroundColor Green "Query complete"
 

  这个脚本是从(http://blogs.technet.com/b/csps/archive/2010/06/10/list-connections-to-registrar-pools.aspx)弄过来了,那里有很多关于lync脚本,大家可以去看看。

p_w_picpath

运行输出的结果,我们会发现用户lis和zhangs是注册到fe2的前端上的。

这个时候我们把fe2的网络切断,这个时候我们就会发现用户掉线了,过了大概10秒左右,然后又重新登陆才又重新登录上。

 

p_w_picpathp_w_picpath

 

p_w_picpath

再运行一下脚本,你会发现用户都注册到fe上来了。上面的powershell的提示是连接不到fe2服务器,因为它已经离线了。


p_w_picpath

在登录到系统的用户中我们发现了一个很特殊的用户,搜索一下这个用户,原来是音质测试服务。

到这里我们的前端负载均衡已经完成了,但是还差一样东西没有做,那就是针对HTTPS流的负载均衡,那就需要一个基于硬件的设备了,不过也看到有人利用ISA或者其他基于Linux平台的pen软件完成了HTTPS的负载,以后可以花时间研究一下。


最后提一下的是LYNC支持一种叫Server Draining的功能,它就是可以让服务器离线但是不会失去相关的服务,开启这个服务之后,服务器就不再接受新的呼叫了,到这个服务器的连接或者呼叫会被路由到其它的服务器上。等所有的连接都自然的断开之后,你就可以放心的维护你的服务器了,开启这个服务非常简单,可以参考下面的截图。

p_w_picpath