您的位置:首页 > 职场人生

LYNC 2010的DNS负载均衡研究 推荐

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

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

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

支持类型
SIP 流所有服务器到服务器,客户端到服务器
媒体流A/V边缘、AV MCU和媒体服务器到边缘
HTTP流所有服务器到服务器之间的HTTP流
然后看看Technet上是怎么说的。





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

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

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





在池内新建一个服务器。





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





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





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





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





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





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

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

到客户端看看。





单一的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脚本,大家可以去看看。





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

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











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





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

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

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



内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息