[OpenSIPS-Users] Load balancer ORed resource types
Bogdan-Andrei Iancu
bogdan at voice-system.ro
Fri Dec 11 19:32:24 CET 2009
Hi Taner,
Ok, I see you point (with 2 pools of destinations with different
priorities).
Your original script, may be right in this case - what is the point
where you stuck with this approach ?
Regards,
Bogdan
Taner Sener wrote:
> Hi Bogdan,
>
> I deleted other destinations to re-produce this case. It behaves in
> the same way when there are 10 destinations per group_id and all of
> them are busy, etc.
>
> And I have priorities between destinations. This is why I can not add
> all of them into the same group_id. First, I'm trying to balance the
> load in the destinations with higher priority (with group_id 8080), if
> I can not I'm trying to use a group_id with lower priority (9090).
>
> Anyway, thanks for your help,
> Taner
>
> On Wed, Dec 9, 2009 at 7:25 PM, Bogdan-Andrei Iancu
> <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>> wrote:
>
> Hi Taner,
>
> Why do you have only one record per group in the LB table ? there
> is no
> LB if you have only one destination ;). It simply makes no sense.
>
> Better put both destinations in the same group and LB over them both,
> with failover too:
>
> +----+----------+-----------------------+-----------+------------+-------------+
> | id | group_id | dst_uri | resources | probe_mode |
> description |
> +----+----------+-----------------------+-----------+------------+-------------+
> | 1 | 8080 | sip:service at host1.net
> <mailto:sip%3Aservice at host1.net> <mailto:sip%3Aservice at host1.net
> <mailto:sip%253Aservice at host1.net>>
> | sip=1 | 2 | |
> | 2 | 8080 | sip:service at host2.net
> <mailto:sip%3Aservice at host2.net> <mailto:sip%3Aservice at host2.net
> <mailto:sip%253Aservice at host2.net>>
> | sip=1 | 2 | |
> +----+----------+-----------------------+-----------+------------+-------------+
>
> route[3] {
> if (is_method("INVITE")) {
>
> load_balance("8080", "sip");
> if ($retcode < 0) {
> xlog("L_INFO", "load_balancer: Insufficient resource to
> balance request from $fu to $tu !\n");
> send_reply("500","no resources available");
> exit;
> }
> t_on_failure("2");
> }
>
>
> # send request
> if (!t_relay()) {
> sl_reply_error();
> }
> exit;
> }
>
> failure_route[2] {
> if (t_was_cancelled()) {
> exit;
> }
>
> if (t_check_status("486|408")) {
> xlog("L_INFO", "load_balancer: Request from $fu to $tu
> failed. Re-balancing!\n");
> lb_disable();
> load_balance("8080", "sip");
>
> if ($retcode < 0) {
> xlog("L_INFO", "load_balancer: Insufficient resource to
> balance request from $fu to $tu \n");
> send_reply("500","no resources available");
> exit;
> }
> t_on_failure("2");
> t_relay();
> }
> }
>
>
>
> Regards,
> Bogdan
>
>
> Taner Sener wrote:
> > Hi Bogdan,
> >
> > I used your approach and defined the same resource name "sip"
> for both
> > definitions. It is working now as expected but another requirement
> > raised for my scenario.
> >
> > When all destinations for a specific group id are busy I want to re
> > load-balance the request to a different group id. I expect this
> to run
> > with the following configuration but it is not possible to re
> > load_balance the request. I hope you can help me to find a solution.
> >
> > I'm testing this the following configuration. I'm making a call to
> > 8080. If service at host1.net <mailto:service at host1.net>
> <mailto:service at host1.net <mailto:service at host1.net>> is busy or if it
> > receives timeout I expect call to be re load-balanced to a
> destination
> > from group id 9090. But it is not.
> >
> > load_balancer
> >
> +----+----------+-----------------------+-----------+------------+-------------+
> > | id | group_id | dst_uri | resources | probe_mode |
> > description |
> >
> +----+----------+-----------------------+-----------+------------+-------------+
> > | 1 | 8080 | sip:service at host1.net
> <mailto:sip%3Aservice at host1.net>
> > <mailto:sip%3Aservice at host1.net
> <mailto:sip%253Aservice at host1.net>> | sip=1 | 2
> > | |
> > | 2 | 9090 | sip:service at host2.net
> <mailto:sip%3Aservice at host2.net>
> > <mailto:sip%3Aservice at host2.net
> <mailto:sip%253Aservice at host2.net>> | sip=1 | 2
> > | |
> >
> +----+----------+-----------------------+-----------+------------+-------------+
> >
> > opensips.cfg
> > ....
> > route {
> > ...
> > route(3);
> > }
> >
> > route[3] {
> > if (is_method("INVITE")) {
> >
> > load_balance("8080", "sip");
> > if ($retcode < 0) {
> > xlog("L_INFO", "load_balancer: Insufficient resource
> > to balance request from $fu to $tu . Re-balancing to route 4!\n");
> > route(4);
> > }
> > }
> >
> > t_on_failure("2");
> >
> > # send request
> > if (!t_relay()) {
> > sl_reply_error();
> > }
> > exit;
> > }
> >
> > route[4] {
> > if (is_method("INVITE")) {
> >
> > load_balance("9090", "sip");
> > if ($retcode < 0) {
> > xlog("L_INFO", "load_balancer: Insufficient resource
> > to balance request from $fu to $tu . Sending error!\n");
> > sl_send_reply("500", "Service full");
> > exit;
> > }
> > }
> >
> > t_on_failure("2");
> >
> > # send request
> > if (!t_relay()) {
> > sl_reply_error();
> > }
> > exit;
> > }
> >
> > failure_route[2] {
> > if (t_was_cancelled()) {
> > exit;
> > }
> >
> > if (t_check_status("486|408")) {
> > xlog("L_INFO", "load_balancer: Request from $fu to $tu
> > failed. Re-balancing to 8080!\n");
> > lb_disable();
> > load_balance("8080", "sip");
> >
> > if ($retcode < 0) {
> > xlog("L_INFO", "load_balancer: Insufficient resource
> > to balance request from $fu to $tu . Re-balancing to route 4!\n");
> > route(4);
> > }
> > t_on_failure("2");
> > t_relay();
> > }
> > }
> >
> > opensips.log
> > ...
> > Dec 8 10:56:57 sipproxy /sbin/opensips[11299]: load_balancer:
> Request
> > from sip:test at 10.10.5.10 <mailto:sip%3Atest at 10.10.5.10>
> <mailto:sip%3Atest at 10.10.5.10 <mailto:sip%253Atest at 10.10.5.10>> to
> > sip:8080 at 10.10.6.6:5060 <http://sip:8080@10.10.6.6:5060>
> <http://sip:8080@10.10.6.6:5060> failed.
> > Re-balancing to 8080!
> > Dec 8 10:56:57 sipproxy /sbin/opensips[11299]: load_balancer:
> > Insufficient resource to balance request from
> sip:test at 10.10.5.10 <mailto:sip%3Atest at 10.10.5.10>
> > <mailto:sip%3Atest at 10.10.5.10 <mailto:sip%253Atest at 10.10.5.10>>
> to sip:8080 at 10.10.6.6:5060 <http://sip:8080@10.10.6.6:5060>
> > <http://sip:8080@10.10.6.6:5060> . Re-balancing to route 4!
> > Dec 8 10:56:57 sipproxy /sbin/opensips[11299]: load_balancer:
> > Insufficient resource to balance request from
> sip:test at 10.10.5.10 <mailto:sip%3Atest at 10.10.5.10>
> > <mailto:sip%3Atest at 10.10.5.10 <mailto:sip%253Atest at 10.10.5.10>>
> to sip:8080 at 10.10.6.6:5060 <http://sip:8080@10.10.6.6:5060>
> > <http://sip:8080@10.10.6.6:5060> . Sending error!
> >
> >
> > Thanks,
> > Taner
> >
> >
> > On Sun, Nov 15, 2009 at 10:12 PM, Bogdan-Andrei Iancu
> > <bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>
> <mailto:bogdan at voice-system.ro <mailto:bogdan at voice-system.ro>>>
> wrote:
> >
> > Hi Taner,
> >
> > I would suggest a different approach - as from LB point of
> view you do
> > not care too much if it VM or CONF - what is important is
> that each of
> > your box has only on channel, so I would define a resource the
> > number of
> > channels each box can handle .
> >
> >
> +----+----------+------------------------+---------------------------------+
> > | id | group_id | dst_uri | resources
> > |
> >
> +----+----------+------------------------+---------------------------------+
> >
> > | 1 | 555 | sip:service at host1.net
> <mailto:sip%3Aservice at host1.net>
> > <mailto:sip%3Aservice at host1.net
> <mailto:sip%253Aservice at host1.net>>
> <mailto:sip%3Aservice at host1.net <mailto:sip%253Aservice at host1.net>
> > <mailto:sip%253Aservice at host1.net
> <mailto:sip%25253Aservice at host1.net>>> | channel=1
> > |
> > | 2 | 555 | sip:service at host2.net
> <mailto:sip%3Aservice at host2.net>
> > <mailto:sip%3Aservice at host2.net
> <mailto:sip%253Aservice at host2.net>>
> <mailto:sip%3Aservice at host2.net <mailto:sip%253Aservice at host2.net>
> > <mailto:sip%253Aservice at host2.net
> <mailto:sip%25253Aservice at host2.net>>> | channel=1
> > |
> >
> >
> +----+----------+------------------------+---------------------------------+
> >
> >
> > and do (when routing a VM or conference call) :
> > 'load_balance(.., "channel");'
> >
> > Regards,
> > Bogdan
> >
> >
> > Taner Sener wrote:
> > > Hi,
> > >
> > > I'm using load balancer module on 1.6.0-notls (i386/linux) to
> > balance
> > > incoming sip calls to sip clients. The case is; my sip
> clients are
> > > capable of serving multiple types of calls. But not in the
> same time
> > > like in the definition "vm=1;conf=1". Only one of them is
> > available at
> > > that moment. They can process either a vm call, either a
> conf call;
> > > not one vm call and one conf call. Is there a way to
> define it?
> > >
> > >
> >
> +----+----------+------------------------+---------------------------------+
> > > | id | group_id | dst_uri | resources
> > |
> > >
> >
> +----+----------+------------------------+---------------------------------+
> > >
> > > | 1 | 555 | sip:service at host1.net
> <mailto:sip%3Aservice at host1.net>
> > <mailto:sip%3Aservice at host1.net
> <mailto:sip%253Aservice at host1.net>>
> <mailto:sip%3Aservice at host1.net <mailto:sip%253Aservice at host1.net>
> > <mailto:sip%253Aservice at host1.net
> <mailto:sip%25253Aservice at host1.net>>> | vm=1; conf=1
> > |
> > > | 2 | 555 | sip:service at host2.net
> <mailto:sip%3Aservice at host2.net>
> > <mailto:sip%3Aservice at host2.net
> <mailto:sip%253Aservice at host2.net>>
> <mailto:sip%3Aservice at host2.net <mailto:sip%253Aservice at host2.net>
> > <mailto:sip%253Aservice at host2.net
> <mailto:sip%25253Aservice at host2.net>>> | vm=1; conf=1
> > |
> > >
> > >
> >
> +----+----------+------------------------+---------------------------------+
> > >
> > > Current 'resources' field of load_balancer table ANDs
> resource types
> > > given with semi-colon and I when I invoke
> > >
> > > 'load_balance(.., "vm")'
> > >
> > > and
> > >
> > > 'load_balance(.., "conf")'
> > >
> > > second load balanced call receives busy and balancing
> fails there
> > > because that client is serving to vm call. How can I configure
> > > load_balanced module to select it right?
> > >
> > > Thanks,
> > > Taner
> > >
> >
>
--
Bogdan-Andrei Iancu
www.voice-system.ro
More information about the Users
mailing list