Tengo un servidor con una central telefónica Asterisk de alta disponibilidad. Cada llamada que se lanza ejecuta un script en php. Básicamente ese script lo que hace es realizar una serie de consultas a una base de datos y devuelve unas variables a Asterisk indicándole si el usuario puede realizar esa llamada, por que proveedor debe salir, etc. Ademas de esto el script también guarda un log con todo el proceso de ejecución.
Desde el pasado viernes, estoy teniendo problemas con cortes de red en el datacenter en el que está alojado el servidor de base de datos mysql, son cortes de 3 a 5 min de duración 4 o 5 veces al día.
Esto es lo que me arroja el log de una llamada.
El formato del log es:
Fecha#Hora Pid del servidor -[numero de linea del script] Log
Código:
Como se puede apreciar, desde que se inicia la conexión a la base de datos hasta que esta devuelve el ok, pasa mas de un minuto.02-09-14#13:06:28 32345-[493] ############## ################### ################# 02-09-14#13:06:28 32345-[494] ############## INICIO PROCESO LLAMADA ############## 02-09-14#13:06:28 32345-[495] ############## ################### ################# 02-09-14#13:06:28 32345-[505] ORIGEN SIP URI : sip:[email protected]:5061 02-09-14#13:06:28 32345-[506] ORIGEN SIP BRI : 02-09-14#13:06:28 32345-[507] ORIGEN SIP URO : 02-09-14#13:06:28 32345-[508] ORIGEN SIP MAI : [email protected]:5060 02-09-14#13:06:28 32345-[509] ORIGEN SIP AGE : 02-09-14#13:06:28 32345-[35] ################## FUNCION conectarDB ################## 02-09-14#13:07:31 32345-[50] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE #### 02-09-14#13:07:31 32345-[54] ################## FUNCION conectarDB2 ################# 02-09-14#13:07:31 32345-[69] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE #### 02-09-14#13:07:31 32345-[514] EXISTE CONEXION CON LA BASE DE DATOS 02-09-14#13:07:31 32345-[535] Variable $script = script.php
Esta es la función de conexión a la base de datos.
Código PHP:
//Realiza la conexion con las BD
function conectarDB()
{
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB ##################');
$this->conexionDB1 = mysqli_connect("XXX.XXX.XXX.XXX","usuario","pass","basedatos");
if(!$this->conexionDB1)
{
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION ####');
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB BACKUP ##################');
$this->conexionDB1 = mysqli_connect("localhost","user","pass","basedatos");
if(!$this->conexionDB1)
{
$this->noErrorConexionDB1 = false;
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BASE DE DATOS DE BACKUP ####');
}
}
else
{
$this->logueo('['.__LINE__.'] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####');
}
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB2 ##################');
$this->conexionDB2 = mysqli_connect("XXX.XXX.XXX.XXX","usuario","pass","basedatos2");
if(!$this->conexionDB2)
{
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BD2####');
$this->logueo('['.__LINE__.'] ################## FUNCION conectarDB2 BACKUP ##################');
$this->conexionDB2 = mysqli_connect("localhost","user","pass","basedatos2");
if(!$this->conexionDB2)
{
$this->noErrorConexionDB2 = false;
$this->logueo('['.__LINE__.'] ##### HAY UN ERROR DE CONEXION A LA BASE DE DATOS DE BACKUP ####');
}
}
else
{
$this->logueo('['.__LINE__.'] ##### CONECTADO A LA BASE DE DATOS CORRECTAMENTE ####');
}
return ($this->noErrorConexionDB1 && $this->noErrorConexionDB2);
}
¿Hay alguna forma de limitar el tiempo de espera de respuesta de la conexión a la base de datos 1?
Por ejemplo si en 3 segundos no has conectado que conecte a la local.
Aceto también cualquier otra idea para solucionar el problema.
En el datacenter están trabajando en el problema, pero llevan así desde el viernes!
Un saludo y muchas gracias por adelantado.
PD: Obviamente se han omitido los usuarios y contraseñas reales, así como direcciones IP, etc.
PD2: La solución no pasa por cambiar el servidor de datacenter!