Los módulos en OpenSIPs

Una vez que tengamos OpenSIPs instalado la idea es saber como se configuran y como se lee la configuración de los módulos.

En la documentación oficial de OpenSIPs aparece la lista de los módulos y por cada modulo tenemos la siguiente información:

  1. Una descripción del modulo
  2. Las dependencias
  3. Los parámetros que se pueden configurar para el modulo
  4. Las funciones exportadas que luego se pueden utilizar en el script de OpenSIPs
  5. Las estadísticas generadas por el modulo
  6. Los comandos que se pueden utilizar desde la “consola” de OpenSIPs
  7. Las pseudo variables generadas por el modulo que también se pueden utilizar en el script de OpenSIPs

Es importante saber que no todos los módulos generan estadísticas, comandos para la consola y pseudo variables. De hecho si miramos, por ejemplo, el modulo LOAD_BALANCER, veremos que no genera estadísticas y pseudo variables. Este modulo se utiliza para balancear la carga entre distintos servidores SIP; su función es distribuir las llamadas que llegan a OpenSIPs utilizando un algoritmo de balanceo. En la parte dedicada a las dependencias se puede leer:

  • que depende del modulo DIALOG que va cargado antes de este modulo
  • que depende del modulo TM si se activa el probing (averiguar cada cierto tiempo que los servidores utilizado para el balanceo de carga estén activos)
  • que depende de una base de datos ya que los distintos servidores utilizados para el balanceo de carga van añadidos a una determinada tabla (load_balancer)

Una típica configuración del modulo sería, por ejemplo:

#### LOAD BALANCER module
loadmodule "load_balancer.so"
modparam("load_balancer", "db_url","mysql://opensips:opensipsrw@localhost/opensips")
modparam("load_balancer", "probing_method", "OPTIONS")
modparam("load_balancer", "probing_interval", 30)

  • La primera línea es un comentario
  • Con la segunda línea se carga el modulo
  • En la tercera línea se indica la conexión a la base de datos donde se configurará el modulo. En este caso:
    usuario: opensips
    contraseña: opensipsrw
    IP para conectarse la base de datos: localhost
    Nombre de la base de datos: opensips
  • En la cuarta línea se indica el método SIP utilizado para averiguar si los servidores configurados para el balanceamiento se encuentran activos: OPTIONS
  • En la ultima línea se indica cada cuantos segundos enviar el paquete OPTIONS (30 segundos)

Como se ha dicho la tabla que se utiliza para configurar los servidores es load_balancer. Si miramos la descripción de la tabla:

image

Los valores:

  • id: numero progresivo creado automáticamente por MySQL
  • group_id: los recursos disponibles en los distintos servidores Asterisk se pueden dividir en distintos grupos o se pueden crear grupos distintos de servidores Asterisk
  • dst_uri: se indica la IP del servidor Asterisk usando la sintaxis: sip:IPAsterisk:port. Si el puerto es el 5060, se omite
  • resources: los recursos disponibles en el servidor Asterisk que se está configurando
  • probe_mode: se utiliza para averiguar si el recurso está disponible y puede contener tres valores:
    0: desactivado
    1: se envían los paquetes OPTIONS solamente si el recurso ha sido marcado como no disponible a través de la función lb_disabled() activada por el modulo
    2: se envían los paquetes OPTIONS siempre
  • description: una descripción del servidor.

Para añadir un servidor, un ejemplo sería:

mysql> insert into load_balancer (group_id,dst_uri,resources,probe_mode,description) values ('1','sip:1.2.3.4','channel=20','2','Asterisk1');

donde 1.2.3.4 es la IP del servidor

Cada vez que se modifica o se añade un servidor a la tabla, hay que recargar la configuración en la memoria de trabajo de OpenSIPs. El comando que se utiliza es uno de los presentes en el documento en el párrafo 1.8. En una ventana terminal del servidor Linux se escribe:

opensipsctl fifo lb_reload

luego para ver los recursos disponibles y/o utilizados en cualquier momento:

opensipsctl fifo lb_list

El resultado sería:

Destination:: sip:1.2.3.4 id=1 group=1 enabled=yes auto-re=on
Resources::
Resource:: channel max=20 load=0

enables=yes indica que el servidor se encuentra activo.

load=0 significa que no no hay recursos utilizados

Entre las funciones activadas por el modulo, la más utilizada es load_balance que tiene la siguiente sintaxis:

load_balance(grp,resources[,alg])

  • grp: grupo de servidores o recursos según los datos presentes en la tabla de MySQL
  • resource: el tipo de recurso/s
  • alg: algoritmo utilizado para calcular la disponibilidad de los recursos. El valor puede ser 0 que significa que los recursos se calcularán utilizando su valor absoluto; 1 que significa que los recursos se calcularán según un porcentaje. Si el valor no se declara, el predefinido es 0. Ejemplo: tenemos dos servidores Asterisk; uno puede cursar 50 llamadas y otro 20. con alg=0 las primeras 30 llamadas llegarán al primer servidor luego la 31 al segundo, la 32 al primero la 33 al segundo, etcétera. Si alg=1 este calculo se realizará en porcentaje. El primer servidor tendrá alrededor del 70% de los recursos, el segundo alrededor del 30%. Esto quiere decir que cada 10 llamadas, 7 llegarán al primer servidor y 3 al segundo.

Luego en el script de OpenSIPs, podemos poner:

if ( !load_balance("1","channel")) {
send_reply("500","No Destination available");
exit;
}

que se lee: si no hay recursos de tipo channel disponibles (el ! está por el operador lógico NOT) en los servidores del grupo uno, (la opción alg no se declara pues es 0) enviar como respuesta el mensaje SIP 500, ninguna destinación disponible. Con exit se termina el procesamiento de la solicitud SIP y se sale del script. Si hay recursos channel disponibles se saltará el bloque y se continuará con el que sigue.

Claramente la construcción del script de OpenSPs no cosa muy sencilla pero la idea es conocer como se lee la documentación de los módulos de OpenSIPs.

La curva de aprendizaje de OpenSIPs es bastante larga pero da muchas satisfacciones.

Vota el Articulo: 

No votes yet
Evalúa la calidad del articulo
Subscribe to Comments for "Los módulos en OpenSIPs" Subscribe to VozToVoice - All comments