Pruebas de carga sobre un servidor Openser

Debido a uno de los proyectos que se están desarrollando, he tenido que realizar pruebas sobre distintos módulos (Jabber, Openser, MCU, MySQL, …) Por lo que hoy toca hablar de las pruebas de carga sobre un servidor Openser.

Para realizar las pruebas de carga sobre el servidor Openser, se hará uso la aplicación SIPp Partiremos de una instalación y configuración correcta del servidor además de una instancia de MySQL.

SIPp

SIPp es una herramienta de testing generadora de tráfico para el protocolo SIP. Incluye escenarios predefinidos (UAC, UAS, branch, 3pcc,…) además de poder definir un fichero XML especificando un escenario determinado.
Dispone además de otras características como soporte para IPv6, autenticación SIP, retransmisión UDP, etc. Puede ser utilizado también para probar distintos dispositivos SIP, tales como SIP Proxies, SIP media server, SIP PBX, …

Servidor Openser

No entraré en detalle del funcionamiento/configuración de un servidor Openser, ya que aquí estamos para hacer pruebas. Solo decir que a tarea de OpenSER es la de recibir y procesar mensajes SIP. Puede ser configurado como Proxy SIP para establecer sesiones de telefonía IP, videollamadas y mensajería instantánea; además, soporta el manejo de sistemas de presencia y puede funcionar como gateway hacia servidores de aplicaciones avanzadas tales como SMS (Short Message Service). Está compuesto por un core y distintos módulos, según la funcionalidad que se quiera añadir.

Instalación y configuración de SIPp

Para instalar en el sistema el software de testing se deberán seguir los siguientes pasos:

  • Descargamos el paquete .tar.gz desde
http://sourceforge.net/project/downloading.php?group_id=104305
&filename=sipp.3.1.src.tar.gz&a=67681404
  • Descomprimimos el paquete en /opt
 tar xvf  sipp.3.1.src.tar.gz
  • Entramos en el directorio correspondiente
 cd /opt/sipp.svn/
  • Compilamos los ficheros fuentes
 make

Una vez instalada la herramienta se deben crear y registrar en el servidor openser los contactos que simularán los usuarios finales. Para crear los dos usuarios necesarios es obligatorio tener acceso al servidor de bases de datos. Ejecutamos las siguientes sentencias.

  • En el servidor de bases de datos (en una consola mysql):
INSERT INTO `dbaliases` (`alias_username`, `alias_domain`, 
`username`,`domain`) VALUES ('100998', 'IP_SERVIDOR_OPENSER', 
'sipp', 'IP_SERVIDOR_OPENSER');
INSERT INTO `dbaliases` (`alias_username`, `alias_domain`, 
`username`,`domain`) VALUES ('100999', 'IP_SERVIDOR_OPENSER', 
'tester', 'IP_SERVIDOR_OPENSER');
  • En el servidor openser:
openserctl add sipp@IP_SERVER “” sipp@IP_SERVER
openserctl add tester@IP_SERVER “” tester@IP_SERVER
openserctl ul add sipp@IP_SERVER sip:sipp@IP_SERVER:PORT_1
openserctl ul add tester@IP_SERVSER sip:tester@IP_SERVER:PORT_2

Los parámetros PUERTO_1 y PUERTO_2 serán dos puertos libres y diferentes uno de otro.
Con esto se tendrán creados y registrados dos nuevos usuarios (sipp y tester) en el servidor openser. Para comprobar la correcta ejecución de las sentencias anteriores pedimos a openser que muestre los usuarios registrados actualmente.

 openserctl ul show

En la salida que proporciona identificaremos a los usuarios creados anteriormente, diferenciados por el nombre y el puerto a utilizar.

