Enviado por admin el
Kamailio, como seguramente ya saben, es un Proxy SIP de altas prestaciones y muy liviano. En entornos distribuidos o de alta disponibilidad, donde múltiples instancias de Kamailio trabajan en conjunto, es posible utilizar una configuración para sincronizar determinada información entre nodos. Es en este contexto donde entra en juego el módulo DMQ (Distributed Message Queue), diseñado para facilitar la comunicación entre múltiples nodos de Kamailio de manera eficiente y escalable. El módulo DMQ permite a las instancias de Kamailio intercambiar mensajes de manera distribuida utilizando un modelo de publicación y suscripción. Esto es especialmente útil en clústeres donde varios servidores comparten información de presencia, registros y diálogos, por ejemplo.
Kamailio implementa con el modulo DMQ su propia lógica de mensajería sobre SIP, con un formato basado en JSON y transportado sobre UDP o TCP. Cada instancia de Kamailio que utilice DMQ debe estar configurada para identificarse de manera univoca y publicar datos sobre ciertos servicios (por ejemplo, presencia, diálogo, etc.) y suscribirse a datos publicados por otros nodos.
Cuando un nodo necesita compartir una actualización, como un nuevo estado de presencia o un cambio de contacto, utiliza el módulo DMQ para enviar un mensaje a todos los nodos suscritos. Estos mensajes son procesados por los módulos correspondientes, como presence, dialog o dmq_usrloc, que están integrados con DMQ. La configuración básica de un nodo DMQ incluye la IP y puerto local, la lista de nodos remotos, el nombre del nodo y los módulos que usará DMQ.
Una típica configuración del modulo DMQ sería:
# ---- dmq params ----
modparam("dmq", "server_address", "sip:10.0.0.3:5222")
modparam("dmq", "notification_address", "sip:10.0.0.2:5222")
modparam("dmq", "multi_notify", 0)
modparam("dmq", "num_workers", 4)
modparam("dmq", "ping_interval", 30)
-
en la segunda linea se pone la IP privada y el puerto del Servidor 1 que se utilizará para escuchar los mensajes SIP de tipo KDMQ
-
en la tercer linea se indica la IP Privada y el puerto del Servidor 2. Si se quisiera añadir un tercer servidor, se repetiría esta linea añadiendo IP Privada y puerto del tercer servidor
-
en la cuarta linea se pone en 1 si se trabaja con nombre de dominios en lugar de IP
-
en la quinta linea se indica el numero de hilos que se dedican al modulo
-
en la sexta y ultima linea cada cuanto se averiguará que los demás Kamailio estén funcionando y contestando los paquetes KDMQ enviados
para que el modulo funcione se añade una nueva linea de listen que contendrá este valor:
listen=udp:IPPrivada:5222
en ambos servidores: esto para que el servidor se ponga a la escucha sobre la IP Privada y puerto configurados en el parámetro server_address del modulo.
En la parte dedicada al Script de Kamailio, normalmente después de esta linea:
request_route {
se añade:
if(is_method("KDMQ")) {
dmq_handle_message();
}
Esto para que los mensajes SIP KDMQ se procesen correctamente. Los módulos que pueden aprovechar la configuración de este sistema de "mensajería" interna de Kamailio son:
-
DIALOG, para compartir los diálogos activos
-
DMQ_USRLOC, para compartir los registros de los usuarios
-
HTABLE, para compartir los datos guardados en las distintas tablas HASH utilizadas (ejemplo las IP Bloqueadas con el modulo PIKE)
-
PRESENCE, para compartir los datos de presencia
Una vez terminada la configuración y reiniciados los dos servidores Kamailio, en SNGREP deberían empezar a aparecer mensajes SIP de este tipo:
y en el mensaje KDMQ:
Indicando que los dos servidores se encuentran activos. Cuando se registre un nuevo dispositivo en uno de los dos Kamailio, el mensaje KDMQ:
Me comentan
Comentarios recientes