FMS的集群方法
转自:http://blog.sina.com.cn/s/blog_58b3d5d60100cnrs.html
fms的集群方法有三种: 显式或隐式代理,和反向代理集群。
下面是显式或隐式代理:
边缘服务器是由配置文件的值定义的.有显式和隐式(也被称为匿名)代理方法,截取和收集用户连接到源服务器应用程序的请求.显式边缘服
务器的请求有源服务器uri的前缀.这种配置让客户端(用户的电脑)知道代理模式.显式代理中的uri指定了源服务器,中途截取客户端连接到
源服务器的请求.
隐式代理的身份(ip地址和端口)是隐藏的相对客户端.隐式代理不改变或者修改请求的uri路由信息在它连接客户端到源服务器之前.边缘服
务器也被定义作为隐式代理通过flash代理自动侦测连接(FPAD).
fms和网络管理员能够配置fms,管理路由过来通过一个或者多个边缘服务器到源服务器的连接请求.这些隐式代理是透明的因为客户端不知
道有代理存在.这也是一直提到的侦听代理.这种配置策略对ISP和telco供应商为通过网络优化RTMP通讯非常有用.
管理员能够明确指定任何 通过边缘或者代理服务器到源服务器 连接请求 .比如,如果你的应用程序运行在fms.foo.com,你能够转向从用户
的电脑到另外一个服务器(或者虚拟主机)调用fmsproxy.foo.com的连接请求,这就是远程模式运行配置.
连接到应用程序的连接字符串为:rtmp://fms.foo.com/app/inst
代理会为它加一个前缀作为URI:rtmp://fmsproxy.foo.com/?rtmp://fms.foo.com/app/inst处理.
前缀只能包含协议,主机名字,端口名字和以/作为结尾.一个请求标志(?)隔离代理前缀来自主URI.
配置fms为代理服务器主要通过vhost.xml的Proxy节点和Application.xml的Scope节点(具体节点含义请看fms文档:Managing Flash Media
Server).
下面是vhost.xml的Proxy节点信息:
//----------------------------------------------------------------------------------------------------------
<Proxy>
<Mode>local</Mode> //local本地(源) remote远程(边缘)
<Anonymous>false</Anonymous> //true 匿名代理 隐式代理
<CacheDir enabled="false"></CacheDir> //缓存地址
<LocalAddress></LocalAddress> //本地地址
<RouteTable protocol=""> //路由表 使用协议
<RouteEntry></RouteEntry> //路由路径
</RouteTable>
<EdgeAutoDiscovery>
<Enabled>false</Enabled>
<AllowOverride>true</AllowOverride>
<WaitTime>1000</WaitTime>
</EdgeAutoDiscovery>
</Proxy>
//----------------------------------------------------------------------------------------------------------
反向代理:
//----------摘自snowman在http://www.flashcom.com.cn/bbs/showthread.php?t=1679发表内容------------------------------------
反向代理集群:边缘服务器配置成反向代理,其通常位于一个DMZ中,它控制客户端连接到源服务器的访问。
其中集群反向代理需要在客户端写入以下代码:
客户端需要发送一个HTTP请求,包含对源服务器的XML.load调用,http://origin:port/fms/fpad?uri=<uri>
负载均衡截获这个请求,并把它路由到FMS集群中的一台边缘服务器上,然后,这台边缘服务器向集群中广播一个FPAD消息,集群中的所有
边缘服务器以反应最快的那台机做出最先的响应并返回给客户端一个XML消息。
<fpad>
<proxy>192.168.10.102:1935</proxy>
<timestamp>627539012</timestamp>
<userdata></userdata>
</fpad>
在这里得到IP和PORT。
然后客户使用这一信息来建立连接。
nc = new NetConnection();
nc.onStatus = function(info){
trace(info.code);
}
uri = "rtmp://192.168.10.1/test";
myxml = new XML();
myxml.onLoad = function(success){
if(success){
proxy = this.childNodes[1].childNodes[1].firstChild.nodeValue;
uri = "rtmp://" + proxy + "/?" + uri;
}
nc.connect(uri);
}
myxml.load("http://192.168.10.1/fms/fpad?uri=" + uri);
OK,通过以上代码,你将可以得到一个新的连接URI,
比如: "rtmp://192.168.10.101/?rtmp://192.168.10.1/test"
注意:当边缘服务器多于一台时,你需要在边缘服务器和缘服务器之间加一个均衡器,并把这个均衡器配置成为以循环模式访问你的代理
服务器(边缘服务器)。这样才可以用以上代码得到一个边缘服务器的IP:PORT,并生成新的URI连接到集群中去。
snowman:
更正一下,以上由FMS返回的XML不需要均衡器也能得到,做法,将我的FMS装于WIN XP中,制作一个FLA,将代码放入其中。可以得到这个XML,那么你只需要怎样得到负载值最小的服务器IP即可做出FMS集群。