database engine 'MYSQL' loaded
Control engine 'FIFO' loaded
entering fifo_cmd ul_dump
Domain:: aliases table=512 records=0 max_slot=0
Domain:: location table=512 records=2 max_slot=1
AOR:: tester@10.95.123.83
Contact:: sip:tester@10.95.123.83:4040 Q=1
Expires:: permanent
Callid:: dfjrewr12386fd6-343@openser.mi
Cseq:: 1
User-agent:: OpenSER MI Server
State:: CS_SYNC
Flags:: 0
Cflag:: 0
Methods:: 4294967295
AOR:: sipp@10.95.123.83
Contact:: sip:sipp@10.95.123.83:5050 Q=1
Expires:: permanent
Callid:: dfjrewr12386fd6-343@openser.mi>
Cseq:: 1
User-agent:: OpenSER MI Server
State:: CS_SYNC
Flags:: 0
Cflag:: 0
Methods:: 4294967295
FIFO command was:
:ul_dump:openser_receiver_1391

Para eliminar un usuario del registro de openser, se debe ejecutar:

openserctl ul rm sip:NOMBRE_USUARIO@IP_SERVIDOR:PUERTO

Del mismo modo, se deberán incluir los distintos escenarios en un directorio conocido, por ejemplo en /opt/sipp.svn/escenarios

Escenario de pruebas

SIPp trabaja con ficheros xml donde se definen las acciones que se desea se ejecuten en el servidor, por ello es totalmente configurable y adaptable a las necesidades de cada caso.
A continuación se describe el escenario simulado mediante SIPp. Consta de dos terminales finales (usuarios) y el servidor Openser, el cual hace de enlace entre estos.

escenario

Para este caso en particular se necesitarán dos ficheros:

  • UAC (User Agent Clients): simula el remitente de la llamada
  • UAS (User Agent Server): simula el destinatario de la llamada

Ejecución de las pruebas

Para realizar las pruebas de carga simulando tanto el remitente como el destinatario sobre el mismo servidor se deberán lanzar dos procesos independientes (consolas en el servidor)
En primer lugar ejecutaremos SIPp con el fichero de configuración uas.xml, (desde una de las consolas) el cual permanecerá a la espera de recibir un invite desde el remitente.

./sipp –sf /opt/sipp.svn/escenarios/uas.xml IP_SERVIDOR_OPENSER
-s sipp -p 4040

Una vez se esté ejecutando el proceso para el destinatario, se lanzará el fichero uac.xml, (desde la segunda consola) para comenzar la secuencia de llamadas. De este modo se enviarán invite’s al destinatario y este ya podrá contestar.

./sipp -sf /opt/escenarios_openser/uac.xml IP_SERVIDOR_OPENSER 
-s tester -p 5050 -d DURACION_LLAMADA(S) -r (LLAMADAS/SEG)

A partir de este momento se comenzará el ciclo de llamadas de acuerdo con los parámetros utilizados al ejecutar SIPp

Parámetros empleados:
-s nombre de usuario
-p puerto a utilizar (el configurado para el usuario utilizado en -s)
-d duración de la llamada (ms)
-r número de llamadas nuevas por segundo (invite’s/seg)

El número máximo de llamadas que se podrán lanzar es obtenido mediante la siguiente operación:

3 * duración_de_llamada (s) * ratio

Por lo tanto, para el ejemplo anterior obtendríamos un máximo de 3*15*15 = 675 llamadas. Para aumentar el número de llamadas simultaneas, la mejor opción es aumentar la duración de cada llamada, con lo que se consigue crear más llamadas durante el transcurso de las anteriores (invite – bye).

Una vez lanzados los test, aparecerá la consola de Sipp, donde podremos navegar por distintas pantallas. Se nos muestra el escenario que se está simulando, el número de llamadas concurrentes, tiempo de resolución, tiempo detallado por mensaje Sip, …

sipp

Espero que haya sigo de utilidad este pequeño manual.

One thought on “Pruebas de carga sobre un servidor Openser

  1. Pingback: Resumen 2012 | tUpaKamaRu

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s