This is an old revision of the document!
Table of Contents
Descripcion
Documentación de la prueba para netquest.
Bitacora
pre
- Configurado JVM para jboss con los siguientes parámetros:
-Xms128m -Xmx1024m -XX:MaxPermSize=256m
27/02
- Configuro Mysql en el jboss como DefaultDS
- Configuro Mysql en el jboss para JMS, elimino hypersonic
- La aplicación está configurada para usar un DS propio con credenciales de root.
28/02
- Configuro el DS de la aplicación en JBOSS con unas credenciales con menos privilegios
- Reempaqueto la aplicación sin el DS para que use la de JBOSS
- Sincronizo JBOSS en el nodo2
- Sincronizo MySQL en el nodo2
- Sincronizo /etc en el nodo2
- Comienzo la configuración de réplica en mysql.
29/02
Objetivo:
- Configurar la réplica de mysql
- Eliminar nginx de rh y compilarlo con los módulos “nginx-sticky-module”, “nginx-upstream-jvm-route” y “nginx-cache-purge”
- Configurar nginx con los 2 servidores de jboss en el pool
DONE:
- Configurar réplica para la bbdd “exam”
- Eliminado nginx, instalada la última versión “from source”:
nginx version: nginx/1.0.12 built by gcc 4.4.5 20110214 (Red Hat 4.4.5-6) (GCC) TLS SNI support enabled
- Done, configurados los 2 jboss'es, cada uno es backup del otro, en modo failover, solo se pasarán peticiones al otro nodo si tenemos el jboss local caído.
01/03
Objetivo:
- Configurar caché y el purgado de nginx
DONE:
- Caché de nginx configurada, para purgar ficheros de la caché se ha de realizar lo siguiente:
http://server01/purge/dinamico
Si la URL que queremos purgar es:
http://server01/dinamico
La limpieza de caché se debe realizar desde la ip local (localhost), limitado en config.
02/03
Objetivo:
- Instalar y configurar MysqlProxy
DONE:
- Instalado, actualmente el datasource de “exam” accede mediante el mysql-proxy, también se puede probar accediendo a cualquiera de los nodos mediante:
mysql --port=4040 --host=server02 -p -u exam mysql --port=4040 --host=server01 -p -u exam
0x/03
Objetivo:
- Cambios en las ips de los nodos.
AWS balancing
DONE:
- Programado script para arranque en frio (ver Arranque frío)
Management
Resumen de las acciones principales del sistema:
nginx
start
/etc/init.d/nginx start
stop
/etc/init.d/nginx stop
restart
/etc/init.d/nginx restart
Limpieza de la caché
Sin usar el método recomendado (por URL), podemos limpiar la caché mediante:
rm -fr /dev/shm/nginx* /etc/init.d/nginx restart
Configuración
La configuración ha de realizarse en los directorios:
/etc/nginx
/etc/nginx/conf.d
/etc/nginx/sites
mysql
start
/etc/init.d/mysqld start
stop
/etc/init.d/mysqld stop
restart
/etc/init.d/mysqld restart
Acceso al "cluster"
El acceso debería realizarse mediante el servicio mysql-proxy o en su defecto por el nodo1 del servicio para no romper la réplica. Para conectarse:
mysql -u USUARIO -p -P4040 -h server01
Replica
Conectados al/los nodos SLAVE.
Parar
stop slave;
Arrancar
start slave;
Slave Status
show slave status \G
Master status
Conectado al nodo MASTER:
show master status \G
mysql-proxy
start
/etc/init.d/MySQL-Proxy start
stop
/etc/init.d/MySQL-Proxy stop
restart
/etc/init.d/MySQL-Proxy stop && sleep 5 && /etc/init.d/MySQL-Proxy start
jboss
start
/etc/init.d/jboss start
stop
/etc/init.d/jboss stop
restart
/etc/init.d/jboss stop && sleep 5 && /etc/init.d/jboss start
Arranque frío
Para un cold start, se ha programado un script:
/root/netquest_cluster_ip_updater.sh
Que realiza las siguientes acciones:
- Actualiza el fichero de hosts local con la nueva ip local y las ips locales del resto de los nodos.
- Da la opción de reiniciar los servicios asociados:
- mysql
- mysql-proxy
- jboss
- nginx
Notas adicionales:
- Comprobar el estado de la réplica de mysql después de un inicio en frío.
- Es recomendable para evitar problemas de réplica, lanzar primero el script de arranque desde el Master primero.
- Este script necesita que estén los nodos arrancados (que esté funcionando sshd).
Objetivo Final (WIP)
Descripción de la arquitectura
De arriba a abajo:
- Mediante las herramientas de Amazon se balancearán los webservers
- Ambos webservers están configurados de manera que ataquen a ambos jboss pero priorizando el jboss local, de tal forma que el 2º JBOSS se usará en caso de caída.
- Para obtener el máximo rendimiento de nginx, hemos de separar contenido estático de dinámico, de tal forma que el estático siempre se servirá desde nginx.
- Adicionalmente se usará lo máximo posible la caché de nginx para reducir en la medida de lo posible los accesos a JBOSS. Se proporcionará a los programadores de un sistema de borrado de caché desde la propia aplicación.
- Hay que concretar con el equipo de desarrollo donde sí y donde no se puede instalar la caché dentro de la aplicación web.
- Para evitar el uso del sistema de clustering de jboss se debería tener en cuenta por parte de los programadores un sistema de recuperación de la sesión del cliente desde BBDD para que en caso de caída de un nodo, al balancearse la carga al otro, este sea capaz de comprobar mediante la COOKIE del cliente, las credenciales del mismo y que ya estaba logado.
- En ambos nodos habrá un mysqlproxy de tal forma que cada jboss atacará al mysqlproxy local y este realizará el balanceo de querys de la forma que se puede ver en el esquema.