Opensips学习教程(五)-负载均衡配置与应用

Opensips学习教程(五)-负载均衡配置与应⽤
五、负载均衡配置与应⽤
前⾔
一叶荻OpenSIPS作为⼀个⾼效的SIP服务器,势必经常作为⽹关或其它类型的SIP代理服务器使⽤,主要做信令处理。这样⼀来,对消息的分发、负载将是⼀个核⼼的功能。
1、OpenSIPS两种常⽤场景
1.1 作为注册的SIP服务器
通常sip终端都需要注册到某台SIP服务器上(就像⼿机要连接到),以实现呼出和呼⼊的功能。如图
注册在OpenSIPS上的SIP终端发起的呼叫请求将发送到OpenSIPS,OpenSIPS根据路由脚本配置使⽤load_balancer(负载均衡)模块或dispatcher(调度模块)将呼叫请求转发到其他sip服务器或⽹关上。反之当sip服务器或⽹关呼叫注册在OpenSIPS上的终端时,会呼⼊到OpenSIPS(只有OpenSIPS有被叫SIP终端的AOR信息),然后opensips再呼叫SIP终端。这是就是⼀个典型的注册服务器。
1.2 作为SIP代理服务器
OpenSIPS可能很多时候都是做为⼀个sip代理服务器。如图
OpenSIPS作为代理服务器时,可以将代理两边的请求根据路由配置互相转发。通常也是使⽤load_balancer或dispatcher模块做分发。单做信令的转发,不处理其它业务。
2、OpenSIPS负载均衡
OpenSIPS负载均衡原理这⾥不再赘述,可以参考⽂末的官⽹⽂档,⾥⾯有详细的介绍。这⾥只对负载均衡实现的关键地⽅做解释。
2.1 配置负载均衡⽬的地集
OpenSIPS负载均衡由load_balancer模块实现,配置是在load_balancer表中配置的,如下图load_balancer表字段:
各个设置项的意义:
id:该⾏负载配置的唯⼀id,当使⽤MI命令将某个处于enable=no(不可⽤)状态的负载服务器置为可⽤时,会⽤到这个id。
group_id:负载地址组ID,标识⼀个⽬的地集。负载均衡时是以⽬的集为单位做负载的。
dst_uri:负载⽬的地URI,必须以”sip:”开头。
resources:配置资源类型已及能容纳的最⼤负载数。
probe_mode:探测⽬的地服务器模式,后⾯会详细介绍。
description:备注。
OpenSIPS启动的时候,会从load_balancer表中读出⽬的地集,保存到内存中。如果OpenSIPS启动后对⽬的地集做了修改,可以使⽤MI 命令重新加载⽬的地集,使其⽣效:
opensipsctl fifo lb_reload
2.2 负载均衡相关函数
设置了负载均衡⽬的集,只是配置了负载路由数据。真正执⾏负载均衡的操作,是在路由脚本中调⽤负载均衡的函数。
这⾥介绍⼏个常⽤的负载均衡函数,更多函数由于篇幅有限,这⾥不再赘述,可以参考⽂末的官⽹⽂
档。
lb_is_destination(ip,port[,group[,active]]):判断指定的ip,port是否和group 1指定的⽬的地集中的某⼀个URI匹配,如果匹配成功,返回true。
...
if (lb_is_destination("$si", "$sp", "1") ) {太阳能炉灶
# request from a LB destination
}
...
lb_disable_dst():将当前请求的负载⽬的地址置为不可⽤,后续请求将不会负载到该地址(除⾮探测成功)。(OpenSIPS 1.x版本该函数名为lb_disable)。
开放式基金预测
...
if (t_check_status("(408)|(5[0-9][0-9])")) {
lb_disable_dst();
...
}
...
lb_count_call(ip,port,grp,resources[,undo]):重新计算ip,port,resource指定的负载⽬的地负载数,供负载均衡算法使⽤。
...
if (lb_is_destination("$si", "$sp") ) {
# inbound call from destination
lb_count_call("$si", "$sp",  "-1",  "conference");
}
...
牧一征
load_balance(grp,resources[,flags]):真正执⾏负载均衡的函数,grp指定负载的⽬的地集,resource指定匹配⽬的地集中的某个资源。
...
# 将来⾃group 1的呼叫负载均衡到group 2的pstn资源地址
if ( lb_is_destination("$si", "$sp", "1") ) {
if ( ! load_balance("2", "pstn") ) {
send_reply("500", "Service full");
汽车油箱结构exit;
}
}
...
2.3 探测负载⽬的地服务器可⽤性
对负载到的服务器进⾏探测是有必要的,因为肯定不希望往⼀个不可⽤的服务器去发送请求,这样既浪费时间,也会让请求失败。使⽤探测可以让OpenSIPS主动发现⽬的地服务器是否可以可以处理请求,避免做⽆意义的转发。
前⾯讲到了OpenSIPS负载均衡配置⾥的配置字段probe_mode,probde_mode字段⽤于配置当前⾏⽬的地服务器的可⽤性的探测模式。可配置的值有三个,分别对应三种探测模式:
0:从不探测⽬的地服务可⽤性。
1:仅当⽬的地服务不可⽤时,才进⾏探测。如果探测成功,⾃动将该地址置为可⽤。
2:实时发起探测请求,不管⽬的地是否可⽤。探测失败⾃动将⽬的地置为不可⽤,测试成功则⾃动将服务置为可⽤。
⼀般将probe_mode置为1。
同时也可以设置探测的间隔、探测⽅法和有效的响应码:灌肠袋
...
modparam("load_balancer", "probing_interval", 60)
modparam("load_balancer", "probing_method", "INFO")
modparam("load_balancer", "probing_reply_codes", "501, 403")
...
探测需要被探测服务器(UAS)的⽀持,如果对端没有响应或者响应码没有包含在probing_reply_codes的列表中,该服务器为都将置为不可⽤,将不再负载到它。
2.4 使⽤MI查看负载均衡信息
通过opensipsctl脚本⽂件执⾏MI命令查看(需要加载mi_fifo模块),如./opensipsctl fifo lb_list
lb_reload - 强制OpenSIPS从DB中重新载⼊所有的配置信息
lb_resize - 修改⼀个⽬的地某资源的最⼤承载能⼒
lb_status - 修改⽬的地的状态(可⽤/不可⽤),例如将id为12的⽬的地置为可⽤:./opensipsctl fifo lb_status 12 1
3、负载均衡实战应⽤
以前⾯讲到的OpenSIPS两种常⽤场景中的第⼆种,作为SIP代理服务器为例,进⾏负载均衡配置的实例讲解。
这⾥的实例场景如图
OpenSIPS作为⽹关,FreeSWITCH呼出经过OpenSIPS转发,从落地⽹关呼⼊也经过OpenSIPS转发,OpenSIPS要做的就只是将两边的请求分别负载均衡到另⼀边。
3.1 ⽬的地集配置
配置如图
FreeSWITCH的⽬的地集id(group_id)为1,落地⽹关的⽬的地集id为2。resources都是“pstn”。探测模式(probe_mode)都设置为1。
3.2 路由逻辑配置
主路由中对INVITE请求进⾏负载均衡:
路由的逻辑是如果呼⼊的源地址匹配Gateway⽬的地集,就将呼叫负载均衡到FreeSWITCH⽬的地集,
反之则相反。如果都不匹配,则认为是⾮法请求并返回403。
负载请求路由失败处理:

本文发布于:2024-09-22 10:31:43,感谢您对本站的认可!

本文链接:https://www.17tex.com/tex/3/257140.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:负载   配置   请求   探测
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议