I
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Física
Carrera de Ingeniería en Sistemas
Computacionales
“Administración Y Balanceo De Carga En Servidores Web”
TOMO 1
PROYECTO DE GRADO
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Cevallos Basurto Juan Carlos
Llerena Pincay Claudia Gabriela
Naula Robles Alexander Alberto
GUAYAQUIL – ECUADOR
Año: 2008
II
AGRADECIMIENTO
Agradezco a Dios por su infinita ayuda y por
hacerme creer una vez más que aunque todo
parezca perdido siempre hay una luz de
esperanza al final del camino, agradezco a mi
familia que me apoyo hasta el final, mis amigos
y a todos las personas que estuvieron siempre
pendiente de mi superación profesional.
Gabriela Llerena
Sin duda alguna que mi agradecimiento va
dirigido al ser supremo que gobierna mi vida, y
es Dios, el que con su amor infinito supo
ubicarme con las personas ideales para el
engrandecimiento de mi vida profesional y
espiritual. En el plano familiar debo ser
agradecido de forma infinita a uno de los seres
que mas amo y es sin duda alguna el Ingeniero
Víctor Hugo Robles Palacios mi TIO y por sobre
todo PADRE ejemplar, que en el preciso
III
instante que adquirió el compromiso y
responsabilidad de criarme, supo brindarme su
amor expresado como herramientas de
vivencia; depositando en mi su entera confianza
y firme convicción de que no lo defraudaría,
impartiéndome consejos, enseñanzas, estrictos
cuidados y por sobre todo su ayuda económica
de forma desinteresada.
El conjunto de todo esto ha logrado que culmine
mi carrera profesional; al Sr. Luis Alberto Naula
Carrasco mi PADRE que con su escasa ayuda
y consejos distantes me proporciono su apoyo,
no puedo dejar de lado al resto de mi familia,
allegados mas cercanos, amigos
incondicionales como lo son Luis Villanueva,
José Villon, Geovanny Mosquera, Danny
Apolinario y Fernando Carpio y por ultimo a mis
compañeros Gabriela y Juan Calos que
supieron sobrellevar como grupo mis locuras,
problemas y vicisitudes en el transcurso de
nuestro seminario y culminación profesional.
Alexander Naula
IV
Agradezco a todas aquellas personas que
incondicionalmente estuvieron dándonos su
apoyo tanto moral, espiritual y profesional,
tambien en aquellos que confieron en nuestras
fortalezas, nuestros padres, hermanos
familiares, amigos y primordialmente a Dios que
nos brindo sabiduría, virtud y paciencia para
culminar un peldaño más de nuestra vida
profesional.
Juan Carlos Cevallos
DEDICATORIA
Dedico esto a las personas que han estado
siempre a mi lado.
Gabriela Llerena
Mi agradecimiento en su totalidad se lo doy a
tres mujeres espectaculares que Dios puso en
mi vida; que han sido mis sólidas bases en el
largo y difícil camino al éxito de mi carrera
profesional.
V
Pienso, creo y estoy plenamente convencido
que el inicio de mi agradecimiento tiene que ir
dirigido de manera muy particular al ser que me
dio el don de la vida mi MADRE la señora
Carmen Amelia Robles Palacios que con poco o
mucho esfuerzo supo brindarme su apoyo,
cariño y afecto; a otra persona que le debo el
éxito y culminación de mi carrera es a mi
ABUELITA la señora María Emperatriz
Palacios; mujer ejemplar, luchadora digna de
admiración y pilar fundamental en mi vida; que
supo brindarme su amor de madre , principios y
educación; y por ultimo este agradecimiento
también voy a dirigirlo a la tercera y última
mujer en mi vida que no por ser la última deja
de ser una de las más importantes; ella que sin
importarle nada y mucho menos sin pedir nada
a cambio dedico su niñez, adolescencia y parte
de su plena madurez en lograr forjar en mi el
profesional que soy y que siempre ha velado
por mi bienestar; la Ingeniera Margarita de las
Mercedes Dorado Palacios que cumpliendo con
VI
su función de TIA supo darme todo el afecto
que un HIJO puede recibir de una MADRE que
sin necesidad de engendrarme tuvo el amable
gesto de reemplazarla; llenar los vacíos y
necesidades en mi vida; en esencia juntas han
logrado crear el ser humano que soy.
Alexander Naula
Este proyecto esta dedicado a nuestros padres,
hermanos, familiares, amigos y profesores que
siempre estuvieron a nuestro lado dándonos
fortaleza, forjándonos moral, personal y
profesionalmente, sin olvidar la integración
profesional de cada uno de nosotros que
formamos nuestro proyecto para poder cumplir
nuestra meta y salir como ingenieros; no
olvidando que todo lo que hacemos es dedicado
a Dios ya que por él y para él estamos aquí y es
este triunfo.
Juan Carlos Cevallos
VII
TRIBUNAL DE GRADUACIÓN
Presidente del Tribunal Primer Vocal
Segundo Vocal Secretario
VIII
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”.
(Reglamento de Graduación de la Carrera de Ingeniería en sistemas
Computacionales, Art. 26)
Cevallos Basurto Juan Carlos
E-mail: [email protected]
Llerena Pincay Claudia Gabriela
E-mail: [email protected]
Naula Robles Alexander Alberto
E-mail: [email protected]
IX
RESUMEN
Tanto en el mundo empresarial, como en el mundo académico, existen
ciertas aplicaciones que dada su naturaleza deben proporcionar un servicio
ininterrumpido de 24x7 (24 horas al día, 7 días a la semana). Piénsese por
ejemplo en un servidor de bases de datos en un banco o en un Servidor de
Paginas Web.
Para conseguir estos niveles de disponibilidad se suele utilizar una
configuración avanzada de software, una solución denominada Balanceador
de Carga (Load Balanced) el cual incrementará la calidad de los Servidores
Web Balanceando la Carga y así funcionar de una manera pacifica ejemplo
que no afecte al usuario.
Se puede encontrar un sistema Load Balanced que sea robusto y flexible
para los Servidores y que el tráfico de la Web del HTTP y de HTTPS sea
balanceado a través de un Cluster de Servidores (Server Cluster). Con esta
solución los Servidores tendrán un tráfico que llenará las expectativas, al
realizar el Servidor Load Balanced la carga es mucho mas rápida y fácil. Se
pueden necesitar mas de un solo servidor, cuando la configuración es mas
compleja combina redes publicas, redes privadas.
El Load Balanced es una de las opciones para los empresarios que eligen
instalar Servidores Dedicados en una configuración en Cluster. Hoy en día
los Load Balanced es justo la solución a los Servidores Dedicados.
SUMMARY
In the business world as in the academic world there are some applications that
given its nature must provide an uninterrupted service for 24x7 (24 hours a day,
7 days a week). Consider for example a database server at a bank or a Web
server page.
To achieve these levels of availability is often used advanced configuration
software, a solution called load balancing (Load Balanced) which will enhance
the quality of Web servers Balancing Cargo and operate such a peaceful
manner without affecting the user.
You can find a system load balance that is robust and flexible for servers and
that traffic on the Web HTTP and HTTPS be balanced through a Cluster Server
(Cluster Server), servers With this solution will have a traffic fill expectations. In
making the server load balance the load is much more quickly and easily. It may
require more than a single server where the configuration is more complex
networks combining public and private networks.
The Load Balanced is an option for employers who choose to install a dedicated
server configuration in Cluster. Today Load Balanced is just the solution to the
dedicated servers.
X
INDICE GENERAL
AGRADECIMIENTO IIDEDICATORIA IVTRIBUNAL DE GRADUACIÓN VIIDECLARACIÓN EXPRESA VIIIRESUMEN IXINDICE GENERAL X
TOMO 1
Capitulo 1 1
Capitulo 2 28
Capitulo 3 50
Capitulo 4 72
Capitulo 5 88
Capitulo 6 97
Glosario 100
Bibliografía 108
Anexos a
XI
CAPITULO 1
1. Introducción 1
1.1. Definición de la Situación 2
1.2. Antecedentes 3
1.3. Proyectos / Productos de Clúster 5
1.4. Problemática 6
1.5. Solución 7
1.6. Visión 8
1.7. Misión 9
1.8. Objetivo General 9
1.9. Objetivo Especifico 10
1.10. Alcance 10
1.11. Límites 13
1.12 Ventajas Principales 14
1.13. Otras Ventajas 15
1.13.1. Tiempo 15
1.13.2. Costo 15
1.13.3. Trafico 15
1.14. Desventajas 15
1.15. Análisis FODA 16
1.16. Arquitectura 17
1.16.1 Arquitectura de tres capas 17
XII
1.17.Modelo de Desarrollo 19
1.18.Metodología 20
1.18.1. Encapsulación 20
1.18.2. Herencia 20
1.18.2. Polimorfismo 20
1.19. Recursos 21
1.20. Software 21
1.21. Plataforma 21
1.22. Servicios 22
1.23. Herramientas de Desarrollo 22
1 .23.1. Base de Datos 22
1.24. Hardware 22
1.25. Humano 24
1.26. Cronograma de Actividades 24
1.27. Gestión de Riesgos 24
1.27.1. Identificación de Riesgos 24
1.28. Impacto y Probabilidad de los Riesgos 26
1.29. Análisis Legal 27
CAPITULO 2
2.1. ANALISIS 28
2.2. Levantamiento de la información 28
XIII
2.3. Análisis de requerimientos 30
2.4. Caso de Uso 31
2.5. Diagrama de Caso de Uso 31
2.6. Detalle de los Casos de Uso 33
2.7. Diagrama de Especificación de Procesos 44
2.8. Diagrama Entidad Relación 49
CAPITULO 3
3.1. Diseño 50
3.1.1. Diseño de la interfaz 50
3.2. Diagrama de Clases 69
3.3. Diagrama de Colaboración 70
3.4. Diagrama de Flujo de Ventanas 71
3.5. Diseño Arquitectónico 71
CAPITULO 4
4. Implementación 72
4.1. Estándares del sistema 72
4.2. Paquetes de Origen 73
4.3. Bibliotecas de Prueba 74
4.4. Codificación del Sistema 75
XIV
CAPITULO 5
5. Pruebas 88
5.1. Introducción 88
5.1.1. Prueba de base de datos 88
5.1.2. Prueba de clases 88
5.1.3. Prueba de integración de clases 88
5.1.4. Prueba de integración del sistema 89
5.1.5. Demostrar funcionamiento con el código 89
5.1.6. Prueba de cambios 89
5.1.7. Prueba de stress 89
5.1.8. Revisión técnica 89
5.2. Casos de prueba 90
5.3. Generación de errores durante las pruebas 91
5.4. Conclusión de prueba 95
CAPITULO 6
6. Conclusiones y Recomendaciones 97
6.1. Conclusiones 97
6.2. Recomendaciones 99
XV
Tablas
Tabla 1. Productos de Clúster 5
Tabla 2. Análisis FODA 16
Tabla 3. Impacto Probabilidades 26
Tabla 4. Bloque de Autentificación 33
Tabla 5. Reporte de Sistemas 34
Tabla 6. Selección de 35
Tabla 7. Alerta del Sistema 36
Tabla 8. Alerta Carga Servidor 37
Tabla 9. Alerta Estado del Servidor 38
Tabla 10. Respaldo de Base de Datos 38
Tabla 11. Configuración Perfil Administrador 39
Tabla 12. Ingreso Datos Adicionales 40
Tabla 13. Nuevo Server 41
Tabla 14. Reportes Monitoreo del Trafico de la Red 42
Tabla 15. Trafico de la Red Capacidad de Acceso 42
Tabla 16. Capacidad del (HDD) Base de Datos 43
Tabla 17. Autenticación 45
Tabla 18. Especificación de Bienvenida 45
Tabla 19. Especificación de Proceso Nuevo Servidor 45
Tabla 20. Especificación de Proceso Eliminar Servidor 46
XVI
Tabla 21. Especificación de Proceso Monitoreo 46
Tabla 22. Especificación de Proceso Monitoreo – Servicios 46
Tabla 23. Especificación de Proceso Monitoreo de Sensor de red,
Estadísticas Graficas 47
Tabla 24. Especificación de Proceso Reportes 47
Tabla 25. Especificación de Proceso Respaldos 48
Tabla 26. Perfil de usuario 48
Tabla27. Casos de prueba 90
Gráficos
Gráfico 1. Implementando Servidor de Balanceo 8
Gráfico 2. Arquitectura del Modelo de 3 Capas 18
Gráfico 3. Modelo Espiral 19
Grafico 4. Modelo Balanceo 29
Grafico 4. Caso de Uso 32
Grafico 5. Bloque Autenticación 33
Grafico 6. Caso de Uso – Reporte Sistema 34
Grafico 7. Selección de Ip 34
Grafico 8. Alerta del Sistema 35
Grafico 9. Alerta Carga Servidor 36
Grafico 10. Alerta Estado del Servidor 37
Grafico 11. Respaldo de Base de Datos 38
XVII
Grafico 12. Configuración Perfil Administrador 39
Grafico 13. Ingreso Datos Adicionales 39
Grafico 14. Nuevo Server 40
Grafico 15. Reportes Monitoreo del Trafico de la Red 41
Grafico 16. Trafico de la Red Capacidad de Acceso 42
Grafico 17. Capacidad del (hdd) Base de Datos 43
Grafico 18. Especificación de Procesos 44
Gráfico 19. Diagrama Entidad Relación (DER) 49
Gráfico 20. Pantalla de inicio de sesión 51
Gráfico 21. Pantalla de Bienvenida 51
Gráfico 22. Pantalla de Nuevo Servidor Real 52
Gráfico 23. Pantalla de Eliminar Servidor Real 53
Gráfico 24. Pantalla de Monitoreo 54
Gráfico 25. Pantalla de Monitoreo – Servicios 55
Gráfico 26. Pantalla de Monitoreo – Nodos Conectados 56
Gráfico 27. Pantalla de Monitoreo – HDD/Memoria/Procesador 57
Gráfico 28. Pantalla de Monitoreo – HDD/Memoria/Procesador 58
Gráfico 28.1. Pantalla de Monitoreo – HDD/Memoria/Procesador 59
Gráfico 29. Pantalla de Consola 60
Gráfico 30. Reportes 61
Gráfico 31. Reportes de Tráfico 62
Gráfico 31.1. Reportes de Conexiones Actuales 63
XVIII
Gráfico 32. Respaldo 64
Gráfico 33. Perfil Administrador 65
Gráfico 34. Perfil Administrador – Respuesta Secreta 66
Gráfico 34. Perfil Administrador – Respuesta Secreta 67
Gráfico 34.2. Perfil Administrador – Respuesta Secreta 67
Gráfico 35 - Perfil Administrador – Recepción de Clave 68
Gráfico 35.1. Perfil Administrador – Recepción de Clave 68
Gráfico 36. Estructura de Directorios Principales 72
Gráfico 37. Estructura de Paquetes Origen 73
Gráfico 38. Estructura de Bibliotecas de Prueba 74
Glosario
Glosario de Términos 100
Bibliografía
Bibliografía 108
Anexos
Anexo 1. Cronograma de Actividades – Programa de desarrollo Sistema
Bascula Web a
Anexo 2. Licencia GNU c
1
CAPITULO 1
1. INTRODUCCION
Este proyecto demostrará cómo instalar un balanceador de carga en
una simulación de una pequeña granja de Cluster de Servidores Web
Apache que proporcione alta disponibilidad; para ser posible esto se
va ha utilizar el sistema operativo Linux Centos 5.
Delante de la granja de Servidores Apache crearemos un balanceador
de la carga que divida peticiones entrantes entre los dos nodos
Apache. Porque nosotros no queremos que el balanceador de la carga
llegara a ser otro "único punto de falla", debemos proporcionar alta
disponibilidad para el balanceador de carga.
Por consiguiente nuestro balanceador de carga consiste en que dos
nodos del balanceador de la carga supervisen, y si un balanceador de
la carga falla, el otro asume el control silenciosamente. Esperamos
que nuestra explicación haya sido lo más expresamente sencillo.
2
1.1. Definición de la Situación
En el principio de la historia de las computadoras, se tenía el concepto
de que una súper computadora (o Main Frame) consistía en una
maquina que contaba con un súper procesador que daba servicio a
varias terminales tontas. Mayor poder de cálculo demandaba
procesadores más poderosos.
Este concepto se rompió en 1994, cuando Donald Becker y Thomas
Sterling lograron un alto nivel de procesamiento, comparable a un
super computador, al poner a trabajar varias computadoras en paralelo
con 16 procesadores Intel DX4 y inter-conectadas en una red Ethernet
de 10 Mbips Ethernet. A este proyecto se le llamo Beowulf.
Desde el éxito del proyecto de Beowulf, muchos otros proyectos
iniciaron en la investigación del tema, para convertir hardware de bajo
costo en cluster que logren equiparar las velocidades alcanzadas por
las super-computadoras.
Actualmente, el cluster de computadoras se ha utilizado para varias y
diferentes tareas como Data Mining, Servidores de Archivos,
Servidores de Base de Datos, Servidores Web, Simuladores de Vuelo,
“Graphics Rendering”, Modeladores Climáticos o incluso para “CD
Ripping” alcanzando velocidades realmente altas.
3
La idea detrás de los clusters es reunir el poder de cómputo de los
nodos involucrados para proveer alta escalabilidad, más poder de
cómputo combinado, o para construir redundancia para proveer alta
disponibilidad. Entonces en vez de un simple cliente haciendo
peticiones de uno o más servidores, los cluster utilizan múltiples
máquinas para proveer un ambiente más poderoso de cómputo, a
través de una sola imagen de sistema, esto es que el procesamiento
sea visible al usuario como una sola unidad, aunque se componga de
muchas computadoras trabajando en paralelo para el mismo fin.
El alto poder de procesamiento de varias computadoras trabajando en
paralelo, (o cluster de computadoras), se perfila como una solución
viable a las empresas, universidades y escuelas a un bajo costo de
implementación.
Con el tiempo, la investigación se ha ido especializando en áreas
específicas. El “Cluster de Alto Rendimiento” se aplica principalmente
a aplicaciones científicas.
1.2. Antecedentes
Con respecto a la investigación, desarrollo, construcción y
aplicaciones de clusters, hay mucho trabajo realizado, pero
relativamente poca bibliografía porque el tema de clusters de
4
computadoras ha ganado auge en la última década e incluso a
mediados de los noventa.
Hoy en día, hay muchísimos trabajos de diferente índole con respecto
a los clusters de computadoras, debido a que en el ámbito de
computación paralela, el cluster es la nueva modalidad de
construcción de supercomputadoras, por su bajo costo y accesibilidad.
Uno de los pioneros y mas respetados en el mundo de los clusters de
computación es el Dr. Rajkumar Buyya, del Departamento de Ciencias
de la Computación e Ingeniería de Software de la Universidad de
Melbourne, Australia, quien actualmente es uno de los directores de la
“IEEE Computer Society Task Force on Cluster Computing”.
Su sitio Web es un punto de entrada para información de referencia
con respecto a clusters de computadoras, grids computacionales y
temas relacionados. Citando algunos de los proyectos / productos de
clusters de computadoras, los presentamos con alguna clasificación.
El problema más común en la actualidad de los grandes Sitios Web
en Internet se ocasiona con el crecimiento del número de usuarios,
es lo que conocemos como un problema de escalabilidad que no es
otra cosa que la gestión de solicitudes de un gran número de usuarios.
Por la facilidad de acceso, la gran demanda de servicios de Internet y
la transferencia de información de todo tipo es muy común que se
ocasione el congestionamiento involuntario de los servicios de algunos
5
equipos que tengan funciones primordiales. El balanceo de carga nos
permite repartir de manera equitativa el trabajo para así lograr que
funcionen de manera ininterrumpida y sin errores durante todo el
tiempo que lo requiera la empresa.
1.3. Proyectos / Productos de Clusters
Tabla 1.- Productos de ClustersTipos de clustersClusters de Alta Disponibilidad Clusters de Alto RendimientoLinux HA PVMHA-OSCAR: The High Availability
Manager PvmsyncKimberlite MPILifeKeeper LAM/MPILinux FailSafe PLUS: MPI&PVM integrationLinux Replicated High AvailabilityManager Beowulf (for Linux)MC/Serviceguard Berkeley NOW (for Solaris)Oracle Real Application Custers Parallel KnoppixIBM DB2 Integrated Cluster EnvironmentMC/ServiceguardFrenasMallas (Grids) de computadoras Balanceo de CargaSGE (Sun Grid Engine) Alinka OrangesGridSim toolkit for Simulation ofApplication Scheduling KeepalivedGridbus: Toolkit for service-orientedcluster and grid computing Linux Virtual Server
LVSMRed Hat Cluster Suite
Turbolinux Cluster ServerUltra MonkeyCondorOpenMosixCluster Knoppix
6
1.4. Problemática
Para efecto de mayor entendimiento quienes conformamos el grupo de
proyecto (Balanceador de carga de servidores Web) vamos a tomar
como ejemplo o guía de proyecto la necesidad o problemas que
existan o se den en el departamento de sistemas, específicamente en
el área de servidores Web.
Los problemas a solucionar y vamos a dar a conocer es la saturación
que han podido evitar los grandes servidores de correo WEB:
El colapso de páginas debido a la gran cantidad de usuarios que
accedan para realizar sus trámites personales.
El tiempo de respuesta que existe desde el mismo momento que
accedan a la misma.
La no existencia de una correcta herramienta administrativa que
prevea los problemas de los servidores.
La inconsistencia que se da a nivel de datos al momento de
realizar una consulta.
La irregularidad del funcionamiento de sus servidores.
La ausencia de un servidor Web alternativo que remedie los
problemas.
El desprestigio que ocasiona este tipo de problemas.
7
Otros inconvenientes es que la mayoría de nosotros estamos un poco
más acostumbrados al ambiente Windows, por lo que será algo más
difícil y compleja la configuración de archivos en linux para lograr
nuestro cometido.
1.5. Solución
Se puede optar por soluciones de hardware y de software como un
Balanceador de Carga (Load Balanced). La solución más óptima es la
primera pero es muchísimo más cara (entre $30.000 y $60.000).
Mediante software se puede montar un balanceo muy económico pero
proporciona una alta disponibilidad y rapidez en el acceso de los
servidores Web.
Aparte se implementaría una aplicación sencilla (Gráfico 1) que
utilizaría el usuario administrador tenga este conocimientos de Linux
en donde se monitorizaría el control de los servidores, tráfico de red,
reportes, etc. Sintiéndose este seguro del manejo de los servidores.
8
Gráfico 1 - Implementando Servidor de Balanceo
1.6. Visión
Lograr reconocimiento y el posicionamiento total en el mercado a nivel
tecnológico e informático para convertirnos en la principal herramienta
confiable, segura y a bajo costo en comparación a las soluciones ya
existentes en el mercado; haciendo de esta alternativa tecnológica la
ayuda a la Administración segura de servidores Web; facilitándole la
labor al Administrador del Centro de Cómputo.
9
1.7. Misión
Desarrollar una herramienta (aplicación web) que logre un excelente
performance de los servidores web, integrando servicios considerando
recursos tecnológicos, humano, hardware con la finalidad de ofrecer
un producto amigable y de fácil manejo
1.8. Objetivo General
Nuestro propósito como grupo de proyecto (Balanceador de carga de
servidores Web) es solucionar los problemas ya existentes en lo que
demanda a solicitudes de usuarios a un acceso web con una correcta
administración a los servidores Web, así evitando un desastre de
saturación Web.
Soluciones puntuales de alta disponibilidad que abarcan BALANCEO
DE CARGA, son por ejemplo, sockets seguros, uso de cachés y, en
muchos casos, calidad de servicio.
Las soluciones de BALANCEO DE CARGA, las redes de entrega de
contenido, los sistemas de almacenamiento tolerantes a fallas, pueden
ayudar a crear una infraestructura con alto desempeño y
disponibilidad, capaz de crecer junto con el negocio, y lograr con esto
un óptimo servicio para usuarios que deseen tener una respuesta
optima ha un requerimiento WEB.
10
1.9. Objetivo Especifico
Información oportuna para el Usuario final
Aprovechar todo el potencial tecnológico que pueda encontrarse en
desuso en una institución determinada.
Ofrecer un mejor desempeño y fiabilidad a los usuarios.
Ayudar a mantener la disponibilidad si surgen problemas de
conectividad.
Remitir al usuario la salida más cercana cuando soliciten contenido
o realicen transacciones.
En caso de una falla en los servidores eso sea totalmente
transparente en los accesos a su servidor consolidado (Servidor
Web).
En caso de presentarse un inconveniente, las solicitudes pueden
redirigirse a otro disponible y brindar el servicio mientras se hace
un diagnóstico y reparación.
1.10. Alcance
Para poder cumplir con todas las exigencias de nuestro proyecto, el
concepto que se debe aplicar es llamado “granja de Servidores Web”.
Para ofrecer de esta forma un sistema tolerante a fallas que no es otra
cosa que balanceo de carga.
11
Si un balanceador de carga actúa como reserva, listo para asumir las
obligaciones del dispositivo primario en caso de emergencia, se podría
prestar servicio las 24 horas.
Control efectivo del servidor consolidado (Servidor Web).
Monitoreo de horas trabajadas por servidor para poder efectuar
informes mensuales.
Asegurarse que no limite la capacidad de crecimiento. Se refiere a
que el wizard que realizaremos para el sistema de administración
de balanceo note que se necesita agregar otro servidor de real y
avise por medio de una alarma (vía mail), ejemplo cuando la carga
de los servidores sea mayor al 80 %.
Re direccionamiento de paquetes con sus respectivos archivos de
configuración. Cuando el usuario levante por medio de un browser
la aplicación de los servidores y estando dentro de la aplicación
quiera abrir otra ventana de la aplicación la conexión será
redireccionada con otro servidor y se mantendrán los archivos y
paquetes, es Monitoreo de sus accesos de servicios a la página.
No se perderán dichos paquetes por el cambio de conexión de un
Server Web a otro.
Aplicación que manipule los archivos de la misma.
12
Desarrollar una aplicación para la administración de un
balanceador de carga para representar gráficamente el tráfico de la
red en tiempo real para poder tener control.
Que el tráfico correspondiente a servidores no vaya por la misma
línea que por donde va el tráfico de las caches. Normalmente en la
cache se guardan direcciones del browser, cuando se pida una
nueva conexión se pretende que no busque la aplicación en la
cache del Server sino que directamente la cargue sin buscar en la
cache.
TCP LOAD BALANCING SUPPORT. Que el balanceo soporte
TCP.
UDP LOAD BALANCING SUPPORT. Que el balanceo soporte
UDP.
Hacer cluster de servidores con IP virtuales para contención y
balanceo.
Gráfico Estadístico.
Alertas por e-mail, cuando falle un nodo de nuestra red. Si falla un
servidor de aplicación, alerte al administrador enviando un mail
notificando la falla.
13
1.11. Límites
Se implementara un cluster de alta disponibilidad, escalable y
balanceo de carga. No se usara hardware de servidores,
simplemente se usarán PCs normales para la configuración
Otros tipos de cluster como alto rendimiento, grids (mallas
computacionales), clusters para rendering farms se dejarán como
posterior investigación.
La configuración del cluster a demostrar, por las limitaciones del
hardware, es para efectos de prueba solamente, no se recomienda
para ambientes de producción.
Para las interconexiones de red, se usara Fast Ethernet de 100
Mbps, cuando el recomendado para interconexiones de servidores
en un cluster es el Gigabit Ethernet (1Gbps).
Para la comparación de costo entre un servidor normal y cluster,
no se podrá disponer del hardware para servidor de base de datos,
con características semejantes al cluster en cuanto a número de
procesadores, por cuestiones de presupuesto, por lo tanto se hará
una comparación usando solamente el precio de venta que el
fabricante publica.
14
1.12 Ventajas Principales
Podemos encontrar un sistema Load-Balance que cumple con las
siguientes normas:
Un sistema Robusto y flexible para tus Servidores.
Mayor control del tráfico de la Web del HTTP y de HTTPS sea
balanceado a través de un Server Clúster.
Servidores Dedicados en el Load-Balance la carga es mucho más
rápida y fácil.
Nos permitan productividad 7x24x30.
Administración y monitoreo constante.
Su performance a un 99.999%.
Transparencia total para el usuario ya que este nunca sabrá si uno
de los sistemas entró en modo de respaldo y levanto servicios.
Tolerancia a fallos.
Alta disponibilidad.
Alto rendimiento.
Escalabilidad.
Equilibrio de carga.
Configuración remota desde cualquier lugar dentro y fuera de la
red.
El sistema nos brinda control de ingreso mediante password.
15
1.13. Otras Ventajas
1.13.1 Tiempo
Brinda información oportuna para una buena toma de decisión.
La configuración se realiza en tiempo real.
1.13.2 Costo
Ahorro de personal con conocimiento en plataforma Linux.
Ahorro de capacitación en S.O. Linux, ya que no necesita tener
conocimientos avanzados en configuración de los servicios
No requerir aumento del ancho de banda.
1.13.3 Trafico
Mediante el load balance logramos controlar la sobrecarga de
peticiones web logrando un mejor performance en nuestros
servidores.
1.14. Desventajas
No se usara hardware de servidores, simplemente se usarán PCs
normales para la configuración
16
La configuración del balanceador de carga a demostrar, por las
limitaciones del hardware, es para efectos de prueba solamente, no
se recomienda para ambientes de producción.
Daño de equipos
Falta de Backups
1.15. Análisis FODA
Tabla 2 – Análisis FODA
FODA
FORTALEZA ALTA DISPONIBILIDADOPEN SOURCECONFIGURACION VIA WEBCONTROL DE ACCESOSISTEMA ROBUSTO Y FLEXIBLE
OPORTUNIDADES MEJOR CONTROL DE RECURSOS WEBBAJO COSTO Y ALTO RENDIMIENTOFACILIDAD DE CONFIGURACIONAPOGEO EN EL MERCADO INFORMATICOCONTROL IMPERCEPTIBLE PARA EL USUARIO
DEMANDA INTITUCIONES FINANCIERASGRANDES EMPRESASPEQUEÑAS EMPRESASTODA INSTITUCION CON VISION FUTURISTAUNIDADES EDUCATIVAS
AMENAZA FALLOS DE HARWARECLONACION POR SER OPEN SOURCEDESCONFIANZA POR EL COSTONO CONTAR CON RECURSOS BASICO PARA ELAPLICATIVODESASTES NATURALES
17
1.16. Arquitectura
1.16.1 Arquitectura de tres capas
Especialización de Arquitectura Cliente Servidor (Gráfico 2), donde la
carga se divide en tres partes con un reparto claro de funciones, Una
capa para la Presentación, otra para el Negocio y otra para el
Almacenamiento.
a) Capa de Presentación
Es la que esta visible para el usuario (la denominan “capa de
usuario”), presenta el sistema al usuario, le comunica la información y
la captura, dando un mínimo al proceso (realiza un filtrado previo para
comprobar que no hay errores de formato). Esta Capa se comunica
únicamente con la Capa de Negocios.
b) Capa de Negocios
Es donde residen los programas que se ejecutan, recibiendo las
peticiones del usuario y enviando las respuestas tras procesos. (Se
denomina Capa de Negocios e incluso Lógicas de negocios), pues es
aquí donde se establecen todas las reglas que deben cumplirse. Esta
Capa se comunica con la Capa de Presentación, para recibir las
solicitudes y presentar los resultados, y con la Capa de Datos, para
solicitar al gestor de BD para almacenar datos de él.
18
c) Capa de Datos
Es donde residen los datos. Está formado por uno o más gestores de
Base de Datos, que realiza el almacenamiento de Datos, recibe
solicitudes de almacenamiento o recuperación de información desde
la capa de Negocio. Contiene la base de datos, esta es responsable
de almacenar toda la información necesaria para la aplicación.
Gráfico 2 - Arquitectura del modelo de 3 capas
19
1.17. Modelo de Desarrollo
La ingeniería de Software tiene varios modelos de desarrollo, las
cuales se puede apoyar para la realización de software, podemos
destacar a estos por ser los más utilizados y los más completos:
Modelo en Cascada, Modelo Espiral y Modelo de Prototipos.
El desarrollo de la aplicación será a través de un Modelo de Espiral,
ya que toma en cuenta los diferentes riesgos que se pueden presentar
a lo largo del ciclo de vida del proyecto.
Si el cliente quiere seguir haciendo mejoras en el software, se vuelve a
evaluar las distintas nuevas alternativas y se realiza otra vuelta del
espiral hasta que llegue un momento que el producto desarrollado sea
aceptado y no seguir mejorándolo con otro nuevo ciclo.
El Modelo en Espiral (Gráfico 3) es el óptimo para el sistema, ya que
permite ir comprobando fase a fase el cumplimiento correcto.
20
Gráfico 3 - Modelo Espiral
1.18. Metodología
La metodología usada para el desarrollo de este sistema, es Orientada
a Objeto.
En cuanto a la funcionalidad y la metodología interna, la programación
orientada a objetos se fundamenta en la encapsulación, la herencia y
el polimorfismo.
1.18.1. Encapsulación
Una clase se declaran los tipos de datos y el medio de manipularlos
(sus métodos).
21
1.18.2. Herencia
Supone crear clases derivadas de otras existentes, que heredan sus
tipos y métodos y pueden contener otros nuevos. Si una nueva clase
hereda propiedades de más de una antecesora, se denomina herencia
múltiple; no todos los lenguajes orientados a objetos lo permiten.
1.18.2. Polimorfismo
Facilita la programación de funciones o procedimientos que ejecutarán
acciones que dependerán de los objetos sobre los que se apliquen;
por ejemplo, aumentar el tamaño de un objeto, independientemente de
su forma.
1.19. Recursos
Programador
Administrador (Servidores)
Soporte Técnico
1.20. Software
Java ( Netbind )
1.21. Plataforma
Linux Centos 5
22
1.22. Servicios
Apache
ipvsadm-1.24-8.1
Ldirectord
HeartBeat
jre-6u6-linux-i586-rpm
1.23. Herramientas de Desarrollo
1 .23.1. Base de Datos
Mysql.- es una base de datos muy popular, es un servidor multi-hilos
de bases de datos de Código abierto, confiable, rápido, compacto,
poderoso y Multiplataforma.
1.24. Hardware
El proyecto que se va a implantar manejara una red de área local en la
que habrá un servidor que administrara, almacenara una base de
datos y balanceara, un aplicativo web, y se podrá administrar desde un
cliente con Sistema Operativo Microsoft o Linux.
23
Server Balanceo Principal
Computador Pentiun IV de 2.0
1 GB de memoria RAM
80 GB de Disco Duro
Server Balanceo Backup
Computador Pentiun IV de 2.4
1.5 GB de memoria RAM
160 GB de Disco Duro
Server Web 1
Computador Pentiun IV de 1.7
512 MB de memoria RAM
40 GB de Disco Duro
Server Web 2
Computador Pentiun III de 1.0
512 MB de memoria RAM
40 GB de Disco Duro
Server Base de Datos
Computador Pentiun IV de 2.0
1 GB de memoria RAM
80 GB de Disco Duro
Switch de 8 ports (A-Open)
Hub de 8 puertos (Uplink)
24
1.25. Humano
Los responsables de este proyecto seremos egresados de la carrera
ingeniería en sistemas:
Cevallos Basurto Juan Carlos
Llerena Pincay Claudia Gabriela
Naula Robles Alexander Alberto
Los cuales seremos responsables de que este proyecto salga a flote y
no desfallezca entre tropiezo o algunas desavenencias.
1.26. Cronograma de ActividadesAnexo 1
1.27. Gestión de Riesgos
1.27.1. Identificación de Riesgos
Tiempo estimado demasiado corto.
Salida de uno de los desarrolladores.
Indisponibilidad de reunir el grupo de trabajo (desarrolladores).
Que los usuarios se resistan a usar el software.
Que los usuarios no tengan los conocimientos básicos para
manejar el software, lo cual dificulta el tiempo de enseñanza del
mismo.
25
Mala interpretación de los requisitos por parte de los
desarrolladores.
Que el ambiente de trabajo no posea una infraestructura
adecuada.
Modificación de requerimientos a último momento por arte del
cliente.
Daños imprevistos del hardware.
Falta de backup de los módulos desarrollados.
Falta de coordinación por parte del grupo de trabajo.
Problemas al integra los módulos de software.
26
1.28. Impacto y Probabilidad de los RiesgosTabla 3 – Impacto Probabilidades
Impacto y Probabilidad de los Riesgos
RIESGOSIMPACTO" % "
PROBABILIDAD DERIESGO " % "
Problemas al integra los módulos desoftware 20 % 15 %
Falta de coordinación por parte del grupode trabajo. 10 % 8 %
Falta de Backup de los módulosdesarrollados 5 % 6 %
Daños imprevistos del hardware. 2 % 10 %
Modificación de requerimientos a últimomomento por parte del cliente. 4 % 8 %
Que la empresa no posea unainfraestructura adecuada. 10 % 10 %
Mala interpretación de los requisitos porparte de los desarrolladores. 10 % 8 %
Que los usuarios no tengan losconocimientos básicos para manejar elsoftware, lo cual dificulta el tiempo deenseñanza del mismo.
15 % 5 %
Que los usuarios se resistan a usar elsoftware. 4 % 6 %
Indisponibilidad de reunir el grupo de detrabajo (desarrolladores). 10 % 5 %
Salida de uno de los desarrolladores. 5 % 1 %
Tiempo estimado demasiado corto 5 % 18 %
Total 100 % 100 %
27
1.29. Análisis Legal
Anexo 2
28
CAPITULO 22.1 ANALISIS
2.2. Levantamiento de la información.
La finalidad de este proyecto (Balanceador de carga de servidores Web)
consiste en realizar una correcta administración de un sitio Web
determinado, distribuyendo su carga entre dos o mas computadores
mediante una internas Web de fácil configuración y uso, realizara un
control, mantenimiento, reporte, configuración y análisis riguroso,
meticuloso, confiable y detallado de todas y cada una de las opciones
de administración existentes en el sistema.
Existen herramientas ya existentes en el mercado que trabajan bajo
plataforma Linux, nuestro proyecto esta adoptando esta ideología para
su uso, porque esta plataforma es de acceso libre además los recursos
con los que cuenta nos brinda robustez, seguridad, estabilidad y sobre
29
todo, bajos costos de instalación y mantenimiento y a la vez facilitara la
configuración del mismo de una manera muy sencilla.
Gráfico 4.0 – Modelo Balanceo
30
2.3. Análisis de requerimientos
Para el desarrollo de este proyecto necesitamos como herramienta
obtener toda la información acerca de:
Los diferentes servicios que posee: DNS, HTTPD, IPTABLES,
LDIRECTOR, HEARTBEAT, IPVSADM etc. Elaboración de un
listado de puertos a ser usados en el proyecto, los cuales pueden
ser determinantes en cuanto a seguridad y para eliminar futuros
ataques a los servidores.
Protocolos dentro de los cuales señalo como muy importantes en el
proyecto TCP y UDP.
El manejo de los archivos que se generan y configuración de
nuestras herramientas Linux.
Comandos que manipulen sus archivos de configuración.
Desarrollar la codificación en lenguaje java y JSP.
Las librerías módulos y paquetes necesarios para la realización del
proyecto.
31
2.4. Caso de Uso
Un caso de uso (Grafico 4) es una secuencia de interacciones que se
desarrollarán entre un sistema y sus actores en respuesta a un evento
que inicia un actor principal sobre el propio sistema. Los diagramas de
casos de uso sirven para especificar la comunicación y el
comportamiento de un sistema mediante su interacción con los usuarios
y/u otros sistemas. O lo que es igual, un diagrama que muestra la
relación entre los actores y los casos de uso en un sistema.
Una relación es una conexión entre los elementos del modelo, por
ejemplo la especialización y la generalización son relaciones. Los
diagramas de casos de uso se utilizan para ilustrar los requerimientos
del sistema al mostrar como reacciona una respuesta a eventos que se
producen en el mismo
2.5. Diagrama de Caso de Uso
GRAFICO 4.1 – CASO DE USO
32
33
2.6. Detalle de los Casos de Uso
GRAFICO 5.- BLOQUE AUTENTICACIÒN
TABLA 4.- BLOQUE AUTENTICACIÓN
BLOQUE AUTENTICACION
Nombre: AUTENTICACION
Actores: Administrador de Sistemas, Gerente de Sistemas
Función:
Permitir el acceso al Sistema Administrador, de noingresar de forma correcta la contraseña le enviara un
mensaje de error y de reincidir en ello se cerraraautomáticamente la ventana
Descripción:
El sistema debe validar al usuario y clave al digitarcontraseña, y accederá a mostrar el menú con lasdiferentes opciones definidas en el Rol de Usuario.
Alerta
AccesoWeb
Autentificarse
User /Password
<<Include>>
Valida Clave
<<Include>>
Usuarios
34
GRAFICO 6 - CASO DE USO – REPORTE SISTEMA
TABLA 5.- REPORTE SISTEMA
REPORTE SISTEMA
Nombre: REPORTE
Actores: Administrador de Sistemas
Función: Tipo de configuración
Descripción: Se realizan reportes de acceso ,alertas de mensajes lascuales se detallan por fecha, hora e IP de los Server
GRAFICO 7.- SELECCIÓN DE IP
Reporte
<<Extend>>
Alertas<<Extend>>
AccesoWeb
GenerarReporte
<<Include>>
SelecciónIP
Fecha
<<Extend>>
<<Extend>>
IP Interna
IP Externa
35
TABLA 6.- SELECCIÓN DE IP
SELECCIÓN IP PARA REPORTE
Nombre: Selecciona IP
Actores: Administrador de Sistemas
Función: Seleccionar IP externas o Internas ,un rango de fechapara realizar el reporte
Descripción:Selección de IP y rango de fecha mediante calendario
donde podrá elegir el resultado del reporte
GRAFICO 8.- ALERTA DEL SISTEMA
Alertas
<<Include>>
IPRechazadas
Fecha
GenerarReporte
<<Extend>>
36
TABLA 7.- ALERTA DEL SISTEMA
ALERTA DEL SISTEMA
Nombre: ALERTA
Actores: Administrador de Sistemas
Función: Permite seleccionar mediante un calendario el rango defecha de las IP rechazadas ha presentar
Descripción:
Mediante esta selección de fecha se genera el reporte elcual va ha contener las IP rechazadas por le servidor
mostrando hora de conexión fecha
GRAFICO 9.- ALERTA CARGA SERVIDOR
Alertas
<<Extend>>
Carga porServidor
<<Include>>
SelecciónIP
Fecha
<<Include>>GenerarReporte
37
TABLA 8.- ALERTA CARGA SERVIDOR
ALERTA CARGA SERVIDOR
Nombre: ALERTA POR CARGA DEL SERVIDOR
Actores: Administrador de Sistemas
Función:Permitirá por medio de la selección de IP del Server
deseado ver la carga de acceso Web que tiene cadaservidor por rango de fecha
DescripciónSe mostrar las cual fue la carga de acceso Web del
servidor que se desee por un rango de fechas donde sedetallara en el reporte el porcentaje de carga.
GRAFICO 10.- ALERTA ESTADO DEL SERVIDOR
Alertas
<<Extend>>
Estado delServidor
<<Include>><<Include>>
Fecha
SelecciónIP Generar
Reporte
38
TABLA 9.- ALERTA ESTADO DEL SERVIDOR
ESTADO DEL SERVIDOR
Nombre: ESTADO DEL SERVIDOR
Actores: Administrador de Sistemas
Función: Permitirá por medio de la selección de IP del Serverdeseado ver el estado en el que se encuentra el servidor
Descripción:Se mostrar las cual el estado del servido hace
referencia a los estados de encendió y apagado de losServer.
GRAFICO 11.- RESPALDO DE BASE DE DATOS
TABLA 10.- RESPALDO DE BASE DE DATOS
RESPALDO DE BASE DE DATOS
Nombre: RESPALDO
Actores: Administrador
Función: Respaldar base de datos del software del balanceo
Descripción: Mediante un botón permitirá el respaldo de base de datos
RespaldoB/D
B/DRESPALDADA
<<Include>>
39
GRAFICO 12.- CONFIGURACION PERFIL ADMINISTRADOR
TABLA 11.- CONFIGURACION PERFIL ADMINISTRADOR
CONFIGURACION MANUAL DE SQUIT
Nombre: PERFIL ADMINISTRADOR
Actores: Administrador
Función: Cambio de clave del usuario administrador
Descripción: Se procederá ha cambiar la clave del administrador
GRAFICO 13.- INGRESO DATOS ADICIONALES
Perfil ADM
Cambioclave
<<Extend>><<Include>>
NuevaClave
<<Include>> InternoMailAlterno
40
TABLA 12.- INGRESO DATOS ADICIONALES
INGRESO DATOS ADICIONALES DEL ADMINISTRADOR
Nombre: MAIL ALTERO
Actores: Administrador de Sistemas
Función: Se ingresara el mail interno de la empresa
Descripción:Ingresar mail de la empresa para enviar por mail la clave
de acceso al sistema en caso de olvido o cambio delpersonal administrador
GRAFICO 14.- NUEVO SERVER
NuevoServer
Wizard
<<Extend>>
Nombre
IP<<Include>>
<<Include>>
41
TABLA 13.- NUEVO SERVER
NUEVO SERVER
Nombre: NUEVO SERVER
Actores: Administrador de Sistemas
Función: Ingresar un nuevo servidor al cluster de balanceo
Descripción: Permitirá ingresar un nuevo servidor solo colocando la IPy el dominio tener en cuenta ya el servidor tiene que estarconfigurado previamente antes de ser agregado al cluster
de balanceo
GRAFICO 15.- REPORTES MONITOREO DEL TRAFICO DE LA RED
Tráficode Red
Monitoreo
<<Extend>>
42
TABLA 14.- REPORTES MONITOREO DEL TRAFICO DE LA RED
MONITOREO DEL TRAFICO DE LA RED
Nombre: MONITOREO DEL TRAFICO DE LA RED
Actores: Administrador de Sistemas
Función: Monitoreo grafico de la red
Descripción:Se presentara un monitoreo en tiempo real de la red esto
se realiza tomando los datos de los lóg del sistemaoperativo
GRAFICO 16.- TRAFICO DE LA RED CAPACIDAD DE ACCESO
TABLA 15.- TRAFICO DE LA RED CAPACIDAD DE ACCESO
TRAFICO DE LA RED CAPACIDAD DE ACCESO
Nombre: MONITOREO CAPACIDAD DE ACCESO
Actores: Administrador de Sistemas
Función: Monitoreo vía texto de la capacidad de acceso
Descripción: Brinda el soporte necesario para sacar el mayor provechoen el manejo del acceso a la red
Monitoreo
Capacidadde Acceso
<<Extend>>
43
GRAFICO 17.- CAPACIDAD DEL (HDD) BASE DE DATOS
TABLA 16.- CAPACIDAD DEL (HDD) BASE DE DATOS
MONITOREO CAPACIDAD DEL (HDD) BASE DE DATOS
Nombre: MONITOREOActores: Administrador de Sistemas, HelpDesk.Función: Monitoreo
Descripción:Esta encargado del constante control de los servidores yde su operatividad 24 / 7 teniendo como herramientas las
opciones de graficas, estadísticas y alertas
Monitoreo
<<Extend>>
CapacidadHDD B/D
44
2.7. Diagrama de Especificación de Procesos
GRAFICO 18.- Especificación de Procesos
45
Tabla 17 -Autenticación
AUTENTICACIONAcciones de los Actores Respuestas del Sistema
El Usuario ingresa elnombre de usuario e
ingresa su contraseña.
El sistema analiza y confirma si el usuarioy contraseña son correctos. De ser asi lemuestra la siguiente Interfaz con un menú
de opciones.El Usuario selecciona mal
el nombre de usuario eingresa su contraseña
correcta.El Usuario selecciona bien
el nombre de usuario eingresa mal su contraseña.
El sistema le muestra un mensaje de erroradvirtiendo que tiene mal algún dato paraingresar al sistema y lo envía a la mismainterfaz para que repita nuevamente los
pasos para ingresar.
Tabla 18 - Especificación de Bienvenida
BIENVENIDAAcciones de los Actores Respuestas del Sistema
El Usuario Administradorcuenta con una ventana deselección en donde va adeterminar que tipo deopción desea para poderempezar el monitoreo.
El sistema verifica la opción seleccionadaen la ventana y carga su siguienteventana.
Tabla 19 - Especificación de Proceso Nuevo Servidor
CONFIGURACION WIZARAcciones de los Actores Respuestas del Sistema
El Usuario Administradortiene la opción de ingresarun nuevo servidor real parase añadido al balanceo
Aquí el sistema verifica si existe ladirección IP o nombre del servidor(servidor real), de ser así envía unmensaje.
46
Tabla 20 - Especificación de Proceso Eliminar Servidor
CONFIGURACION ELIMINAR SERVIDORAcciones de los Actores Respuestas del Sistema
El Usuario Administradorpuede seleccionar elservidor real a eliminar delbalanceador.
El sistema verifica la opción seleccionadapor el usuario administrador y realiza laejecución del proceso.
Tabla 21 - Especificación de Proceso Monitoreo
MONITOREOAcciones de los Actores Respuestas del Sistema
El Usuario Administrador yHelpDesk cuenta con unmenú desplegable endonde va a poderseleccionar que accióndesea realizar.
El sistema verifica la opción seleccionadapor el usuario en el menú y carga odespliega su siguiente ventana
Tabla 22 - Especificación de Proceso Monitoreo - Servicios
CONFIGURACION MONITOREO SERVICIOSAcciones de los Actores Respuestas del Sistema
El Usuario Administradoringresa nuevos valores deacuerdo a las reglas yparámetros establecidos.
El sistema verifica los valores ingresadosde acuerdo al servicio o a la relación queexista y luego se ingresan en el archivode configuración y genera el inicio delservicio a través de un proceso.
47
Tabla 23 - Especificación de Proceso Monitoreo de Sensor de red,Estadísticas Graficas
MONITOREO DE SENSOR DE RED, ESTADISTICAS, GRAFICAS YALERTAS
Acciones de los Actores Respuestas del SistemaEl Usuario Administradorcuenta con la opción desenso de red.
El sistema verifica la opción seleccionadapor el usuario y carga sus opciones.
El Usuario cuenta con laopción de Estadísticas.
El sistema muestra un cuadro estadísticodel funcionamiento y accesos a losservidores
El Usuario Administradorcuenta con la opción deverificar, memoria disco,procesador.
El sistema muestra proceso.
El Usuario Administradorcuenta con la opción deConsola.
Enviar comandos pequeños por consolaWeb
Tabla 24 - Especificación de Proceso Reportes
REPORTESAcciones de los Actores Respuestas del Sistema
El Usuario Administrador,seleccionan la opción deReporte.
El sistema le muestra las opciones dereportes establecidos
El Usuario Administrador,ingresa una IP o nombre depc y solicita reporte devisitas al mismo.
El sistema verifica en sus archivos (los queexisten en el directorio de reglas), si la IPingresada existe, si es así se genera unreporte con todas las visitas atendidas.
El Usuario Administrador,solicita un reporte por fecha
El sistema revisa el archivo que contienetodo el histórico
48
Tabla 25 - Especificación de Proceso Respaldos
RESPALDOSAcciones de los Actores Respuestas del Sistema
El Usuario Administradorselecciona la opciónRespaldo.
El sistema le muestra las opciones derespaldo que pueden ser de datos,configuracion o base de datos.
El Usuario Administradorselecciona la opciónrespaldo de datos.
El sistema realiza una copia del archivo dedatos y la guarda en el directorio derespaldos de archivos.
Tabla 26 – Perfil de usuario
AYUDA Y SOPORTEAcciones de los Actores Respuestas del Sistema
El Usuario Administrador,selecciona la opción dePerfil Administrador.
El sistema le muestra las opciones deayuda y soporte para cambiar o solicitar lacontraseña del sistema
49
2.8 Diagrama Entidad Relación
Gráfico 19 - Diagrama Entidad Relación (DER)
50
CAPITULO 33.1 DISEÑO
En esta etapa daremos a conocer a fondo la parte gráfica de nuestra
aplicación Web, utilizando las correctas técnicas, principios e interfaz
amigable para el usuario.
3.1.1 Diseño de la interfaz
Al acceder a nuestro entorno web del proyecto, inicialmente se
mostrara la página en la cual le pedirá digitar la clave correspondiente
para acceder, y luego se cargara la pantalla de acceso al usuario es
decir pagina de bienvenida,
51
Gráfico 20 – Pantalla de inicio de sesión
Gráfico 21 – Pantalla de Bienvenida
52
Gráfico 22 – Pantalla de Nuevo Servidor Real
53
Gráfico 23 – Pantalla de Eliminar Servidor Real
54
Gráfico 24 – Pantalla de Monitoreo
55
Gráfico 25 – Pantalla de Monitoreo – Servicios
56
Gráfico 26 – Pantalla de Monitoreo – Nodos Conectados
57
Gráfico 27 – Pantalla de Monitoreo – HDD/Memoria/Procesador
58
Gráfico 28 – Pantalla de Monitoreo – HDD/Memoria/Procesador
59
Gráfico 28-1 – Pantalla de Monitoreo – HDD/Memoria/Procesador
60
Gráfico 29 – Pantalla de Consola
61
Gráfico 30 – Reportes
62
Gráfico 31 – Reportes de Tráfico
63
Gráfico 31.1 – Reportes de Conexiones Actuales
64
Gráfico 32 – Respaldo
65
Gráfico 33 – Perfil Administrador
66
Gráfico 34 – Perfil Administrador – Respuesta Secreta
67
Gráfico 34.1 – Perfil Administrador – Respuesta Secreta
Gráfico 34.2 – Perfil Administrador – Respuesta Secreta
68
Gráfico 35 – Perfil Administrador – Recepción de Clave
Gráfico 35.1 – Perfil Administrador – Recepción de Clave
69
3.2 Diagrama de Clases
En el proceso de nuestro análisis y diseño utilizaremos como
herramientas a los diagramas de clases, para crear el diseño
conceptual de la información que se va a manejar en nuestra
aplicación, y los componentes que se encargaran del funcionamiento y
la relación entre uno y otro.
Propiedades.-
Utilizaremos atributos (características), que son valores
correspondientes a un objeto, como ejemplo de ello será el color,
cantidad, ubicación, etc. que no es otra cosa que la información
detallada de los objetos.
Operaciones._
Dentro de las operaciones se crearan actividades o verbos que se
pueden realizar con ò para este objeto, un ejemplo de ello puede ser
la actividad abrir, cerrar, buscar, cancelar, cargar, etc.
Interfaz._
Conjugaremos un conjunto de propiedades y/o operaciones que
permitirán al objeto comportarse de cierta manera.
Herencia._
Reutilizando un objeto padre ya solidamente definido podremos
extender la funcionalidad en un objeto hijo. Recordemos que los
70
objetos hijos heredan todas las operaciones y/o propiedades de un
objeto padre.
3.3 Diagrama de Colaboración
El diagrama de colaboración es una forma alternativa al diagrama de
secuencia; porque nos muestra las interacciones entre objetos;
organizadas entorno a los objetos y los enlaces entre ellos.
A continuación se enumeran los conceptos fundamentales de un
diagrama de colaboración:
Marcadores de creación y destrucción de objetos: Puede
mostrarse en la gráfica qué objetos son creados y destruidos,
agregando una restricción con la palabra new o delete
respectivamente.
Objeto: Representado con un rectángulo que contiene el nombre y la
clase del objeto en un formato nombre-Objeto.
Objeto compuesto: Es una representación alternativa de un objeto y
sus atributos. En esta representación se muestran los objetos
contenidos dentro del rectángulo que representa al objeto que los
contiene.
Enlaces: Instancia de una asociación en un diagrama de clases. Se
representa como una línea continua que une a dos objetos,
acompañada por un número que indica el orden dentro de la
interacción. Pueden darse varios niveles de subíndices para indicar
71
anidamiento de operaciones. Se pueden utilizar estereotipos para
indicar si el objeto que recibe el mensaje es un atributo, un parámetro
de un mensaje anterior, si es un objeto local o global.
Flujo de mensajes: Expresa el envío de un mensaje. Se representa
mediante una flecha dirigida cerca de un enlace.
3.4 Diagrama de Flujo de Ventanas
En el diagrama de flujo de ventanas se muestra la interacción directa
con objetos que aparecen en la pantalla.
Recordemos que al ingresar a nuestra aplicación se debe seleccionar
el tipo de usuario e ingresar la clave.
3.5 Diseño Arquitectónico
Con nuestro diagrama arquitectónico logramos la representación que
permite al ingeniero de software:
(a) analizar la efectividad del diseño en concordancia con los
requerimientos establecidos,
(b) considerar alternativas arquitectónicas en una etapa donde hacer
cambios de diseño es relativamente más fácil, y
(c) reducir los riesgos asociados con la construcción del software.
72
CAPITULO 4
4. IMPLEMENTACION
4.1. Estándares del sistema
El sistema en su estructura esta ordenado de la siguiente forma se muestran
(Gráfico-36) los directorios principales como:
Gráfico-36 -- Estructura de Directorios Principales
73
Páginas web: Las páginas se encuentran dentro de este directorio.
Páginas con inícial “j”: Corresponden a las páginas principales de la aplicación.
Es decir el marco de todo el sistema.
WEB-INF Encontraremos las clases y librerías propias del sistema
4.2. Paquetes de Origen
com.wrow.database.- Sirve para poder conectarme con la base de datos.
org.jfree.chart.demo.servlet.- Servlet de comunicación que utiliza el java para
la base de datos.
Gráfico-37 -- Estructura de Paquetes Origen
74
4.3. Bibliotecas de Prueba
activation.jar.- Sesión de envió de correo para envío.
mail.jar.- Envía la sesión al correo.
jcommon-0.9.5.- Cambia un archivo xml a un objeto.
jfreechart-0.9.20.- Crea los objetos creados por el jcommon-0.9.5 en gráficos.
jdom.- Crea archivos etiquetas (xml).
JDK1.5.- java
Gráfico-38 -- Estructura de Bibliotecas de Prueba
75
4.4. Codificación del Sistema
*************************** Función validar (ip) ********************************************************************************************************
Realiza la verificación o validación de una IP ingresada por el usuario si estaCumple con los parámetros que tiene una dirección IP.function validar(ip) {partes=ip.split('.');
if (partes.length!=4) {return false;
}for (i=0;i<4;i++) {
num=partes[i];if (num>255 || num<0 || num.length==0 || isNaN(num)){
return false;}
}return true;
}********************* Función verifica_datos () *************************************************************************************************************Realiza la comprobación de una (IP, NOMBRE CPU), si estos ya existen en labase de datos enviará un error.
function verifica_datos(){var valor="";if(document.forms["form1"].txt_ip.value.length>0){
if(validar(document.forms["form1"].txt_ip.value)==true){if(document.forms["form1"].txt_nombre.value.length>0){
document.forms["form1"].submit();}else{
alert("Ingrese el nombre de Servidor...");}
}else{alert("La IP ingresada es invalida");
}}else{
76
alert("Ingrese la ip del Servidor...");}}
************************** jcabecera.jsp ****************************************************************************************************************
Esta página crea la cabecera principal de todas las ventanas
<table width="993" border="0" align="center" nowrap class=titulofondo><tr>
<td bordercolor="0"> </td><td height="72" bordercolor="0"><div align="center">
<table width="563" border="1"><tr>
<td width="624" bgcolor="#FFFFFF"><div align="center">BASCULAWEB</div></td>
</tr></table>
</div></td></tr><tr>
<td width="115" bordercolor="0"> </td><td width="868" height="21" bordercolor="0"> </td>
</tr></table>
*********************** jizquierdomenu.jsp **********************************************************************************************************
Genera los botones de selección del menú principal del sistema báscula web.
<table width="993" border="0" align="center"><tr>
<td width="222" height="133">
77
<table width="245" height="395" border="0"><tr><td height="21"> </td>
</tr><tr><td height="46" align="right"><a href="jbienvenida.jsp"><img
src="imagenes/btnbienvenida.png" width="112" height="44"border="0"></a></td>
</tr><tr><td width="239" height="32" align="right"><a href="jservidor.jsp"><img
src="imagenes/btnservidor.png" width="112" height="44" border="0" /></a></td></tr><tr>
<td height="46" align="right"><a href="delete_servidor.jsp"><imgsrc="imagenes/elimina.png" width="112" height="48" border="0" /></a></td>
</tr><tr><td height="46" align="right"><a href="jmonitoreo.jsp"><img
src="imagenes/btnmonitoreo.png" width="112" height="44" border="0"/></a></td>
</tr><tr><td height="46" align="right"><a href="reportes.jsp"><img
src="imagenes/btnreporte.png" width="112" height="44" border="0" /></a></td></tr><tr><td height="46" align="right"><a href="respaldo.jsp"><img
src="imagenes/btnrespaldo.png" width="112" height="44" border="0" /></a></td></tr><tr><td height="46" align="right"><a href="jperfil.jsp"><img
src="imagenes/btnperfil.png" width="112" height="44" border="0" /></a></td></tr><tr><td height="46" align="right"><a href="index.jsp"><img
src="imagenes/btnsalir.png" width="112" height="44" border="0" /></a></td></tr>
</table> </td>${'<'}td width="609" rowspan="3" valign="top">
78
************************* verificarespuesta.jsp *****************************************************************************************************
Esta ventana nos indicara el estado de respuesta de la palabra clave al cambiarel password del administrador.
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><%String respuesta=request.getParameter("respuesta");base.conectar();Boolean b=base.verificaconsultas("select * from usuarios whererespuesta='"+respuesta+"'");if(b.compareTo(new Boolean(true))==0){
out.println("<script>window.location='cambiarrespuesta.jsp?respuesta="+respuesta+"';</script>");}else{
out.println("<script>alert('La respuestaincorrecta');window.location='jbienvenida.jsp';</script>");
}base.desconectar();
%>
************************** ntrafico.jsp*****************************************************************************************
Genera una lista de las conexiones que se están realizando desde el balanceo acada uno de los servidores reales, utilizando un paquete de clases de java yaexistentes que nos ayudan con la comunicación y extracción de datos de losservidores las cuales se detalla:-com.wrow.database.Servidores
79
-com.wrow.database.Base-com.wrow.database.Cliente
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="servidores" class="com.wrow.database.Servidores"/><%String maquina_abuscar="";String boton=request.getParameter("button");
if(boton!=null){
maquina_abuscar=request.getParameter("select");if(false==servidores.devuelve_ping(maquina_abuscar).booleanValue()){
out.println("<script>alert('La maquina Selecionada tiene problema decomunicacion\\n Por favor revisar se esta conectado el cable red o si estaprendida')</script>");
maquina_abuscar="";}
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css"><!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
80
<title>Untitled Document</title></head>
<body>
<form id="form1" name="form1" method="post" action="ntrafico.jsp">
<table width="702" border="0" align="center"><tr><td colspan="3"><div align="center" class="style1">
<div align="left">Monitoreo de Trafico de Red</div></div></td>
</tr><tr><td width="79"><div align="right"><strong>Maquina :</strong></div></td><td width="112"><select name="select" id="select"><%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){maquina=r.getString("ip");if(i==0){
maq=maquina;}
if(maquina_abuscar.compareTo(maquina)==0){out.println("<option value='"+maquina+"'
selected='selected'>"+maquina+"</option>");}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select>
81
</td><td width="604"><input type="submit" name="button" id="button"
value="Buscar"></td></tr><tr><td colspan="3"><table width="736" border="0" align="center">
<tr><td width="71" bgcolor="#CCCCCC"><strong>Protocolo</strong></td><td width="94" bgcolor="#CCCCCC"><strong>Paq.
Recibido</strong></td><td width="89" bgcolor="#CCCCCC"><strong>Paq.
Enviado</strong></td><td width="148" bgcolor="#CCCCCC"><strong>IP Origen</strong></td><td width="149" bgcolor="#CCCCCC"><strong>IP Destino</strong></td><td width="159" bgcolor="#CCCCCC"><strong>Estado</strong></td>
</tr>
<%String respuesta="";String g="";
String f="";StringTokenizer tokens1;if(maquina_abuscar.length()>0){
cliente.ip=maquina_abuscar;}else{
cliente.ip=maq;}
cliente.solicitud="3-";String h="";
int e=0;respuesta=cliente.waitForPackets();
StringTokenizer tokens = new StringTokenizer(respuesta,"?");
while(tokens.hasMoreTokens()){h=tokens.nextToken();
if((e%2)==0){out.println(" <tr bgcolor='#469DB0'>");
}else{
82
out.println(" <tr bgcolor='#7CD2E0'>");}tokens1= new StringTokenizer(h);while(tokens1.hasMoreTokens()){
f=tokens1.nextToken();out.println("<td>"+f+"</td>");
}e++;
}cliente.envias.close();cliente.recibes.close();// cliente.cerrar_conexion();
%>
</table></td></tr>
</table></form>
</body></html>
*************************** nservicios.jsp ****************************************************************************************************
Esta página presenta los servicios de cualquier servidor real que estén
ejecutándose en ese momento permitiendo además el detener o inicializar
cualquiera de los servicios con los que cuente el servidor real en el runlevel que
se encuentre dicho servidor.
83
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="servidores" class="com.wrow.database.Servidores"/><jsp:useBean id="formato" class="com.wrow.database.Formatos"/><%String maquina_abuscar="";String boton=request.getParameter("button");String maquinas=request.getParameter("maquina");String estado="";String ser="";cliente.ip="";if(boton!=null){maquina_abuscar=request.getParameter("select");if(false==servidores.devuelve_ping(maquina_abuscar).booleanValue()){
out.println("<script>alert('La maquina Selecionada tiene problema decomunicacion\\n Por favor revisar se esta conectado el cable red o si estaprendida')</script>");
maquina_abuscar="";}else{out.println("<script>alert('Por favor espere alguno segundos q nos estamos
comunicando con el servidor\\n no haga ninguna acción hasta que presentetodos los servicios ')</script>");}
}if(maquinas!=null){maquina_abuscar=request.getParameter("maquina");ser=request.getParameter("servicio");estado=request.getParameter("estado");cliente.solicitud="4-"+ser+"-"+estado+"-";
cliente.ip=maquina_abuscar;boton=cliente.waitForPackets();
}
%>
84
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css"><!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title></head>
<body>
<form id="form1" name="form1" method="post" action="nservicios.jsp">
<table width="702" border="0" align="center"><tr><td colspan="3"><div align="center" class="style1">
<div align="left">Monitoreo de Servicios</div></div></td>
</tr><tr><td width="79"><div align="right"><strong>Maquina :</strong></div></td><td width="112"><select name="select" id="select"><%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){
maquina=r.getString("ip");if(maquina_abuscar.compareTo(maquina)==0){
85
out.println("<option value='"+maquina+"'selected='selected'>"+maquina+"</option>");
}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select></td><td width="604"><input type="submit" name="button" id="button"
value="Buscar"></td></tr><tr><td colspan="3"><table width="710" border="0" align="center">
<tr><td width="102" bgcolor="#CCCCCC"><strong>Servicio</strong></td><td width="418" bgcolor="#CCCCCC"> <strong>Estado</strong></td><td width="176" bgcolor="#CCCCCC"> </td>
</tr>
<%String respuesta="";String g="";
String m="";
if(maquina_abuscar.length()>0){cliente.ip=maquina_abuscar;
}else{// cliente.ip=maq;
}if(cliente.ip.length()>0 ){m=cliente.ip;
cliente.solicitud="1-";String h="";
int e=0;
respuesta=cliente.waitForPackets();
86
StringTokenizer tokens = new StringTokenizer(respuesta,"?");while(tokens.hasMoreTokens()){
if((e%2)==0){out.println(" <tr bgcolor='#469DB0'>");
}else{out.println(" <tr bgcolor='#7CD2E0'>");
}h="";
h=tokens.nextToken().substring(3);
if(h.trim().length()>0){out.println("<td>"+h+"</td>");cliente.solicitud="2-"+h+"-";g=cliente.waitForPackets();if(g.trim().length()>0){g=formato.sin_carateres_especiales(g);}
out.println("<td>"+g+"</td>");
out.println("<td><input type='button' name='button' id='button' value='Iniciar'onclick='window.location=\"nservicios.jsp?maquina="+m+"&servicio="+h+"&estado=start\"' /><input type='button' name='button2' id='button2' value=' Parar 'onclick='window.location=\"nservicios.jsp?maquina="+m+"&servicio="+h+"&estado=stop\"' /></td>");
out.println("</tr>");}
e++;
}out.println("<script>alert('Los servicios presentado listo ')</script>");
// cliente.cerrar_conexion();}
87
cliente.envias.close();cliente.recibes.close();%>
</table></td></tr>
</table></form>
</body></html>
88
CAPITULO 55. PRUEBAS
5.1. Introducción
En el sistema BASCULA WEB, hemos realizado varias pruebas de
funcionamiento y control de todos los procesos incluidos en el sistema,
pruebas como:
5.1.1. Prueba de base de datos
Verificamos que las tablas se encuentren debidamente relacionadas de
acuerdo al DER (Diagrama de Entidad-Relación), y verificamos que todos los
campos que se encuentre en su respectiva tabla este operativo.
5.1.2. Prueba de clases
Nos aseguramos que las clases que posee nuestro sistema estén bien
depuradas y sin ningún margen de error
5.1.3. Prueba de integración de clases
Nos aseguramos que las clases, y sus instancias, conforman un software que
cumpla con el comportamiento definido.
89
5.1.4. Prueba de integración del sistema
Realizamos pruebas para verificar que las partes del sistema funcionen
conjuntamente, es decir probando las páginas con las conexiones realizadas,
ya que todas las pruebas fueron realizadas por módulos independientes.
5.1.5. Demostrar funcionamiento con el código
Si un modelo realmente refleja lo que se necesita, o lo que se debe construir,
es la forma que reflejara buen funcionamiento del código.
5.1.6. Prueba de cambios
Después de realizar algún cambio en la aplicación, nos aseguramos que la
aplicación funcione de forma normal.
5.1.7. Prueba de stress
Nos aseguramos que el sistema funcione como se espera y sin ningún
problema, al cerciorarnos que soporta gran manejo de información.
5.1.8. Revisión técnica
Cada integrante del grupo, reviso de forma exhaustiva, independientemente
con el objetivo de mostrar un sistema que se enfoque en la precisión, calidad,
facilidad de uso.
90
5.2. Casos de prueba
Se detalla todos los casos posibles de las pruebas del proyecto.
Escenario de Prueba Resultados Esperados ResultadosObtenidos Comentarios
Respaldo de Archivoservidor Real
Almacenar en el directorio/opt/respaldo, los debidos
respaldos desde elentorno web
OK
Este caso de prueba fuecontemplado manualesy automáticas que tieneel sistema.
Generación de ReporteTráfico Red
Presente en el ambienteWeb, las Conexiones que
posee el servidor RealOK
Es necesario que sehaya realizado laselección del servidor
Generación de ReporteNodos Activos
Escanear Real Serverseleccionado y
almacenarlo en la base dedatos Temporal
OKPodrá ser ejecutado soloa las máquinas queestán encendidas
Enviar reportemediante correoelectrónico alAdministrador
Que el correo electrónicollegue al destinatario
AdministradorOK
Se podrá enviar elreporte requerido víae-mail al usuarioadministrador deldominio
Visualización dereportes Gráficos
Muestra los reportesGráficos por día y horas OK
Los reportes seránGenerados en la páginaWeb de la aplicación
Generación de reportesBalanceo
Se presenta en formageneral la suma total de
los paquetes.OK Los reportes serán vistos
con gran facilidad
Ingresar nuevosservidores reales alBalanceo
Mostrar en pantalla lasopciones de ingreso de IPy Nombre del Server real
OK
Esta opción nos ayuda aingresar en caliente losservidores reales albalanceo
Eliminar un ServidorReal al Balanceador
Mediante un comandointerno ejecuta la acción
y elimina de la lista elservidor
OKFacilitar la eliminaciónen caliente de unservidor real
Ingreso comando porconsola
Relacionar un comandode mando corto
especificando su acciónOK
Generación del resultadosiempre y cuando sea uncomando de frase corta.
Configuración delCluster
Asociar una configuraciónal servidor Standby parare-direccionar servicios
OKEsta configuración debede ser igual en ambos
servidores.
Ingreso de UsuarioADM
Valida usuariosrelacionados al sistema OK
Valida clave cifradamediante el método deencriptación md5.
Tabla27: Casos de prueba
91
5.3. Generación de errores durante las pruebas
Problemas en la instalación del paquete heartbeat
En el momento de realizar la instalación del heartbeat uno puede encontrar
problemas de dependencias de paquetas, una solución para este problema
es realizar una instalación mediante Internet con el yum install.
yum install heartbeat
Con este modo de instalación se descargan el paquete y automáticamente
dos paquetes extras que se necesitan para la buena ejecución del heartbeat.
heartbeat i386 2.1.3-3.el5.centos
heartbeat-pils i386 2.1.3-3.el5.centos
heartbeat-stonith i386 2.1.3-3.el5.centos
Así mismo realizamos la instalación automática del paquete heartbeat-
ldirectord, el cual tiene algunas dependencias como por ejemplo:
perl(LWP::UserAgent)
perl-Test-Mock-LWP.noarch0.05-1.el5.rf
perl-libwww-perl.noarch
perl-LDAP
perl-LDAP.noarch
perl(Getopt::Long)
perl-Getopt-Long.noarch
etc
92
Problemas en la interface grafica
Si al realizar el reporte grafico en la aplicación si este no carga o la imagen
no aparece se tendrá que revisar si el cliente java Servidor se está
ejecutando en los servidores reales este se realiza en la ruta:
/opt/ y se ejecuta el comando java servidor.
Problemas en la interface de monitoreo de hardware
Al realizar la consulta en la Pantalla de Monitoreo CPU /Memoria/Procesador
Se tendrá en consideración que se tiene que tener instalado el paquete:
lm_sensors-2.10.0-3.1.i386.rpm
En caso contrario no presentara información alguna.
Problemas en el cluster
Al momento de configurar el cluster de balanceo tener en consideración si el
servidor de Back no asume en mando o control del balanceo revisar:
etc/ha.d/haresources
serverbd.balanceo.edu.ec IPaddr::192.168.1.1/24/eth0/192.168.1.255
IPaddr::192.168.200.1/24/eth1/192.168.200.255 ldirectord
MailTo::[email protected]::EVENTO_EN_CLUSTER_BALANCEADO
RES
/etc/ha.d/ha.cf
bcast eth2 # Linux
93
Interfaz de red que se utiliza para enviar el latido del corazón, entre
servidores de balanceo. Esta interface de red (Eth0) debe ser la misma en
los dos servidores.
/etc/ha.d/authkeys
auth 1
1 sha1 seminario
#1 crc
#2 sha1 HI!
#3 md5 Hello!
Este archivo tendrá que estar en ambos servidores con el mismo contenido.
Problemas con la asignación de paquetes a los servidores reales
Al momento que el servidor está funcionando y las paginas a balancear
demoran verificar con el comando (ipvsadm –L –n –-stats ) si los servidores
reales están enviando paquetes tanto salientes como entrantes en caso de
presentar este inconveniente revisar.
Verificar la tarjeta de red (cambiándola con otra)
Configuraciones /etc/ha.d/ha.cf
Configuraciones /etc/ha.d/ldirector .cf
Se podrá guiar el manual técnico con la configuración respectiva de cada
uno de estos archivos.
94
Problema no recibe información de cheque de los servidores reales
Revisar los archivos ha.cf, ldirector.cf. haresources , debido a que en cada
uno de ellos se tendrá que indicar el mail al cual se desea que se lleguen los
informes de errores .
Prueba de balanceo.
Al realizar la prueba de balanceo de forma manual se presentaron errores de
conectividad porque no reconocía el balanceador a los servidores reales,
porque los censa como muerto en nuestro caso nosotros le asignábamos un
peso de 0 si está muerto, 1 si esta activo.
Solución.
Una vez configurado el archivo del balanceador llamado (ldirector.cf) en la
ruta /etc/ha.d/ esto se detalla en el manual técnico, se tendrá que verificar
que el archivo testbalanceo se encuentre en la ruta de /var/www/html/ ya que
este es el archivo por el cual se censa el servidor real.
Pruebas de conectividad
Si al realiza ping a un servidor en particular se demora la conectividad no
responde la petición
Solución
Se tendrá que definir en esta ruta las configuraciones de la tarjeta de red:
/etc/sysconfig/network-scripts.
95
IPADDR=192.168.1.201
NETMASK=255.255.255.0
NETWORK=192.168.1.1
Pruebas de envío de mail por problemas en los servidores
Cuando el usuario administrador no está recibiendo los mail de los posibles
errores que genera los servidores reales y de balanceo se tendrá que tener
en cuenta lo siguiente:
Solución:
En la ruta etc/ha.d/
En el archivo ldirectord.cf chequear que tenga configurado
emailalert="[email protected]"
En el archivo haresources.cf chequear en la última parte de la configuración
esta línea
serverbd.balanceo.edu.ec IPaddr::192.168.1.1/24/eth0/192.168.1.255IPaddr::192.168.200.1/24/eth1/192.168.200.255 ldirectordMailTo::[email protected]::EVENTO_EN_CLUSTER_BALANCEADORES
5.4. Conclusiones de Prueba
Luego de haber aplicado todos los mecanismos necesarios para una correcta
evaluación de nuestra aplicación llegamos a una clara conclusión que
dejamos explícitos en los puntos que detallamos a continuación:
96
1. Todos los módulos son importantes
2. La interacción con nuestra aplicación es fácil de manejar.
3. El usuario debe de tener un conocimiento básico de administración de
servidores Linux.
4. Mensajes de alerta son claros
5. El lenguaje utilizado (java 5) es estándar, fácil de manejar y manipular
siempre y cuando se tenga conocimientos básicos.
6. Los reportes son fácil de entender mediante gráficos estadísticos.
7. La interfaz fue diseñada de una manera amigable para mejor
comprensión del usuario y total aprovechamiento del mismo.
8. El Tiempo de respuesta del sistema es óptimo
9. El sistema puede ser implementado en empresas pequeñas, medianas
o grandes.
10.En nuestro sistema la calidad está en función de los alcances
definidos en la etapa de análisis.
97
CAPITULO 66. CONCLUSIONES Y RECOMENDACIONES
6.1. CONCLUSIONES
El sistema BASCULAWEB tiene como finalidad, dar facilidades en la
administración de un cluster de balanceo de carga HA, permitiendo una
rápida y eficaz gestión de:
Administración del Balanceo en un ambiente web.
Monitoreo de Paquetes Balanceados.
Generación de alarmas controladas mediante envíos de correo al
administrador.
Elaboración de reportes Gráficos de las conexiones
A lo largo del desarrollo del Sistema BASCULA WEB hemos adquirido
conocimientos muy valiosos acerca de las herramientas Open Source, que
no solo el software Libre funciona bajo un ideal.
Hoy en día la información es uno de los activos más importantes de la
organización, debido a la creciente información del mundo en que vivimos.
98
Es por ello, que la protección de esa información, así cómo los caminos que
necesita para fluir y distribuir datos a través de la empresa, deben ser
considerada como alta prioridad. Además, problemas en las redes
informáticas de una empresa causan problemas relacionados con recursos
asignados a la resolución de estos, mal funcionamiento de equipos clave,
daño de la información, etc., esto genera pérdidas monetarias para las
compañías.
Todos los alcances fueron cumplidos en su totalidad por eso podemos
concluir que cumple con la calidad esperada. Además debemos tomar en
consideración que utilizar un modelo de programación de objetos nos
permitió como resultado la reutilización de métodos, clases y componentes
ya sean estos existentes de la misma o desarrollados por nosotros.
99
6.2. RECOMENDACIONES
El aplicativo desarrollado se limita a proveer las tareas básicas de
administración de un balanceador en una organización reduciendo el impacto
de la pérdida, colapsó o corrupción de la información esto causa que la
información se sature y no sea eficiente el acceso a los datos.
El aplicativo implementado esta diseñado para funcionar dentro de una
intranet corporativa.
Para mantener un respaldo de la información es necesario realizar los
backup correspondiente a fin de proveer información en caso de algún
percance que motive la perdida de la data.
Realizar una adecuada configuración de los servicios del servidor de
balanceo y los clientes, necesarios para que el sistema tenga un óptimo
rendimiento.
Es importante que en el momento de que se quiera cambiar de versión de
antivirus se realice un previo análisis de logs, ya que forma parte importante
del sistema.
108
BIBLIOGRAFIA
www.linux-ha.org/
http://es.wikipedia.org
http://alufis35.uv.es/Kickstart-instalaciones.html
http://www.linuxparatodos.net
http://www.linuxvirtualserver.orghttp://www.rpmpbone.com
100
GLOSARIO DE TÉRMINOS
A
Administrador: Usuario con un conjunto definido de privilegios
administrativos.
Anaconda: Anaconda es un instalador basado en Python que incorpora en
su base, un instalador en modo texto, y uno gráfico que entre sus muchas
funcionalidades, incorpora la instalación en base a guiones llamados
kickstart.
Aplicación: En informática, las aplicaciones son los programas con los
cuales el usuario final interactúa a través de una interfaz y que realizan
tareas útiles para éste.
Arquitectura: Diseño que muestra los bloques de construcción física y lógica
de una aplicación distribuida (u otro sistema de software) y las relaciones que
se establecen entre sí.
Autenticación.- Verificación de que el cliente sea quien dice ser para lograr
acceso al sistema.
B
Backup.- Respaldo de información del sistema.
Base de Datos: Guarda los datos del sistema. Termino genérico que se
utiliza para designar el sistema de administración de base de datos
relacionales (RDBMS). Paquete de software que permite crear y manipular
grandes cantidades de datos relacionados y organizados.
101
C
Código Abierto.- (en inglés Open Source) es el término con el que se
conoce al software distribuido y desarrollado libremente.
Código Fuente.- Lenguaje mediante el cual fue programado el sistema.
Conexión.- Comunicación entre varias maquinas.
D
E
Eth().- Interfaz de red en Linux
F
Firewall.- Conjunto de políticas de seguridad de acceso a computadoras.
G
GNU GPL.- La Licencia Pública General de GNU o más conocida por su
nombre en inglés GNU (General Public License) o simplemente su
acrónimo del inglés GNU GPL, es una licencia creada por la Free Software
Foundation a mediados de los 80, y está orientada principalmente a proteger
la libre distribución, modificación y uso de software. Su propósito es declarar
que el software cubierto por esta licencia es software libre y protegerlo de
intentos de apropiación que restrinjan esas libertades a los usuarios.
H
Hardware.- Parte física de una PC.
102
Heartbeat.- El heartbeat es uno de los componentes del proyecto Linux-HA
(Alta disponibilidad en Linux). El heartbeat es altamente portable, y corre en
cada plataforma conocida de Linux, y también en FreeBSD y Solaris.
El heartbeat es la primera pieza de software que fue escrita para el proyecto
de Linux-HA. Realiza la detección de death-of-node (nodos muertos),
comunicaciones y direccionamiento del cluster en un proceso.
Hilos: Un hilo de ejecución, en sistemas operativos, es similar a un proceso
en que ambos representan una secuencia simple de instrucciones ejecutada
en paralelo con otras secuencias. Los hilos permiten dividir un programa en
dos o más tareas que corren simultáneamente, por medio de la
multiprogramación. En realidad, este método permite incrementar el
rendimiento de un procesador de manera considerable. En todos los
sistemas de hoy en día los hilos son utilizados para simplificar la estructura
de un programa que lleva a cabo diferentes funciones.
HTTP.- El protocolo de transferencia de hipertexto (HTTP, HyperText
Transfer Protocol) es el protocolo usado en cada transacción de la Web
(WWW).
Hub.- Un hub o concentrador es un equipo de redes que permite conectar
entre sí otros equipos y retransmite los paquetes que recibe desde cualquiera
de ellos a todos los demás. Los hubs han dejado de ser utilizados, debido al
gran nivel de colisiones y tráfico de red que propician. Elemento físico de
conexión en red.
103
I
IP.- Identificador único que distingue una computadora de otra.
IPVSADM.- es parte del Proyecto Linux Virtual Server y se utiliza para
redirigir TCP y UDP / IP el tráfico de un virtual servidor real para muchos
servidores.
J
Java.- Es un lenguaje de programación orientado a objetos desarrollado por
Sun Microsystems a principios de los años 90. El lenguaje en sí mismo toma
mucha de su sintaxis de C y C++, pero tiene un modelo de objetos más
simple y elimina herramientas de bajo nivel, que suelen inducir a muchos
errores, como la manipulación directa de punteros o memoria
K
kickstart: Un archivo kickstart es un fichero de texto plano, que se le
proporciona a Anaconda, como tal, puede ser un archivo que tengamos
grabado en el disco de instalación, en otro medio de almacenamiento, o
incluso en un servidor remoto. El hecho de que se albergue en un servidor
remoto, abre nuevas posibilidades, como que por ejemplo, el archivo kickstart
se genere dinámicamente para cada equipo, en base a perfiles de equipo,
parámetros opcionales, etc.
L
LAN.- Local Area Network - Red de área local.
104
Ldirectord.- es un demonio independiente para la vigilancia de los servicios
de los servidores reales, que en la actualidad http, https y ftp. Es simple de
instalar y se puede iniciar por sí mismo o ser iniciado desde el demonio
heartbeat. Es muy útil para gestionar los servidores reales a través de
ipvsadm.
Licencia de Software.- Una licencia de software es un contrato entre el
titular del derecho de autor (propietario) y el usuario del programa informático
(usuario final), para utilizar éste en una forma determinada y de conformidad
con unas condiciones convenidas.
Linux.- (también conocido como GNU/Linux) es un sistema operativo tipo
Unix que se distribuye bajo la Licencia Pública General de GNU (GNU GPL),
es decir que es software libre.
Log.- Un log es un registro de actividad de un sistema, que generalmente se
guarda en un fichero de texto, al que se le van añadiendo líneas a medida
que se realizan acciones sobre el sistema.
M
Multiplataforma.- Se puede trabajar sobre diferentes sistemas operativos sin
que afecte su desempeño.
MYSQL.- Software para crear una base de datos.
N
105
NetBeans.- Se refiere a una plataforma para el desarrollo de aplicaciones de
escritorio usando Java y a un entorno de desarrollo integrado (IDE)
desarrollado usando la Plataforma NetBeans
Ñ
O
P
Paquetes.- Segmento de datos que se transmite de un lugar a otro.
Password.- Contraseña de acceso al sistema.
Plataforma.- Una plataforma es precisamente el principio, en el cual se
constituye un hardware, sobre el cual un software puede
ejecutarse/desarrollarse.
Protocolo. – Implementación de la lógica de una capa del modelo OSI.
Q
R
Red.- Conjunto de maquinas que se comunican entre si.
Root.- Directorio raíz.
S
Scripts. - Conjunto de líneas de códigos que permiten la ejecución de una
tarea en particular.
Servidor.- Equipo de computo, el cual esta recibiendo constante peticiones
de clientes para proveerle de algún servicio. En informática, un servidor es
106
una computadora que, formando parte de una red, provee servicios a otros
denominados clientes
Servlets.- Los servlets son objetos que corren dentro del contexto de un
contenedor de servlets (ej: Tomcat) y extienden su funcionalidad.
Sistema Operativo.- Un sistema operativo es un software de sistema, es
decir, un conjunto de programas de computadora destinado a permitir una
administración eficaz de sus recursos.
Software.- Es el conjunto de los programas de cómputo, procedimientos,
reglas, documentación y datos asociados que forman parte de las
operaciones de un sistema de computación. Programas en ejecución.
Software libre.- (en inglés free software) es la denominación del software
que brinda libertad a los usuarios sobre su producto adquirido y por tanto,
una vez obtenido, puede ser usado, copiado, estudiado, modificado y
redistribuido libremente.
Switch.- Dispositivo de interconexión de redes de computadoras que opera
en la capa 2 del modelo OSI, este interconecta dos o más segmentos de
red.
T
Tomcat.- Es un servidor web con soporte de servlets y JSPs.
U
107
Usuario: Persona o servicio que utiliza una aplicación. Un usuario está
definido de forma programática por un nombre de usuario, una contraseña y
un conjunto de atributos que permiten a una aplicación reconocerlos.
V
W
X
Y
Z
a
Anexo 1
PROGRAMA DE DESARROLLO SISTEMA BASCULA WEBFASE ACTIVIDADES TIEMPO ENCARGADOS
I
ANÁLISIS DEL SISTEMA BASCULAWEB Aprobación de las propuesta de
balanceo Levantamiento de información Análisis de requerimientos y
funcionalidades Definición esquema de objetos,
eventos y caso de uso Investigación Documentando del
análisis del proyecto
90 díasGabriela LLerena
Juan CevallosAlexander Naula
Primer hito correspondiente al análisis: 8– JUN – 07
II
DISEÑO DEL SISTEMA BASCULA WEB Diseño y selección de la base de
datos Implantación de la base de datos Diseño de las Interfaces del Sitio
Web Diseño de la infraestructura Documentación del diseño del
proyecto
30 díasGabriela LLerena
Juan CevallosAlexander Naula
Segundo hito correspondiente al diseño:9 – JUL – 07
III
CODIFICACIÓN DEL SISTEMABASCULA WEB Codificación de modulo 1. Pruebas al módulo con su respectiva
funcionalidad. Correcciones a las interfaces web. Pruebas a las correcciones. Módulo corregido y probado
correctamente. producto del módulo terminado. Codificación de modulo de interfaces
45 díasGabriela Llerena
Juan CevallosAlexander Naula
b
Graficas. Pruebas al módulo de interfaces
Graficas. Correcciones al módulo Grafico. Pruebas a las correcciones. Módulo corregido y probado
correctamente. Producto del módulo terminado. Elaboración de la documentación.Tercer hito correspondiente codificación:
24 – OCT – 07
IV
PRESENTACIÓN Y SUSTENTACIÓN
DEL SISTEMA BASCULA WEB
Ultimas correcciones y pruebas a losmódulos.
Documentación formal y final delSistema Bascula Web
Presentación y sustentación formaldel Sistema Bascula Web ante eljurado.
61 díasGabriela Llerena
Juan CevallosAlexander Naula
Sustentación final del proyecto: 05 –Agosto – 2008
TOTAL 226 días 3 personas
c
Anexo 2
Licencia GNU
Se permite a todo el mundo copiar y distribuir copias idénticas de este
documento de licencia, aunque no se permite su modificación.
Preámbulo
Las licencias de uso de casi todo el software han sido establecidas para
quitarle la libertad de compartirlo y modificarlo. En contraste con esta
costumbre, la Licencia General Publica GNU pretende garantizar su libertad
de compartir y modificar software gratuito, a fin de asegurar que el software
es gratuito para todos sus usuarios. Esta Licencia General Publica es de
aplicación para la mayor parte del software de la Free Software Foundation y
para cualquier otro programa cuyos autores se comprometen a su utilización.
(Otro software de la Free Software Foundation esta cubierto alternativamente
por la Licencia General Publica de biblioteca GNU). También puede aplicar
esta a sus programas.
Cuando hablamos de software gratuito nos referimos a la libertad, no al
precio. Nuestras Licencias Generales publicas han sido diseñadas para
asegurarle la libertad necesaria para distribuir copias de software gratuito ( y
de cobrar por este servicio, si así lo desea), que reciba código fuente o pueda
d
obtenerlo si lo desea, que pueda modificar el software o utilizar partes del
mismo en nuevos programas gratuitos y que sepa que puede hacer estas
cosas. A fin de proteger sus derechos, es necesario constituir restricciones
que impidan que alguien pueda denegarle estos derechos o pedirle que
renuncie a los mismos. Estas restricciones implican también ciertas
responsabilidades si distribuye copias del software o lo modifica.
Por ejemplo, si distribuye copias de este programa, tanto gratis o con animo
de lucro, deberá conceder a los recipientes del mismo todos los derechos
con lo que cuente. Deberá asegurarse que los recipientes reciben o puedan
obtener el código fuente. Y deberá asimismo mostrarle esos términos, a fin
de que puedan conocer sus derechos.
Protegemos sus derechos con dos pasos:(1) copyright del software y (2) le
ofrecemos esta licencia que le concede permiso legal para copiar, distribuir
y/o modificar el software.
Además, para la protección de cada autor así como la nuestra propia,
deseamos asegurarnos de que todo el mundo comprende que este software
gratuito no cuenta con garantía alguna. Si el software es modificado por
alguna otra persona y posteriormente distribuido, deseamos que sus
destinatarios sepan que lo que reciben no es el producto original, de forma
que cualquier problema introducido por otras partes no pueda reflejarse en la
reputación profesional de los autores originales.
e
Finalmente, cualquier programa gratuito se ve constantemente amenazado
por patentes de software. Deseamos evitar el peligro de que los
redistribuidores de un programa gratuito obtengan licencias de patente a
titulo individual, lo que haría a este un programa privado. A fin de impedir
esto hemos dejado muy claro que cualquier patente obtenida deberá ser
licenciada para la utilización gratuita de todos o no deberá ser licenciada en
absoluto.
TÉRMINOS Y CONDICIONES DE LA LICENCIA GENERAL PUBLICA DE
GNU PARA LA REALIZACIÓN DE COPIAS, DISTRIBUCIÓN Y
MODIFICACIÓN
0. Esta licencia es de aplicación a cualquier programa u otro trabajo que
contenga un aviso incluso por el titular de los derechos de copyright
estableciendo su libertad de distribución bajo los términos de esta Licencia
General Publica. El "Programa", a continuación, hace referencia a cualquier
programa o trabajo de este tipo y un "trabajo basado en el Programa" indica
el programa o cualquier tipo de trabajo derivado bajo las leyes de copyright:
es decir, un trabajo que contenga el Programa o una porción del mismo, bien
en versión exacta o bien con modificaciones y/o traducido a otro idioma. (En
adelante, las traducciones quedan incluidas, sin limitación alguna, en el
término "modificación"). Cada beneficiario de esta licencia quedara indicado
por el termino "usted".
f
Las actividades que no incluyan copia, distribución y modificación no
quedaran protegidas por esta Licencia; quedan fuera de su alcance. El acto
de ejecución del Programa no queda limitado y los resultados obtenidos de la
ejecución del Programa quedan cubiertos solo si su contenido constituye un
trabajo basado en el Programa (independientemente de que haya sido
obtenido mediante la ejecución del Programa). La validez de esto dependerá
de lo que haga el Programa.
1. Podrá copiar y distribuir copias exactas del código fuente del Programa
según lo hubiera recibido, utilizando cualquier medio, siempre que de forma
notoria y apropiada publique, en cada copia, un aviso adecuado de derechos
de copyright y relativo a la ausencia de garantía alguna, y de que proporcione
a todos los destinatarios del Programa una copia de esta licencia junto con el
mismo. Podrá cobrar honorarios por el acto físico de transferencia de una
copia y podrá a su propia discreción, ofrecer servicios de protección de
garantía a cambio de honorarios.
2. Puede modificar sus copia o copias del Programa o cualquier porción del
mismo hasta la formación de un trabajo basado en el Programa, y podrá
asimismo copiar y distribuir dichas modificaciones o trabajos bajo los
términos de la Sección 1 anteriormente reseñada, siempre que cumpla las
condiciones adicionales que se detallan a continuación:
g
a) Deberá asegurarse que los archivos modificados incorporen avisos
prominentes que establezcan que a modificado los archivos, así como
la fecha de dicha modificación.
b) Deberá asegurarse de que cualquier trabajo que distribuya o
publique, que pudiera, en su totalidad o en parte, contener o haber
sido derivado del Programa o de cualquier parte del mismo, sea
licenciado en su totalidad y sin cargo alguno a terceros que lo
requieran bajo términos de esta Licencia.
c) Si el programa modificado lee normalmente comandos
interactivamente cuando se ejecuta, deberá asegurarse de que,
cuando se ponga en marcha su ejecución para dicha utilización
interactiva de la forma mas común, imprima o muestre una proclama
que incluya un aviso correspondiente relativos a los derechos de
copyright y una clarificación de la falta de garantía ( o estableciendo la
provisión de dicha garantía por su parte ) y que confirme que los
usuarios puedan redistribuir el programa bajo esta condiciones, e
informe al usuario de como visualizar un copia de este
Licencia.(Excepción: si el programa es de por si interactivo pero no
imprime normalmente dicha proclama, tampoco se requerirá que su
trabajo basado en el Programa deba imprimirla).
h
Estos requisitos son de aplicación al trabajo modificado en su totalidad. Si
hubiera secciones identificables de dicho trabajo no derivadas del Programa
y que pudieran considerarse trabajos razonablemente independientes,
entonces esta Licencia, así como sus términos, no serían de aplicación a
dichas secciones cuando las distribuya como trabajos independientes. Pero
cuando distribuya las mismas secciones como parte de un trabajo completo
mayor basado en el Programa, la distribución del trabajo completo deberá
realizarse bajo los términos de esta Licencia, cuyos permisos, con respecto a
otras licencias se ampliaran a la totalidad del trabajo completo y por lo tanto a
cada una de las partes del trabajo y respectivamente de quien lo ha escrito.
Por todo esto, no es el propósito de esta sección reclamar derechos o
disputar sus derechos a trabajos escritos enteramente por el titular de esta
licencia sino ejercitar el derecho a controlar la distribución de trabajos
derivados o colectivos basados en el Programa.
Además, la simple agregación de otro trabajo no basado en el Programa a
este( o con un trabajo basado en el Programa ) en un volumen de un medio
de almacenamiento o distribución no somete al otro trabajo al alcance de
esta Licencia.
3. Podrá copiar y distribuir el programa ( o un trabajo basado en el mismo,
bajo los términos de la Sección 2) en código objeto o formato ejecutable bajo
i
los términos anteriormente reseñados en las Secciones 1 y 2, siempre que
observe asimismo una de las condiciones siguiente:
a) Lo acompañe con el correspondiente código completo leíble por el
sistema, que deberá distribuirse bajos los términos anteriormente
reseñados en las Secciones 1 y 2 en un medio normalmente utilizado
para intercambios de software; o
b) Lo acompañe con una oferta por escrito, con una validez mínima de
tres años, de facilitar a terceros, a un precio no superior al coste de
realizar la distribución física del código, una copia completa leíble por
la maquina del correspondiente código fuente, a distribuir bajo los
términos anteriormente reseñados en las Secciones 1 y 2 en un medio
normalmente utilizado para intercambios de software; o
c) Lo acompañe con la información que haya recibido en relación a la
oferta de distribución de código fuente. (Esta alternativa se permite
exclusivamente para distribuciones no comerciales y solo si ha
recibido el programa en código objeto o formato ejecutable con dicha
oferta, de acuerdo con los términos anteriormente reseñados en la
Subsección b).
El código fuente de un trabajo significa la forma preferida del trabajo para la
realización de modificaciones del mismo. Para un trabajo ejecutable, el
código fuente completo significa todo el código fuente para todos los módulos
j
que contiene, mas cualesquiera archivos de definición de interfaz asociados,
mas las secuencias que se utilicen para controlar la compilación y ejecución
del ejecutable. Sin embargo, como una excepción especial, el código fuente
distribuido no necesita incluir nada que sea normalmente distribuido ( en
formato fuente o binario) con los componentes principales (compilador,
kernel, etc ) del sistema operativo en el que se ejecuta el ejecutable, a menos
que el propio componente acompañe al ejecutable.
Si llegara a realizar una distribución de código objeto o ejecutable ofreciendo
acceso a copiar de un lugar designado, el ofrecimiento de acceso equivalente
a copiar el código fuente del mismo lugar contara como una distribución del
código fuente, incluso cuando las terceras partes no tengan que copiar el
código fuente conjuntamente con el código objeto.
4. No podrá copiar, modificar, sublicenciar o distribuir el Programa salvo en
la forma en que esta licencia expresamente lo permita. Cualquier otro intento
de copia, modificación, sublicencia o distribución del Programa será nula y
dará fin de forma automática a sus derechos bajo los términos de esta
Licencia. Sin embargo, las licencias correspondientes a terceros que
hubieran podido recibir copias, o derechos, del titular de esta licencia bajo los
términos de la misma no quedaran canceladas siempre que dichas partes
observen sus condiciones.
k
5. No tiene obligación alguna de aceptar esta Licencia, ya que no ha firmado
la misma. Sin embargo, nada aquí le concede permiso de modificación o
distribución del Programa o sus trabajos derivados. Estas acciones quedaran
prohibidas por la ley si decidiera no aceptar esta Licencia. Por lo tanto,
mediante la modificación o distribución del Programa ( o de cualquier trabajo
basado en el mismo ), indicara su aceptación de esta Licencia y de sus
términos y condiciones para la copia, distribución o modificación del
Programa o de los trabajos basados en el mismo.
6. Cada vez que redistribuya el Programa (o cualquier trabajo basado en el
mismo ), el destinatario recibe automáticamente una licencia del titular
original para copiar, distribuir o modificar el Programa en base a esos
términos y condiciones. No podrá imponer restricción adicional alguna sobre
el ejercicio, por parte del destinatario, de los derechos que aquí se conceden.
No tendrá responsabilidad alguna en lo que atañe a asegurar la observación,
por terceros, de las condiciones a las que esta sujeta esta licencia.
7. Si, como consecuencia de una sentencia judicial de infracción de
derechos de patente o por cualquier otra razón ( no limitada a cuestiones de
patente ), se le impusiera condición alguna ( por sentencia judicial, acuerdo,
o cualquier otra vía ) que estuviera en contradicción con las condiciones de
esta Licencia, dicha condición no podrá constituir excusa en lo que atañe a la
obligación de observar las condiciones de esta Licencia. Si no pudiera
l
efectuar distribuciones de forma que satisfaga simultáneamente sus
obligaciones bajo los términos de esta Licencia y cualesquiera otras
obligaciones que le pudieran corresponder, la consecuencia de dichas
circunstancias es que no podrá distribuir el Programa en absoluto. Por
ejemplo, si una licencia de patente no permitiera la redistribución libre de
derechos de royalty del Programa por parte de aquellos que recibieran copias
de forma directa o indirecta a través suya, entonces la única forma en que
podría satisfacer dicha licencia de patente y esta Licencia consistiría en no
distribuir el Programa en absoluto.
Si cualquier porción de esta sección llegara a ser declarada invalida o no
ejecutable bajo cualquier circunstancia determinada, el resto de la sección
seguirá siendo de aplicación y la sección completa seguirá siendo asimismo
aplicable siempre que concurran otras circunstancias.
No es el propósito de esta sección inducirla a infringir patentes u otros
derechos de la propiedad intelectual o disputar en forma alguna la validez de
dichos derechos; el único objetivo de esta sección es la protección de la
integridad del sistema de distribución de software gratuito, implantando por
practicas de licencia publica. Muchas personas han echo generosas
contribuciones a una amplia gama de software distribuido a través de este
sistema confiando en la coherente aplicación de este sistema de distribución;
depende del autor/donante decidir si desea distribuir el software mediante
m
cualquier otro sistema, y un licenciado no puede establecer imposición
alguna con respecto a dicha decisión. Esta sección pretende aclarar
perfectamente lo que se supone es una consecuencia del resto de esta
licencia.
8. Si la distribución y/o utilización del Programa quedara restringida en
ciertos países bajo el efecto de derechos de patente o interfases sujetas a
copyright, el titular original de los derechos de copyright que ampara el
Programa bajo esta Licencia podrá añadir una limitación explícita del ámbito
de distribución geográfica que excluya a dichos países, de forma que la
distribución quede permitida solo en países, o entre países, que no estén
sujetos a dicha exclusión. En este caso, esta Licencia incorporara la
limitación de la misma forma que si hubiera sido incluida en el texto de esta
Licencia.
9. La Free Software Foundation podrá publicar versiones revisadas y/o
nuevas de la Licencia General Publica de forma periódica. Esta nuevas
versiones serán similares en espíritu a la versión actual, aunque podrían
diferir en detalles a fin de resolver nuevos problemas o cuestiones.
Cada versión recibirá un numero de versión distinto. Si el Programa
especifica un numero de versión de esta Licencia que sea de aplicación a la
misma y a "cualquier otra versión posterior", tendrá la opción de seguir los
términos y condiciones de dicha versión o de cualquier versión posterior
n
publicada por la Free Software Foundation. Si el programa no especificara un
número de versión de esta Licencia, podrá seleccionar cualquier versión
publicada en cualquier momento por la Free Software Foundation.
10. Si deseara incorporar partes del Programa en otros programas gratuitos
cuyas condiciones de distribución sean distintas, escriba al autor y solicite
permiso. Escriba a la Free Software Foundation con respecto al software
cuyos derechos de copyright correspondan a esta organización; algunas
veces concedemos excepciones a esta normas. Nuestra decisión será
guiada por los dos objetivos de conservar el carácter gratuito de todos los
derivados de nuestro software gratuito y de promover generalmente la
participación en el software y su reutilización.
INEXISTENCIA DE GARANTÍA
11. Debido a que el programa se licencia libre de costo alguno con en lo que
permite la ley, este programa no esta protegido por garantía alguna. Salvo
cuando se establezca lo contrario por escrito, los titulares de los derechos de
copyright y/o otras partes suministran el programa "tal y como es", sin
garantía de ningún tipo, expresa o implícita, incluyendo, pero sin que esto
sirva de limitación, las garantías implícitas de comerciabilidad o utilidad para
algún propósito determinado. La totalidad del riesgo en relación a la calidad y
rendimiento del programa descansa en el usuario. Si se llegara a encontrar
que el programa adolece de algún defecto, el usuario deberá asumir todos
o
los costes que resultaran necesarios para su servicio, reparación o
corrección.
12. Bajo ninguna circunstancia, a menos que lo requiera alguna ley aplicable
o que se acuerde por escrito, el titular de los derechos de copyright o
cualquier otra parte que hubiera podido modificar y/o redistribuir el programa
de acuerdo con las condiciones anteriormente reseñadas, será responsable
ante el usuario por daños y perjuicios, incluyendo daños y perjuicios
generales, especiales, incidentales o consecuentes, resultantes de la
utilización o incapacidad de uso del programa ( incluyendo, pero sin que esto
constituya una limitación, la perdida de datos o la inexactitud de dichos datos
o la perdidas sostenidas por el usuario o terceros o un fallo del programa con
respecto a su funcionamiento con otros programas ), incluso si dicho titular u
otra parte hubiera sido informado con respecto a la posibilidad de dichos
daños y perjuicios.
FIN DE LOS TÉRMINOS Y CONDICIONES
Como aplicar estos términos a su nuevo programas
Si llegara a desarrollar un nuevo programa y deseara que este programa
fuera de la mayor utilidad posible al publico, la mejor forma de conseguirlo es
escribir software gratuito que todo el mundo pueda redistribuir y cambiar
libremente bajo estos términos.
p
Para hacer esto, adjunte los avisos que se relacionan a continuación al
programa. lo mas seguro es adjuntarlos al principio de cada archivo fuente a
fin de expresar con la mayor efectividad la exclusión de garantías; y cada
archivo debería tener por lo menos la línea de "copyright" y un indicador que
informe sobre donde puede localizarse el texto completo.
<one line to give the program's name and a brief idea of what it does>
Copyright (c) 19YY <name of author>
Este programa es software gratuito; lo puede redistribuir y/o modificar bajo
los términos de la Licencia General Publica GNU según lo publicado por la
Free Software Foundation, bien la versión 2 de la licencia o (a su propia
opción) cualquier otra versión posterior.
Este programa se distribuye con la esperanza de que será útil, pero SIN
NINGÚN TIPO DE GARANTÍA; incluso sin la garantía implícita de
COMERCIABILIDAD o UTILIDAD PARA ALGÚN PROPÓSITO
DETERMINADO. Véase la Licencia Publica General de GNU para mas
información.
Debería haber recibido una copia de la Licencia General Publica GNU junto
con este programa; en caso contrario, escriba a la Free Software Foundation,
Inc., 675 Mass Ave, Cambridge MA 02139 EEUU.
q
Adjunte también información sobre como contactarle por e-mail o correo
normal.
Si el programa es interactivo, haga que proporcione un corto aviso como el
que se muestra a continuación cuando comienza en modalidad interactiva :
Gnomovision versión 69, Copyright (c) 19YY name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type
'show w'.
This free software, and you are welcome redistribute it under certain
conditions; type 'show c' for details.
La Licencia General Publica GIU
Los comandos hipotéticos 'show w' y 'show c' deberían mostrar las secciones
correspondientes de la Licencia General Publica. Como es natural, los
comandos que utilice podrían determinar algo diferente a 'show w' y 'show c',
podrían incluso ser pulsaciones de los botones del ratón o elementos de
menú, lo que se adecue mas a su programa.
También debería hacer, si lo creyera necesario, que su empresa (si trabaja
como un programador) o su institución educativa, si correspondiera, firmara
un aviso "aviso de no aplicabilidad de derechos de copyright". A continuación
se muestra un ejemplo, modifique los nombres de acuerdo con sus
requisitos:
r
Yoyodyne, Inc. , hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon> 1 April 1989
Ty Coon, President of Vice
Esta Licencia General Publica no permite la incorporación de su programa a
programas privados. Si su programa es una biblioteca de subrutinas, podría
considerar mas útil permitir el enlace de aplicaciones privadas con la
biblioteca. Si esto es lo que desea hacer, utilice la Licencia General Publica
de Bibliotecas GNU en lugar de esta Licencia.
I
UNIVERSIDAD DE GUAYAQUIL
Facultad de Ciencias Matemáticas y Física
Carrera de Ingeniería en Sistemas
Computacionales
“Administración Y Balanceo De Carga En Servidores Web”
TOMO 2
PROYECTO DE GRADO
Previo a la Obtención del Título de:
INGENIERO EN SISTEMAS COMPUTACIONALES
Autores:
Cevallos Basurto Juan Carlos
Llerena Pincay Claudia Gabriela
Naula Robles Alexander Alberto
GUAYAQUIL – ECUADOR
Año: 2008
II
AGRADECIMIENTO
Agradezco a Dios por su infinita ayuda y por
hacerme creer una vez más que aunque todo
parezca perdido siempre hay una luz de
esperanza al final del camino, agradezco a mi
familia que me apoyo hasta el final, mis amigos
y a todos las personas que estuvieron siempre
pendiente de mi superación profesional.
Gabriela Llerena
Agradezco a todas aquellas personas que
incondicionalmente estuvieron dándonos su
apoyo tanto moral, espiritual y profesional,
tambien en aquellos que confieron en nuestras
fortalezas, nuestros padres, hermanos
familiares, amigos y primordialmente a Dios que
nos brindo sabiduría, virtud y paciencia para
culminar un peldaño más de nuestra vida
profesional.
Juan Carlos Cevallos
III
Sin duda alguna que mi agradecimiento va
dirigido al ser supremo que gobierna mi vida, y
es Dios, el que con su amor infinito supo
ubicarme con las personas ideales para el
engrandecimiento de mi vida profesional y
espiritual. En el plano familiar debo ser
agradecido de forma infinita a uno de los seres
que mas amo y es sin duda alguna el Ingeniero
Víctor Hugo Robles Palacios mi TIO y por sobre
todo PADRE ejemplar, que en el preciso
instante que adquirió el compromiso y
responsabilidad de criarme, supo brindarme su
amor expresado como herramientas de
vivencia; depositando en mi su entera confianza
y firme convicción de que no lo defraudaría,
impartiéndome consejos, enseñanzas, estrictos
cuidados y por sobre todo su ayuda económica
de forma desinteresada.
El conjunto de todo esto ha logrado que culmine
mi carrera profesional; al Sr. Luis Alberto Naula
Carrasco mi PADRE que con su escasa ayuda
y consejos distantes me proporciono su apoyo,
IV
no puedo dejar de lado al resto de mi familia,
allegados mas cercanos, amigos
incondicionales como lo son Luis Villanueva,
José Villon, Geovanny Mosquera, Danny
Apolinario y Fernando Carpio y por ultimo a mis
compañeros Gabriela y Juan Calos que
supieron sobrellevar como grupo mis locuras,
problemas y vicisitudes en el transcurso de
nuestro seminario y culminación profesional.
Alexander Naula
DEDICATORIA
Dedico esto a las personas que han estado
siempre a mi lado.
Gabriela Llerena
Este proyecto esta dedicado a nuestros padres,
hermanos, familiares, amigos y profesores que
siempre estuvieron a nuestro lado dándonos
fortaleza, forjándonos moral, personal y
profesionalmente, sin olvidar la integración
V
profesional de cada uno de nosotros que
formamos nuestro proyecto para poder cumplir
nuestra meta y salir como ingenieros; no
olvidando que todo lo que hacemos es dedicado
a Dios ya que por él y para él estamos aquí y es
este triunfo.
Juan Carlos Cevallos
Mi agradecimiento en su totalidad se lo doy a
tres mujeres espectaculares que Dios puso en
mi vida; que han sido mis sólidas bases en el
largo y difícil camino al éxito de mi carrera
profesional.
Pienso, creo y estoy plenamente convencido
que el inicio de mi agradecimiento tiene que ir
dirigido de manera muy particular al ser que me
dio el don de la vida mi MADRE la señora
Carmen Amelia Robles Palacios que con poco o
mucho esfuerzo supo brindarme su apoyo,
cariño y afecto; a otra persona que le debo el
éxito y culminación de mi carrera es a mi
ABUELITA la señora María Emperatriz
VI
Palacios; mujer ejemplar, luchadora digna de
admiración y pilar fundamental en mi vida; que
supo brindarme su amor de madre , principios y
educación; y por ultimo este agradecimiento
también voy a dirigirlo a la tercera y última
mujer en mi vida que no por ser la última deja
de ser una de las más importantes; ella que sin
importarle nada y mucho menos sin pedir nada
a cambio dedico su niñez, adolescencia y parte
de su plena madurez en lograr forjar en mi el
profesional que soy y que siempre ha velado
por mi bienestar; la Ingeniera Margarita de las
Mercedes Dorado Palacios que cumpliendo con
su función de TIA supo darme todo el afecto
que un HIJO puede recibir de una MADRE que
sin necesidad de engendrarme tuvo el amable
gesto de reemplazarla; llenar los vacíos y
necesidades en mi vida; en esencia juntas han
logrado crear el ser humano que soy.
Alexander Naula
VII
TRIBUNAL DE GRADUACIÓN
Presidente del Tribunal Primer Vocal
Segundo Vocal Secretario
VIII
DECLARACIÓN EXPRESA
“La autoría de la tesis de grado corresponde exclusivamente al suscrito(s),
perteneciendo a la Universidad de Guayaquil los derechos que generen la
aplicación de la misma”.
(Reglamento de Graduación de la Carrera de Ingeniería en sistemas
Computacionales, Art. 26)
Cevallos Basurto Juan Carlos
E-mail: [email protected]
Llerena Pincay Claudia Gabriela
E-mail: [email protected]
Naula Robles Alexander Alberto
E-mail: [email protected]
IX
RESUMEN
Tanto en el mundo empresarial, como en el mundo académico, existen
ciertas aplicaciones que dada su naturaleza deben proporcionar un servicio
ininterrumpido de 24x7 (24 horas al día, 7 días a la semana). Piénsese por
ejemplo en un servidor de bases de datos en un banco o en un Servidor de
Paginas Web.
Para conseguir estos niveles de disponibilidad se suele utilizar una
configuración avanzada de software, una solución denominada Balanceador
de Carga (Load Balanced) el cual incrementará la calidad de los Servidores
Web Balanceando la Carga y así funcionar de una manera pacifica ejemplo
que no afecte al usuario.
Se puede encontrar un sistema Load Balanced que sea robusto y flexible
para los Servidores y que el tráfico de la Web del HTTP y de HTTPS sea
balanceado a través de un Cluster de Servidores (Server Cluster). Con esta
solución los Servidores tendrán un tráfico que llenará las expectativas, al
realizar el Servidor Load Balanced la carga es mucho mas rápida y fácil. Se
pueden necesitar mas de un solo servidor, cuando la configuración es mas
compleja combina redes publicas, redes privadas.
El Load Balanced es una de las opciones para los empresarios que eligen
instalar Servidores Dedicados en una configuración en Cluster. Hoy en día
los Load Balanced es justo la solución a los Servidores Dedicados.
X
INDICE GENERAL
AGRADECIMIENTO IIDEDICATORIA IVTRIBUNAL DE GRADUACIÓN VIIDECLARACIÓN EXPRESA VIIIRESUMEN IXINDICE GENERAL X
TOMO 2
Capitulo 1 1
Capitulo 2 162
Anexo a
XI
CAPITULO 1
1. MANUAL TECNICO 1
1.1. Introducción 1
1.2. Diagrama general 2
1.3. Instalación en Modo Gráfico de Centos 5 4
1.3.1 Codificación del sistema y Base de Datos 5
1.4. Asignación de Parámetros de Red 109
1.4.1. Nombre del Anfitrión (HOSTNAME) 109
1.4.2. Dirección IP, Máscara de Subred y Puerta de Enlace 110
1.5. Servidores de Nombres 111
1.5.1. Función de Reenvío de Paquetes para IP Versión 4 111
1.5.2. Comprobaciones 111
1.6. Iniciar Servicios y Añadirlo al Arranque del Sistema 112
1.7. Instalaciones de Servicios Utilizados 113
1.7.1. Instalar y Configurar MySQL™ 113
1.8.1. Equipamiento Lógico Necesario 113
1.8.1.1. Instalación a Través de Yum 113
1.8.1.2. Procedimientos 114
1.8.1.3. SELinux y el Servicio Mysqld 114
1.8.1.4. Iniciar, Detener y Reiniciar el Servicio Mysqld 115
1.8.1.5. Agregar el Servicio Mysqld al Arranque del Sistema 115
1.8.1.6. Asignación de Clave de Acceso al Usuario Root 115
XII
1.8.1.6.1. Método Cortó 116
1.8.2. Instalar y Configurar Básica de Apache 116
1.8.2.1. Acerca de Apache 117
1.8.2.2. Equipamiento Lógico Necesario 118
1.8.2.2.1. Instalación a Través de Yum 118
1.8.2.3. Iniciar Servicio y Añadir el Servicio al Arranque del Sistema 118
1.8.2.4. Procedimientos 119
1.8.2.4.1. SELinux y Apache 119
1.8.2.5. Ficheros de Configuración 120
1.8.2.6. Configuración de Sitios de Red en Apache 120
1.8.3. Instalar y Configurar Servidor de Nombres de Dominio (DNS) 122
1.8.3.1. Introducción 122
1.8.3.2. Paquete. Descripción 124
1.8.3.3. Instalación a Través de Yum 124
1.8.3.4. Preparativos 124
1.8.3.5. Tipo de Registro. Descripción 125
1.8.3.6. Zonas de Reenvío 127
1.8.3.7. Zonas de Resolución Inversa 128
1.8.3.8. Equipamiento Lógico Necesario 128
1.8.3.9. Instalación a Través de Yum 129
1.8.3.10. Creación de los Ficheros de Zona 129
1.8.3.11. Zona de Reenvío Red Local 130
XIII
1.8.3.12. Zona de Reenvío Red Wan 130
1.8.3.13. Zona de Resolución Inversa Red Local (balanceo.edu.ec) 131
1.8.3.14. Zona de Resolución Inversa del Dominio (balanceo.com) 132
1.8.3.15. Configuración de Parámetros en el Fichero 132
1.8.3.15.1. Iniciar Servicio y Añadir el Servicio al Arranque del Sistema 134
1.8.4. Instalar y Configurar un Servidor de Mail (POSTFIX) 135
1.8.4.1. Equipamiento Lógico Necesario 135
1.8.4.1.1. Instalación a Través de yum 135
1.8.4.2. Configuración de Parámetros en el Fichero 135
1.8.4.3. Iniciar Servicio y Añadir el Servicio al Arranque del Sistema 137
1.8.5. Instalar y Configurar Cluster Servidor 137
1.8.5.1. Introducción 137
1.8.5.2. Introducción al Clustering de Servidores 138
1.8.5.3. Equipamiento Lógico Necesario 140
1.8.5.3.1. Instalación a Través de Yum 140
1.8.5.4. ldirectord+heartbeat 146
1.8.5.4.1. Introducción 146
1.8.5.5. Configuración de parámetros en el Fichero ha.cf 147
1.8.5.6. Configuración de Parámetros en el Fichero haresources 148
1.8.5.7. Configuración de Parámetros en el Fichero ldirectord 149
1.8.5.8. Configuración de Parámetros en el Fichero authkeys 151
1.8.6. Instalar y Configurar IPVSADM servicio de Monitoreo (Cluster) 152
XIV
1.8.6.1. Introducción 152
1.8.6.2. Equipamiento Lógico Necesario 153
1.8.6.2.1. Instalación a Través de Yum 153
1.8.6.3. Iniciar servicio y Añadir el Servicio al Arranque del Sistema 153
1.8.7. Instalar y Configurar Java (JRE) 153
1.8.7.2. Equipamiento Lógico Necesario 155
1.8.7.2.1. Instalación a Través de rpm.bin 155
1.8.8. Instalar y Configurar NetBeans IDE 157
1.8.8.1. Introducción 157
1.8.8.2. Equipamiento Lógico Necesario 158
1.8.8.2.1. Instalación 158
1.9. Configuración de Red para los Servidores de Balanceo 159
1.9.1. Interfaz Externa (Wan)(eth1) 159
1.9.2. Interfaz interna (Lan) (eth0) 160
1.9.3. Interfaz Virtual (Lan) (Wan) 160
1.10. Configuración de red para los servidores Reales (Server Web) 160
CAPITULO 2
2. Manual de Usuario 162
XV
GRÁFICOS
Gráfico 1. Configuración de SELinux 114
Gráfico 2. Configuración de SELinux 120
Gráfico 3. Implementando Heartbeat 141
Gráfico 4. Buscando Repositorio de descarga (rpm) 141
Gráfico 5. Guardando descarga de rpm 142
Gráfico 6. Resolviendo dependencias y descargando paquetes 142
Gráfico 7. Instalación Total del Heartbeat 143
Gráfico 8. Instalación de paquetes adicionales 143
Gráfico 9. Proceso de Instalación del paquete ldirectord 144
Gráfico 10. Resolviendo y descargando Dependencias 144
Gráfico 11. Proceso de Confirmación de Descarga de Dependencias 145
Gráfico 12. Instalación de Dependencias 145
Gráfico 13. Instalación Completa 146
Gráfico 14. Descargando Java 154
Gráfico 15. Contrato de Licencia de Archivos Binarios 156
Gráfico 16. Extrae RPM 156
Gráfico 17. Compruebe las instalaciones 157
CAPITULO 2
Gráfico 18. Pantalla de inicio de sesión 162
Gráfico 19. Pantalla de Bienvenida 163
XVI
Gráfico 20. Pantalla de Nuevo Servidor Real 164
Gráfico 21. Pantalla de Eliminar Servidor Real 165
Gráfico 22. Pantalla de Monitoreo 166
Gráfico 23. Pantalla de Monitoreo – Servicios 167
Gráfico 24. Pantalla de Monitoreo – Nodos Conectados 168
Gráfico 25. Pantalla de Monitoreo CPU – HDD/Memoria/Procesador 169
Gráfico 26. Pantalla de Monitoreo – Balanceo 170
Gráfico 27. Pantalla de Monitoreo – Balanceo 171
Gráfico 28. Pantalla de Consola 172
Gráfico 29. Reportes 173
Gráfico 30. Reportes de Tráfico 174
Gráfico 31. Reportes de Conexiones Actuales 175
Gráfico 32. Respaldo 176
Gráfico 33. Perfil Administrador 177
Gráfico 34. Perfil Administrador – Respuesta Secreta 178
Gráfico 35. Perfil Administrador – Respuesta Secreta 179
Gráfico 36. Perfil Administrador – Respuesta Secreta 179
Gráfico 37. Perfil Administrador – Recepción de Clave 180
Gráfico 38. Perfil Administrador – Recepción de Clave 180
ANEXOS
Anexo 1.Instalación modo Gráfico de Centos 5 a
SUMMARY
In the business world as in the academic world there are some applications that
given its nature must provide an uninterrupted service for 24x7 (24 hours a day,
7 days a week). Consider for example a database server at a bank or a Web
server page.
To achieve these levels of availability is often used advanced configuration
software, a solution called load balancing (Load Balanced) which will enhance
the quality of Web servers Balancing Cargo and operate such a peaceful
manner without affecting the user.
You can find a system load balance that is robust and flexible for servers and
that traffic on the Web HTTP and HTTPS be balanced through a Cluster Server
(Cluster Server), servers With this solution will have a traffic fill expectations. In
making the server load balance the load is much more quickly and easily. It may
require more than a single server where the configuration is more complex
networks combining public and private networks.
The Load Balanced is an option for employers who choose to install a dedicated
server configuration in Cluster. Today Load Balanced is just the solution to the
dedicated servers.
1
CAPITULO 1
1. MANUAL TECNICO
1.1. Introducción
Este manual técnico se ha preparado por el grupo numero Diez del tópico
de graduación (LINUX).
Agradecemos la colaboración de los profesores, ingenieros y compañeros
que nos han proporcionado orientación necesaria para su elaboración.
Este manual contiene información sobre el empleo del sistema
(BASCULA WEB) localización de procedimientos principales, y la
identificación rápida de funciones que dependen de otros servicios del
Sistema Operativo, este sistema ha sido elaborado de acuerdo con la
metodología de programación Orientada a Objetos. Las operaciones que
no se describen en este manual no han sido incluidas por considerarse
básicas y de conocimiento de las personas a quien va dirigido este
documento. Cabe señalar que es responsabilidad de este grupo
mantener dicho documento actualizado de acuerdo a los cambios que
sufra el sistema en el transcurso del tiempo.
2
1.2. Diagrama general
INICIO
Ingreso usuariopassword
ValidaUser
Error
MenúPrincipal
Respaldos
Reportes
Datos UserMonitoreo
Ingreso Servidor
1 2 3
4 5
3
1
Búsqueda del servidor ha respaldarmediante nombre y IP
Ingreso de usuario y Pass Word delusuario
Selección del tipo de respaldo harealizar y ruta destino del mismo
Selección del tipo de respaldobackup que se desea ejecutar
2
Ingreso IP y Nombre delServer Real
Verificación de Servidormediante Ping interno
Datos del servidor sonverificados antes de ser
agregado a la B/D
ERROR
ERROR
4
1.3 Instalación en Modo Gráfico de Centos 5
Anexo 1
4
Monitoreo de servidor con estadosde CPU, RED, SERVICIOS
Monitores de servicios, puertos, estadode servidor
Monitores de los servidores con losservicios, puertos, estado de servidor
Monitores de los servidores mediantelog
5
1.3.1 Codificación del sistema y Base de Datos
//////////////////////////////////////////////////////////////////////////////Creacion de página de Biembenida (index.jsp)///////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html"%><%@page pageEncoding="UTF-8"%><html>
<head><title>Balanceador</title></head><link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css">
<!--body {
background-color: #FFFFFF;}--></style>
<script language="JavaScript" src="js/md5.js"></script><script languaje="javascript">
////////////////////////////////////////////////////////////////////////////Funcion Crea Ventana
////////////////////////////////////////////////////////////////////////////
function ventana(){var valor="";if(document.forms["form1"].txt_usuario.value.length>0){
if(document.forms["form1"].txt_clave.value.length>0){valor=document.forms["form1"].txt_clave.value;
document.forms["form1"].pass.value = hex_md5(valor);
document.forms["form1"].submit();
}else{alert("Ingrese la clave...");
}}else{
alert("Ingrese el usuario...");}}
6
</script><body>
<table width="589" height="404"border=0 align="center" cellpadding=4 cellspacing=0>
<tbody><tr>
<tdwidth="100%" height="404" valign="top" nowrap
class=urlo><div align="left"><table width="550" border="1">
<tr><td width="581"><table width="542"><tr>
<td colspan="3"><table width="544"
border=0 cellpadding=4 cellspacing=0 bordercolor="0"><tbody><tr>
<tdwidth="100%" nowrap bgcolor="#CCCCCC"
class=titulofondo><div align="center">INICIO DE SESION </div></td></tr>
</tbody></table> </td>
</tr><tr>
////////////////////////////////////////////////////////////////////////////////////Cargando imagenes (Figuras) de las Páginas
////////////////////////////////////////////////////////////////////////////////////
<td width="180" align="center"><imgsrc="imagenes/candado.png" width="110" height="128"></td>
<td width="153" align="center" bgcolor="#FFFFFF"><p><imgsrc="imagenes/User.png" width="82" height="72"></p></td>
<td width="193" align="center" bgcolor="#FFFFFF"><divalign="center"> <img src="imagenes/network.png" width="122"height="128"></div></td>
</tr><tr align="center">
<td colspan="3" bgcolor="#CCCCCC"><div align="center"></div>
7
<div align="center"></div> <table width="223"height="108"
border=0 cellpadding=0 cellspacing=1><tbody>
<tr><td width="215" height="102" class=menu_titu>
clave/ <form action="verifica.jsp" method="post" name="form1"><table width="97%"><tbody>
<tr><td colspan="2" style="color:#ff0000;font-
weight:bold;"> </td></tr>
<tr><td class=titulofondo align=left
width="34%">Usuario: </td><td class=titulofondo align=right width="66%"><input
name="txt_usuario" type="text" maxlength="10"></td></tr><tr>
<td class=titulofondo align=leftwidth="34%">Clave:</td>
<td class=titulofondo align=right width="66%"><inputname="txt_clave" type="password" maxlength="10"></td>
</tr><tr>
<td colspan="2" align=left class=menu_titu><divalign="center">
//////////////////////////////////////////////////////////////////////////////////////////////Valida clave
//////////////////////////////////////////////////////////////////////////////////////////////
<input type="hidden" name="pass" id="pass"><input class=mkbutton type=button value=Ingresar
name=submit2 onclick="ventana()"></div></td>
</tr></tbody>
</table></form></td>
</tr>index.jsp
8
</tbody></table>
<div align="center"></div><div align="center"></div> <div
align="center"></div></td></tr>
</table></td></tr>
</table></div></td>
</tr></tbody>
</table></body></html>
///////////////////////////////////////////////////////////////////////////////////////Creación de Pagina de bienvenida (jbienvenida.jsp)///////////////////////////////////////////////////////////////////////////////////////
/////////// Creación Nombre Barra de titulo /////////////
<html><head><title>Bienvenidos</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo4 {
color: #CC0000;font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}--></style></head>
9
<body><jsp:include page="jcabecera.jsp" flush="true"/>
//////// Crea cabecera Principal/////
<jsp:include page="jizquierdomenu.jsp" flush="true"/>
//////// Crea Botones Menu principal ///
<table width="275" height="473" border="0"><tr>
<td width="10" rowspan="2"> </td><td width="255" height="20"> </td>
</tr><tr>
<td>
///// valida Ip Conectatda Genera mune principal/////////////
<table width="512" height="408" border="0"onClick="window.location='jservidor.jsp'">
<tr><td width="195" height="152" align="center" valign="top"><table
width="172" height="150" border="1"><tr>
<td width="162" height="169" align="center" valign="top"><pclass="Estilo4">NUEVO SERVIDOR </p>
<p class="Estilo8"><span class="Estilo7">Permitir configurar pormedio de un Wizard el servidor Real, añadiendolo al balanceo</span></p>
<p class="Estilo7"><img src="imagenes/servidor.png" width="90"height="91"></p></td>
</tr></table></td><td colspan="2" align="center" valign="top"><table width="163"
height="150" border="1"><tr>
<td height="169" align="center" valign="top"><p><spanclass="Estilo4">MONITOREO</span></p>
<p><span class="Estilo7">Permitira Seleccionar la forma demonitorear , los servidores web </span></p>
<p class="Estilo7"><img src="imagenes/monitoreo.png"width="90" height="91"></p></td>
</tr>
10
</table></td><td width="163" colspan="2" align="center" valign="top"><table
width="163" height="150" border="1"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">REPORTES</span></p>
<p> <span class="Estilo7"> Muestra Reportes de Balanceo porTrafico </span></p>
<p class="Estilo7"><img src="imagenes/reporte.png" width="90"height="91"></p></td>
</tr></table></td>
</tr><tr><td height="201" colspan="2" align="center"><table width="163"
height="150" border="1"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">RESPALDO</span> </p>
<p><span class="Estilo7">Permite Respaldar los Archivos deConfiguracion de los Servidores Reales </span></p>
<p class="Estilo7"><img src="imagenes/respaldo.png" width="90"height="91"></p></td>
</tr></table></td><td colspan="3" align="center"><table width="163" height="150"
border="1" ><tr>
<td align="center" valign="top"><p><span class="Estilo4">PERFILADM </span> </p>
<p><span class="Estilo7">Permitira Realizar Cambios al Perfil deUsuario ADM </span></p>
<p class="Estilo7"><img src="imagenes/adm.png" width="90"height="91"></p></td>
</tr></table></td>
</tr></table><p align="justify"> </p></td>
</tr></table><jsp:include page="verifica_correo.jsp" flush="true"/></body></html>
11
/////////////////////////////////////////////////////////////////////////////////Ventana Nueva Servidor (jservidor.jsp)
////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.lang.*"%><jsp:useBean id="servidor" class="com.wrow.database.Servidores"/><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="comando" class="com.wrow.database.Comandos"/>
<%if(null!=request.getParameter("txt_ip")){
String ip=request.getParameter("txt_ip");Boolean b=true;String nombre=request.getParameter("txt_nombre");base.conectar();
if(b.compareTo(base.verificaconsultas("select * from servidor whereip='"+ip+"' or nombre='"+nombre+"'"))!=0){
base.mantenimiento("insert into servidor values('"+ip+"','"+nombre+"')");
base.desconectar();out.print("<script>alert('Servidor fue ingreso a la base de
datos')</script>");b=servidor.devuelve_ping(ip);
if(b.compareTo(new Boolean(true))==0){comando.agregar_servidor(ip);out.print("<script>alert('Estableciendo comunicacion con el
servidor')</script>");}else{out.print("<script>alert('No responde el Servidor tiempo fuera\\n Por
favor verificar si el servidor esta conectado')</script>");}
}else{out.print("<script>alert('La direccion IP o el nombre ya esta registrado
por otro servidor ')</script>");}
}%><html><head><title>Nuevo Servidor</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
12
<link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}Estilo8 {color: #CC0000}--></style><script languaje="javascript">
////////////Función Verifica IP ///////////////////////
function validar(ip) {partes=ip.split('.');
if (partes.length!=4) {return false;
}for (i=0;i<4;i++) {
num=partes[i];if (num>255 || num<0 || num.length==0 || isNaN(num)){
return false;}
}return true;
}
///////////////////// Función Verifica _ datos /////////////////////////////
function verifica_datos(){var valor="";if(document.forms["form1"].txt_ip.value.length>0){
if(validar(document.forms["form1"].txt_ip.value)==true){if(document.forms["form1"].txt_nombre.value.length>0){
document.forms["form1"].submit();
13
}else{alert("Ingrese el nombre de Servidor...");
}}else{
alert("La IP ingresada es invalida");}
}else{alert("Ingrese la ip del Servidor...");
}}
</script>
</head>
//////////////// Llama Cabecera y menú principal /////////////////////
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
///////////////////////////////Generandpo pagina Nuevo Servidor//////////////////
<table width="518" height="473" border="0"><tr>
<td width="44" rowspan="2"> </td><td width="464" height="20"> </td>
</tr><tr>
<td valign="top"><table width="512" height="314" border="0"><tr>
<td width="195" height="103" align="center" valign="top"><tablewidth="172" height="101" border="1">
<tr><td width="162" height="95" align="center" valign="top"><p
class="Estilo4"><img src="imagenes/servidor.png" width="90"height="91"></p></td>
</tr></table></td><td align="center" valign="top"><p class="Estilo4">NUEVO SERVIDOR
</p>
14
<p class="Estilo8"><span class="Estilo7">Permitir configurar pormedio de un Wizard el servidor real web añadiendole al sistema debalanceo automaticamente</span></p></td>
</tr><tr>
<td height="201" colspan="2" align="center"><form name="form1"method="post" action="jservidor.jsp">
<table width="51%"><tbody>
<tr><td colspan="2" style="color:#ff0000;font-weight:bold;">
</td></tr>
<tr><td class="titulofondo" align="left" width="43%">Direccion IP: </td><td class="titulofondo" align="right" width="57%"><input type="text"
name="txt_ip"></td></tr><tr>
<td class="titulofondo" align="left" width="43%">Nombre:</td><td class="titulofondo" align="right" width="57%"><input type="text"
name="txt_nombre"></td></tr><tr>
<td colspan="2" align="left" class="menu_titu"><div align="center"><input class="mkbutton" type="button" value="Ingresar"
name="submit2" onClick="verifica_datos()"></div></td>
</tr></tbody>
</table></form></td>
</tr></table>
<p align="justify"> </p></td></tr>
</table></body></html>
15
////////////////////////////////////////////////////////////////////////////////Ventana Elimina Servidor (delete_servidor.jsp)////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.lang.*,java.sql.*;"%><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="comando" class="com.wrow.database.Comandos"/>
<%ResultSet res;if(null!=request.getParameter("maquina")){String ip=request.getParameter("maquina");base.conectar();base.mantenimiento("delete from servidor where ip='"+ip+"'");comando.delete_servidor(ip);base.desconectar();
}%>
<html><head><title>Nuevo Servidor</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}--></style><script languaje="javascript">
16
///////////////////////function verifica_datos()////////////////////////////
function verifica_datos(){var valor="";if(confirm("Esta seguro de eliminar el servidor")){
document.forms["form1"].submit();}}
</script>
</head>
//////////////// llama Cabecera y menu principal /////////////////////
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
<table width="518" height="473" border="0"><tr>
<td width="44" rowspan="2"> </td><td width="464" height="20"> </td>
</tr><tr>
<td valign="top"><table width="512" height="314" border="0"><tr>
<td width="195" height="103" align="center" valign="top"><tablewidth="172" height="101" border="1">
<tr><td width="162" height="95" align="center" valign="top"><p
class="Estilo4"><img src="imagenes/servidor.png" width="90"height="91"></p></td>
</tr></table></td><td align="center" valign="top"><p class="Estilo4">ELIMINAR
SERVIDOR </p><p class="Estilo8"><span class="Estilo7">Permitir eliminar por
medio de un Wizard el servidor real web </span></p></td></tr><tr>
17
<td height="201" colspan="2" align="center"><form name="form1"method="post" action="delete_servidor.jsp">
<table width="51%"><tbody>
<tr><td colspan="2" style="color:#ff0000;font-weight:bold;">
</td></tr>
<tr><td class="titulofondo" align="left" width="43%">Direccion IP: </td><td class="titulofondo" align="right" width="57%">
<select name="maquina" id="select">
//////////////// Conectar y desconectar de la Base /////////////////////
<%base.conectar();res=base.Consultas("select * from servidor");while(res.next()){out.println(" <option
value='"+res.getString("ip")+"'>"+res.getString("nombre")+"</option>");}base.desconectar();
%></select></td>
</tr><tr>
<td class="titulofondo" align="left" width="43%"> </td><td class="titulofondo" align="right" width="57%"> </td>
</tr><tr>
<td colspan="2" align="left" class="menu_titu"><div align="center"><input class="mkbutton" type="button" value="Eliiminar"
name="submit2" onClick="verifica_datos()"></div></td>
</tr></tbody>
</table></form>
18
</td></tr>
</table><p align="justify"> </p></td>
</tr></table></body></html>
/////////////////////////////////////////////////////////////////////////////////////Ventana de Monitores (jmonitoreo.jsp)
//////////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*" errorPage="" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>MONITOREO</title>
<script language="javascript">function abrir_ventana(valor){
//////////////////////////////Evalua ChetBox ////////////////////////////
if(document.form1.radio1.value==0){window.location='servicios.jsp';}if(document.form1.radio1.value==1){window.location='trafico.jsp';}if(document.form1.radio1.value==2){window.location='disco.jsp';}if(document.form1.radio1.value==3){}}</script><style type="text/css"><!--.Estilo4 {color: #CC0000;
19
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}.style1 {color: #000000}--></style></head>
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
<form id="form1" name="form1" method="post" action=""><table width="489" border="0">
<tr><td width="389"><table width="422" height="101" border="1"
align="center"><tr>
//////////////////////Genera Imagen de la Ventana////////////////////////////////
<td width="90" height="95" align="center" valign="top"><pclass="Estilo4"><img src="imagenes/monitoreo.png" width="90" height="91"/></p></td>
<td width="240" align="center" valign="top"><pclass="Estilo4">MONITOREO</p>
<p class="Estilo8"><span class="Estilo7">Permitira Seleccionar laforma de monitorear , los servidores web</span></p></td>
</tr></table><p class="Estilo4"> </p> </td>
</tr><tr>
<td><div align="center"><table width="287" border="0">
<tr>
/////////////////////////////Ciclo de Validacion de los ChekBox///////////////////
<td width="24"><input name="radio1" type="radio" id="radio1" value="0"onclick="window.location='servicios.jsp'" /></td>
20
<td width="253"><div align="left"><span class="style1">Servicios</span></div></td>
</tr><tr><td><input type="radio" name="radio1" id="radio2" value="1"
onclick="window.location='trafico.jsp'"/></td><td><div align="left"><span class="style1">Nodos
Conectados</span></div></td></tr><tr><td><input type="radio" name="radio1" id="radio3" value="2"
onclick="window.location='dmc.jsp'"/></td><td><div align="left"><span class="style1">Capacidad HDD, Memoria
y CPU</span></div></td></tr><tr><td><input type="radio" name="radio1" id="radio4" value="3"
onclick="window.location='balanceo.jsp'"/></td><td><div align="left"><span
class="style1">Balanceo</span></div></td></tr><tr><td><input type="radio" name="radio1" id="radio5" value="4"
onclick="window.location='consola.jsp'"/></td><td><div align="left">Consola</div></td>
</tr></table><p>
<label></label><br />
</p></div></td>
</tr><tr>
<td> </td></tr>
</table></form></body></html>
21
///////////////////////////////////////////////////////////////////////////////////////Creación de Ventanas Reporte (reportes.jsp)
///////////////////////////////////////////////////////////////////////////////////////
%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*" errorPage="" %><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title><style type="text/css"><!--.Estilo4 {color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}--></style></head>
//////////////// Llama Cabecera y menú principal /////////////////////
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/><form id="form1" name="form1" method="post" action="">
<table width="163" height="150" border="1" align="center"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">REPORTES</span></p>
<p> <span class="Estilo7"> Muestra Reportes de Balanceo por Trafico</span></p>
<p class="Estilo7"><img src="imagenes/reporte.png" width="90"height="91" /></p></td>
</tr></table><table width="462" border="0" align="center">
<tr>
22
/////////////valida clip en cketbox ///////////////////
<td width="456"><input type="radio" name="radio" id="radio"value="radio" onclick="window.location='reportes1.jsp'"/>
<strong>Reporte de Trafico de Red</strong></td></tr><tr>
/////////////valida clip en cketbox ///////////////////
<td><input type="radio" name="radio" id="radio2" value="radio"onclick="window.location='reportes2.jsp'"/>
<strong>Reporte de Conexiones Actuales</strong></td></tr><tr>
<td> </td></tr><tr>
<td> </td></tr><tr>
<td> </td></tr>
</table></form><p> </p></body></html>
///////////////////////////////////////////////////////////////////////////////////////Creación Ventana Respaldo (respaldo.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="base" class="com.wrow.database.Base"/>
/////////////Genera Ruta Respaldo ///////////////////
<%String maquina_abuscar="";//String button2=request.getParameter("button2");
23
/*if(button2!=null){File dir= new File("C:\\respaldo");dir.mkdirs();}*/
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Respaldo y Restaurar</title><style type="text/css"><!--.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.style1 {
font-size: 24px;font-weight: bold;
}--></style></head>
//////////////// Llama Cabecera y menú principal /////////////////////
<body><jsp:include page="jcabecera.jsp" flush="true"/>
<jsp:include page="jizquierdomenu.jsp" flush="true"/><form id="form1" name="form1" method="post" action="respaldar.jsp">
<table width="163" height="150" border="1" align="center"><tr>
///////////////////Genere Ventana Respaldo /////////////////////
<td align="center" valign="top"><p><spanclass="Estilo4">RESPALDO</span> </p>
24
<p><span class="Estilo7"> Permite Respaldar los Archivos deConfiguracion de los Servidores Reales </span></p>
<p class="Estilo7"><img src="imagenes/respaldo.png" width="90"height="91" /></p></td>
</tr></table><table width="499" border="0" align="center">
<tr><td width="116"><span class="style1">Respaldo</span></td><td width="85"> </td><td width="149"> </td><td width="131"> </td>
</tr><tr>
<td><strong>Maquina :</strong></td><td><select name="select1" id="select1">
<%base.conectar();String maquina="";String maq="";
//////////////// Llama Función Base consulta para IP registrada /////////////////////
int i=0;ResultSet r=base.Consultas("select ip from servidor");
while(r.next()){maquina=r.getString("ip");if(i==0){
maq=maquina;}
if(maquina_abuscar.compareTo(maquina)==0){out.println("<option
value='"+maquina+"' selected='selected'>"+maquina+"</option>");}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select></td><td> </td><td> </td>
25
</tr><tr>
<td>Respaldar </td><td colspan="2"><input name="1" type="checkbox" id="1"
checked="checked" />Archivos de Configuracion</td>
<td> </td></tr><tr>
<td> </td><td colspan="2"></td><td> </td>
</tr><tr>
<td>Url :</td><td colspan="2"><input name="url" type="text" id="url" value="/opt/"
/></td><td> </td>
</tr><tr>
<td> </td><td colspan="2"><input type="submit" name="button2" id="button2"
value="Respaldar" /></td><td> </td>
</tr></table>
</form><p> </p></body></html>
////////////////Llama Función de Envió y Recibido /////////////////////
<%cliente.envias.close();
cliente.recibes.close();%>
//////////////////////////////////////////////////////////////////////////////////////Ventana Perfil Administrador (jperfil.jsp)
//////////////////////////////////////////////////////////////////////////////////////
!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
26
"http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.sql.*"%>
<html><head><title>Perfil</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="./css/estilo.css"/><script>
///////////////////////// Funcion Ir o Buscar Pagina /////////////////////////////
function ir_pagina(){
if(document.form1.radio.value==0){window.location=''}else{window.location=''}
}</script><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}.style1 {
color: #000000;font-weight: bold;
}.style2 {font-size: 16px}.style3 {color: #000000}body,td,th {
27
color: #000000;}--></style></head>
//////////////// llama Cabecera y menú principal /////////////////////
<body><jsp:include page="/jcabecera.jsp" flush="true"/><jsp:include page="/jizquierdomenu.jsp" flush="true"/><form name="form1" method="post" action="" id="form1">
<table width="501" height="473" border="0"><tr>
///////////////////Genere Ventana Respaldo /////////////////////
<td width="1" rowspan="2"> </td><td width="490" height="20"> </td>
</tr><tr>
<td valign="top"><table width="477" height="130" border="0">
<tr><td width="214" height="103" align="center" valign="top"><table
width="172" height="101" border="0" align="center"><tr>
<td width="162" height="95" align="center" valign="top"><pclass="Estilo4"><img src="imagenes/adm.png" width="90"height="91"></p></td>
</tr></table>
<div align="center"></div></td><td width="253" align="center" valign="top"><p class="Estilo4
style2">PERFIL ADMINISTRADOR </p><p class="Estilo8"> </p></td>
</tr><tr><td height="21" colspan="2" align="center"><div align="left">
<p><span class="style1">Metodo de Recepción declave</span></p>
<p><input name="radio" type="radio" id="radio" value="0"
onClick="window.location='secreta.jsp'">Utilizar respuesta secreta para comprobar mi identidad </p>
28
<p><input type="radio" name="radio" id="radio" value="1"
onClick="window.location='mail.jsp'">Enviar contraseña por correo electronico</p>
<p align="center"> </p>
</div></td></tr>
</table><p align="justify"> </p></td>
</tr></table>
</form></body></html>
////////////////////////////////////////////////////////////////////////////////////////Ventana Monitoreo de Servicio (servicios.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html" import="java.util.*"%><%@page pageEncoding="UTF-8"%>
<html><head><title>JSP Page</title><style type="text/css">
<!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style></head>
<body><p>
//////////////// Llama Cabecera y menú principal /////////////////////
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/></p>
29
//////////////// Pagina que Genera Reporte /////////////////////
<iframe src="nservicios.jsp" width="750" height="500"></iframe><p> </p>
</body></html>
////////////////////////////////////////////////////////////////////////////////////////Ventana Monitoreo de Nodos (trafico.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html" import="java.util.*"%><%@page pageEncoding="UTF-8"%>
<html><head><title>JSP Page</title><style type="text/css">
<!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style></head>
<body><p>
//////////////// Llama Cabecera y menú principal /////////////////////
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/></p>
//////////////// Pagina que Genera Reporte /////////////////////<iframe src="ntrafico.jsp" width="700" height="500"
frameborder="0"></iframe>
<p> </p></body></html>
30
////////////////////////////////////////////////////////////////////////////////////////Ventana Capacidad Disco Memoria CPU (dmc.jsp)///////////////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html" import="java.util.*"%><%@page pageEncoding="UTF-8"%>
<html><head><title>JSP Page</title><style type="text/css">
<!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style></head>
<body><p>
//////////////// Llama Cabecera y menú principal /////////////////////
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/></p>
//////////////// Pagina que Genera Reporte ////////////////////////////
<iframe src="ndmc.jsp" width="750" height="500"></iframe>
<p> </p></body></html>
////////////////////////////////////////////////////////////////////////////////////////Ventana Monitor Balanceo (balanceo.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.util.*,java.sql.*,java.text.*,java.io.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="baselocal" class="com.wrow.database.BaseLocal"/><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="grafico" class="org.jfree.chart.demo.servlet.WebHitChart"/>
31
//////////////// Encera Variables principales /////////////////////<%String conexiones="";String sistema="";String cpu_fan="";String ps_fan="";String cpu_temp="";String control;String respuesta="";StringTokenizer tokens;String maquina_abuscar="";String fecha="";String total_enviados="";String total_recibidos="";String total_enviados_dia="";String total_recibidos_dia="";String total_enviados_hora="";String total_recibidos_hora="";String boton=request.getParameter("button");String contenido="";String imagen="";String imagen2="";String anio="";ResultSet respu=null;baselocal.conectar();base.conectar();respu=baselocal.Consultas("select * from registros");while(respu.next()){base.mantenimiento("insert into registros(servidor,fecha,conexiones,paquetes_envia,paquetes_recibir,hora,paquetesi_byte,paqueteso_byte)values('"+respu.getString("servidor")+"','"+respu.getString("fecha")+"','"+respu.getString("conexiones")+"','"+respu.getString("paquetes_envia")+"','"+respu.getString("paquetes_recibir")+"','"+respu.getString("hora")+"','"+respu.getString("paquetesi_byte")+"','"+respu.getString("paqueteso_byte")+"')");
}
baselocal.mantenimiento("delete from registros");base.desconectar();baselocal.desconectar();int e=0;ResultSet r;if(boton!=null){
32
java.util.Date curretDate= new java.util.Date();SimpleDateFormat fecha_actual = new SimpleDateFormat("yyyy-MM-
dd");fecha=fecha_actual.format(curretDate);cliente.ip=request.getParameter("select");maquina_abuscar=cliente.ip;//recibir el nombre sistema operativocliente.solicitud="3-";respuesta=cliente.waitForPackets();tokens = new StringTokenizer(respuesta,"?");conexiones=String.valueOf(tokens.countTokens());cliente.solicitud="%-";sistema=cliente.waitForPackets();sistema=sistema.substring(0, sistema.indexOf(" "));cliente.solicitud="#-";//recibir parametros del servidor web de fan y cpurespuesta=cliente.waitForPackets();
tokens= new StringTokenizer(respuesta,"?");if(tokens.countTokens()>0 && tokens.countTokens()>2){
cpu_fan=tokens.nextToken();ps_fan=tokens.nextToken();cpu_temp=tokens.nextToken();
}base.conectar();//obtener conexionestotal_enviados=base.Consultas_objecto("select max(paquetes_envia)
as Objecto from registros where servidor='"+maquina_abuscar+"'");total_recibidos=base.Consultas_objecto("select
max(paquetes_recibir) as Objecto from registros whereservidor='"+maquina_abuscar+"' ");
total_enviados_dia=base.Consultas_objecto("selectmax(paquetes_envia) as Objecto from registros whereservidor='"+maquina_abuscar+"' and fecha='"+fecha+"'");
total_recibidos_dia=base.Consultas_objecto("selectmax(paquetes_recibir) as Objecto from registros whereservidor='"+maquina_abuscar+"' and fecha='"+fecha+"'");
if(total_enviados_dia==null){total_enviados_dia="0";}if(total_recibidos_dia==null){total_recibidos_dia="0";}
total_enviados_hora=String.valueOf(Long.parseLong(total_enviados_dia)/12);
33
total_recibidos_hora=String.valueOf(Long.parseLong(total_recibidos_dia)/12);
contenido="<?xml version='1.0' encoding='ISO-8859-1'?>";for(e=0;e<=24;e++){if(e<10){
r=base.Consultas("select max(conexiones) as objecto from registroswhere servidor='"+maquina_abuscar+"' and fecha='"+fecha+"' and hora like'0"+e+"%' ");
}else{r=base.Consultas("select max(conexiones) as objecto from registros
where servidor='"+maquina_abuscar+"' and fecha='"+fecha+"' and hora like'"+e+"%' ");
}while(r.next()){
if(r.getString("objecto")!=null){
contenido=contenido+"<hora>"+e+":00</hora><conexion>"+r.getString("objecto")+"</conexion>";
}}
}//generar graficos de horaString filename = grafico.generateBarChart(contenido, session, new
PrintWriter(out));String graphURL = request.getContextPath() +
"/servlet/DisplayChart?filename=" + filename;contenido="";imagen="<img src='"+graphURL+"' width=700 height=350 border=0
usemap='#"+filename+"'>";GregorianCalendar dias= new GregorianCalendar();anio=fecha.substring(0, 8);
contenido="<?xml version='1.0' encoding='ISO-8859-1'?>";for(e=1;e<=31;e++){
r=base.Consultas("select max(conexiones) as objecto from registroswhere servidor='"+maquina_abuscar+"' and fecha like '"+anio+e+"' ");
while(r.next()){if(r.getString("objecto")!=null){
contenido=contenido+"<dia>"+anio+e+"</dia><conexion>"+r.getString("objecto")+"</conexion>";
}}
34
}//genera grafico por diafilename = grafico.generateBarChart_dias(contenido, session, new
PrintWriter(out));graphURL = request.getContextPath() +
"/servlet/DisplayChart?filename=" + filename;imagen2="<img src='"+graphURL+"' width=700 height=350 border=0
usemap='#"+filename+"'>";
base.desconectar();
}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Balanceo</title></head>
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
<body><form id="form1" name="form1" method="post" action="balanceo.jsp"><table width="714" border="0" align="left">
<tr><td width="161"><div align="right"><strong>Maquina :</strong></div></td><td width="216"><select name="select" id="select">
<%base.conectar();String maquina="";String maq="";int i=0;
r=base.Consultas("select ip from servidor");while(r.next()){
maquina=r.getString("ip");if(maquina_abuscar.compareTo(maquina)==0){
out.println("<optionvalue='"+maquina+"' selected='selected'>"+maquina+"</option>");
}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
35
}base.desconectar();
%></select>
<input type="submit" name="button" id="button" value="Buscar" /></td><td width="258"> </td>
</tr><tr>
<td colspan="2"><table width="432" border="0"><tr><td colspan="4"
bgcolor="#CCCCCC"><strong>Balanceo</strong><strong></strong></td></tr>
<tr><td width="142"> </td><td width="79"><strong>Total</strong></td><td width="68"><strong>Dia</strong></td><td width="125"><strong>Hora</strong></td>
</tr><tr><td><strong>Paquetes Enviados</strong></td><td><%=total_enviados%></td><td><%=total_enviados_dia%></td><td><%=total_enviados_hora%></td>
</tr><tr><td><strong>Paquetes Recibidos</strong></td><td><%=total_recibidos%></td><td><%=total_recibidos_dia%></td><td><%=total_recibidos_hora%></td>
</tr><tr><td colspan="4" bgcolor="#CCCCCC"><strong>Sistema Operativo
</strong></td></tr>
<tr><td
colspan="3"> <%=sistema%></td>
<td> </td></tr>
<tr>
36
<td colspan="4" bgcolor="#CCCCCC"><strong>ConexionesActuales</strong></td>
</tr><tr><td> </td><td colspan="3"> <strong><%=conexiones%> Conexiones
</strong></td></tr>
<tr><td> </td><td> </td><td> </td><td> </td>
</tr>
</table></td><td><table width="258" border="0">
<tr><td colspan="2" bgcolor="#CCCCCC"><strong>CPU FAN
</strong></td></tr>
<tr><td width="95"> </td><td width="153"><%=cpu_fan%></td></tr>
<tr><td colspan="2" bgcolor="#CCCCCC"><strong>SYSTEM FAN
SPEED</strong></td></tr>
<tr><td> </td><td><%=ps_fan%></td>
</tr><tr><td colspan="2"> </td></tr>
<tr><td colspan="2" bgcolor="#CCCCCC"><strong>CPU
TEMP</strong></td></tr>
<tr><td> </td><td><%=cpu_temp%></td>
</tr>
37
<tr><td height="40"> </td><td> </td>
</tr>
</table></td></tr><tr>
<td colspan="3" bgcolor="#CCCCCC"><strong>Estadistica de balanceopor hora</strong></td>
</tr><tr>
<td colspan="3"><%=imagen%>
</td></tr>
<tr><td colspan="3" bgcolor="#CCCCCC"><strong>Estadistica de balanceo
diario</strong></td></tr>
<tr><td colspan="3">
<%=imagen2%></td>
</tr></table></form>
<p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p> </p><p>
38
//////////////// Conecta Envía y Recibe Datos ////////////////////
<%base.desconectar();cliente.envias.close();cliente.recibes.close();
%></p>
</body></html>
////////////////////////////////////////////////////////////////////////////////////////Ventana Consola (consola.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><%String maquina_abuscar="";String respuesta=request.getParameter("respuesta");String comando=request.getParameter("comando");if(respuesta==null){respuesta="";comando="";}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Consola en linea</title><style type="text/css"><!--.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}
39
.style1 {font-size: 24px;font-weight: bold;
}--></style></head>
<body><jsp:include page="jcabecera.jsp" flush="true"/>
<jsp:include page="jizquierdomenu.jsp" flush="true"/><form id="form1" name="form1" method="post" action="consola1.jsp">
<table width="163" height="150" border="1" align="center"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">CONSOLA<p>Permite ejecutar comando emulando unaconsola en linux</p></span><span class="Estilo7"></span></p>
<p class="Estilo7"> </p></td></tr>
</table><table width="499" border="0" align="center">
<tr><td colspan="2"><span class="style1">Manejo de consola</span></td><td width="149"> </td><td width="131"> </td>
</tr><tr>
<td width="116"><strong>Maquina :</strong></td><td width="85"><select name="select1" id="select1">
<%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){maquina=r.getString("ip");if(i==0){
maq=maquina;}
if(maquina_abuscar.compareTo(maquina)==0){out.println("<option
value='"+maquina+"' selected='selected'>"+maquina+"</option>");}else{
40
out.println("<option value='"+maquina+"'>"+maquina+"</option>");
}i++;
}base.desconectar();
%></select></td><td> </td><td> </td>
</tr><tr>
<td>Comando: </td><td colspan="2"><input type="text" name="comando" id="comando"
value="<% out.println(comando); %>"/><input type="submit" name="button2" id="button2" value="Ejecutar"
/></td><td> </td>
</tr><tr>
<td>Respuesta</td><td colspan="2"><textarea name="textfield" cols="40" rows="5"
id="textfield"><% out.println(respuesta); %></textarea></td><td> </td>
</tr><tr>
<td> </td><td colspan="2"> </td><td> </td>
</tr><tr>
<td> </td><td colspan="2"> </td><td> </td>
</tr></table>
</form><p> </p></body></html>}
41
////////////////////////////////////////////////////////////////////////////////////////Ventana Reporte Trafico (reportes1.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="baselocal" class="com.wrow.database.BaseLocal"/>
<%
ResultSet respu=null;baselocal.conectar();base.conectar();respu=baselocal.Consultas("select * from registros");while(respu.next()){base.mantenimiento("insert into registros(servidor,fecha,conexiones,paquetes_envia,paquetes_recibir,hora,paquetesi_byte,paqueteso_byte)values('"+respu.getString("servidor")+"','"+respu.getString("fecha")+"','"+respu.getString("conexiones")+"','"+respu.getString("paquetes_envia")+"','"+respu.getString("paquetes_recibir")+"','"+respu.getString("hora")+"','"+respu.getString("paquetesi_byte")+"','"+respu.getString("paqueteso_byte")+"')");
}
baselocal.mantenimiento("delete from registros");base.desconectar();baselocal.desconectar();
ResultSet r;ResultSet r_aux;String fecha="";String sql="SELECT max(conexiones) asmaximo,fecha,servidor,paquetes_envia,paquetes_recibir,paquetesi_byte,paqueteso_byte FROM monitor.registros";String servidor="";if(request.getParameter("button")!=null){
if(request.getParameter("fecha").compareTo("yyyy-mm-dd")!=0){fecha=" and fecha='"+request.getParameter("fecha")+"' ";}else{out.println("<script>alert('Seleccione la fecha para realizar la
busqueda')</script>");}
42
}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>REPORTES</title><style type="text/css"><!--.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.style1 {
color: #FF0000;font-weight: bold;
}--></style></head><script type="text/javascript" src="popcalendar.js"></script><body>
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/><table width="802" border="0">
<tr><td width="262"><span class="style1">REPORTES DE
TRAFICO</span></td><td width="26"> </td><td widt<%@ page contentType="text/html; charset=utf-8" language="java"
import="java.sql.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="baselocal" class="com.wrow.database.BaseLocal"/>
<%
ResultSet respu=null;baselocal.conectar();base.conectar();
43
respu=baselocal.Consultas("select * from registros");while(respu.next()){base.mantenimiento("insert into registros(servidor,fecha,conexiones,paquetes_envia,paquetes_recibir,hora,paquetesi_byte,paqueteso_byte)values('"+respu.getString("servidor")+"','"+respu.getString("fecha")+"','"+respu.getString("conexiones")+"','"+respu.getString("paquetes_envia")+"','"+respu.getString("paquetes_recibir")+"','"+respu.getString("hora")+"','"+respu.getString("paquetesi_byte")+"','"+respu.getString("paqueteso_byte")+"')");
}
baselocal.mantenimiento("delete from registros");base.desconectar();baselocal.desconectar();
ResultSet r;ResultSet r_aux;String fecha="";String sql="SELECT max(conexiones) asmaximo,fecha,servidor,paquetes_envia,paquetes_recibir,paquetesi_byte,paqueteso_byte FROM monitor.registros";String servidor="";if(request.getParameter("button")!=null){
if(request.getParameter("fecha").compareTo("yyyy-mm-dd")!=0){fecha=" and fecha='"+request.getParameter("fecha")+"' ";}else{out.println("<script>alert('Seleccione la fecha para realizar la
busqueda')</script>");}
}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>REPORTES</title><style type="text/css"><!--.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
44
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.style1 {
color: #FF0000;font-weight: bold;
}--></style></head><script type="text/javascript" src="popcalendar.js"></script><body>
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/><table width="802" border="0">
<tr><td width="262"><span class="style1">REPORTES DE
TRAFICO</span></td><td width="26"> </td><td width="500"><form id="form1" name="form1" method="post" action="">Buscar en:<input name="fecha" type="text" id="textfield" value="yyyy-mm-dd"
maxlength="10" readonly="true" /><img src="imagenes/b_calendar.png" width="16" height="16"
onClick="popUpCalendar(this, form1.fecha, 'yyyy-mm-dd')"/><input type="submit" name="button" id="button" value="Buscar" /><input type="submit" name="button2" id="button2" value="Reporte
Completo" /></form></td>
</tr></table><table width="737" border="0">
<tr><td width="98" bgcolor="#999999"><strong>Direccion Ip</strong></td><td width="124" bgcolor="#999999"><strong>Nombre
Maquina</strong></td><td width="85" bgcolor="#999999"><strong>Conexiones</strong></td><td width="108" bgcolor="#999999"><strong>Paq. Entrantes
</strong></td><td width="97" bgcolor="#999999"><strong>Paq. Salientes</strong></td><td width="97" bgcolor="#999999"><strong>Entrates bytes</strong></td>
45
<td width="98" bgcolor="#999999"><strong>Saliente bytes</strong></td></tr><%long conexiones=0;long pa_entrantes=0;long pa_salientes=0;long byte_entrantes=0;long byte_salientes=0;base.conectar();r=base.Consultas("select * from servidor");
while(r.next()){servidor=r.getString("ip");r_aux=base.Consultas(sql+" where servidor='"+servidor+"'"+fecha+"
group by fecha");
while(r_aux.next()){
conexiones=conexiones+Long.parseLong(r_aux.getString("maximo"));
pa_entrantes=pa_entrantes+Long.parseLong(r_aux.getString("paquetes_envia"));
pa_salientes=pa_salientes+Long.parseLong(r_aux.getString("paquetes_recibir"));
byte_entrantes=byte_entrantes+Long.parseLong(r_aux.getString("paquetesi_byte"));
byte_salientes=byte_salientes+Long.parseLong(r_aux.getString("paqueteso_byte"));
}
out.println("<tr><td>"+r.getString("ip")+"</td><td>"+r.getString("nombre")+"</td><td><div align='center'>"+conexiones+"</div></td><td><divalign='center'>"+pa_entrantes+"</div></td> <td><divalign='center'>"+pa_salientes+"</td> <td><divalign='center'>"+byte_entrantes+"</div></td> <td><divalign='center'>"+byte_salientes+"</div></td> </tr>");
}base.desconectar();%>
</table>
46
</body></html>h="500"><form id="form1" name="form1" method="post" action="">
Buscar en:<input name="fecha" type="text" id="textfield" value="yyyy-mm-dd"
maxlength="10" readonly="true" /><img src="imagenes/b_calendar.png" width="16" height="16"
onClick="popUpCalendar(this, form1.fecha, 'yyyy-mm-dd')"/><input type="submit" name="button" id="button" value="Buscar" /><input type="submit" name="button2" id="button2" value="Reporte
Completo" /></form></td>
</tr></table><table width="737" border="0">
<tr><td width="98" bgcolor="#999999"><strong>Direccion Ip</strong></td><td width="124" bgcolor="#999999"><strong>Nombre
Maquina</strong></td><td width="85" bgcolor="#999999"><strong>Conexiones</strong></td><td width="108" bgcolor="#999999"><strong>Paq. Entrantes
</strong></td><td width="97" bgcolor="#999999"><strong>Paq. Salientes</strong></td><td width="97" bgcolor="#999999"><strong>Entrates bytes</strong></td><td width="98" bgcolor="#999999"><strong>Saliente bytes</strong></td>
</tr><%long conexiones=0;long pa_entrantes=0;long pa_salientes=0;long byte_entrantes=0;long byte_salientes=0;base.conectar();r=base.Consultas("select * from servidor");
while(r.next()){servidor=r.getString("ip");r_aux=base.Consultas(sql+" where servidor='"+servidor+"'"+fecha+"
group by fecha");
while(r_aux.next()){
conexiones=conexiones+Long.parseLong(r_aux.getString("maximo"));
47
pa_entrantes=pa_entrantes+Long.parseLong(r_aux.getString("paquetes_envia"));pa_salientes=pa_salientes+Long.parseLong(r_aux.getString("paquetes_recibir"));
byte_entrantes=byte_entrantes+Long.parseLong(r_aux.getString("paquetesi_byte"));
byte_salientes=byte_salientes+Long.parseLong(r_aux.getString("paqueteso_byte"));
}
out.println("<tr><td>"+r.getString("ip")+"</td><td>"+r.getString("nombre")+"</td><td><div align='center'>"+conexiones+"</div></td><td><divalign='center'>"+pa_entrantes+"</div></td> <td><divalign='center'>"+pa_salientes+"</td> <td><divalign='center'>"+byte_entrantes+"</div></td> <td><divalign='center'>"+byte_salientes+"</div></td> </tr>");
}base.desconectar();%>
</table></body></html>
/////////////////////////////////////////////////////////////////////////////////////////////Ventana Reporte Conexiones Actuales (reportes2.jsp)/////////////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><%ResultSet r;ResultSet r_aux;String fecha="";String sql="SELECT max(conexiones) asmaximo,fecha,servidor,paquetes_envia,paquetes_recibir,paquetesi_byte,paqueteso_byte FROM monitor.registros";String servidor="";if(request.getParameter("button")!=null){
48
if(request.getParameter("fecha").compareTo("yyyy-mm-dd")!=0){fecha=" and fecha='"+request.getParameter("fecha")+"' ";}else{out.println("<script>alert('Seleccione la fecha para realizar la
busqueda')</script>");}
}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title><style type="text/css"><!--.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.style1 {
color: #FF0000;font-weight: bold;
}--></style></head><script type="text/javascript" src="popcalendar.js"></script><body>
<jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/><table width="802" border="0">
<tr><td width="422"><span class="style1">REPORTES DE CONEXIONES
ACTUALES</span></td><td width="109"> </td><td width="257"><form id="form1" name="form1" method="post" action=""></form></td>
</tr>
49
</table><table width="685" border="0">
<tr><td width="125" bgcolor="#999999"><strong>Protocolo </strong></td>
<td width="194" bgcolor="#999999"><strong>Origen</strong></td><td width="154" bgcolor="#999999"><strong>Destino</strong></td><td width="246" bgcolor="#999999"><strong>Estado</strong></td>
</tr><%String h="";int e=0;int i=0;String respuesta="";String f="";StringTokenizer tokens;
StringTokenizer tokens1;
base.conectar();r=base.Consultas("select * from servidor");
while(r.next()){servidor=r.getString("ip");cliente.ip=servidor;cliente.solicitud="3-";
h="";respuesta=cliente.waitForPackets();
tokens = new StringTokenizer(respuesta,"?");while(tokens.hasMoreTokens()){
h=tokens.nextToken();if((e%2)==0){
out.println(" <tr bgcolor='#469DB0'>");}else{
out.println(" <tr bgcolor='#7CD2E0'>");}
tokens1= new StringTokenizer(h);while(tokens1.hasMoreTokens()){
f=tokens1.nextToken();
if(tokens1.countTokens()>=0){if(i==0 || i==3 || i==4 || i==5){out.println("<td>"+f+"</td>");}
50
}i++;
}i=0;
e++;}
}cliente.envias.close();cliente.recibes.close();
base.desconectar();%>
</table></body></html>
////////////////////////////////////////////////////////////////////////////////////////Ventana Comprueba Identidad (secreta.jsp)
///////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.sql.*"%>
<html><head><title>Pregunta Secreta</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="./css/estilo.css"/><script>function ir_pagina(){
if(document.form1.pregunta.value.length==0){alert('Ingrese la pregunta secreta');}else{window.location='verificarespuesta.jsp?respuesta='+document.form1.p
regunta.value;}
}function ir_pagina2(){
51
window.location='jperfil.jsp'
}</script><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}.style2 {font-size: 16px}body,td,th {
color: #000000;}--></style></head>
<body><jsp:include page="/jcabecera.jsp" flush="true"/><jsp:include page="/jizquierdomenu.jsp" flush="true"/>
<table width="501" height="473" border="0"><tr>
<td width="1" rowspan="2"> </td><td width="490" height="20"> </td>
</tr><tr>
<td valign="top"><table width="477" height="130" border="0">
<tr><td width="214" height="103" align="center" valign="top"><table
width="172" height="101" border="0" align="center"><tr>
<td width="162" height="95" align="center" valign="top"><pclass="Estilo4"><img src="imagenes/adm.png" width="90"height="91"></p></td>
52
</tr></table>
<div align="center"></div></td><td width="253" align="center" valign="top"><p class="Estilo4
style2">PERFIL ADMINISTRADOR </p><p class="Estilo8"> </p></td>
</tr><tr><td height="21" colspan="2" align="center"><div align="left">
<p><strong>Utilizar respuesta secreta para comprobar mi identidad</strong></p>
<form name="form1" method="post" action="">
<p> </p><p><strong>Respuesta Secreta :</strong><input type="text" name="pregunta" id="pregunta">
</p><p align="center"><input type="button" name="button" id="button" value="Siguiente"
onClick="ir_pagina()"><input type="button" name="button2" id="button2" value="Cancelar"
onClick="ir_pagina2()"></p></form>
</div></td></tr>
</table><p align="justify"> </p></td>
</tr></table></body></html>
//////////////////////////////////////////////////////////////////////////////////////////////Ventana Cambia Clabe Secreta (cambiarrespuesta.jsp)//////////////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.sql.*"%><jsp:useBean id="base" class="com.wrow.database.Base"/>
53
<%String respuesta=request.getParameter("respuesta");base.conectar();String usuario="";String clave="";ResultSet r=base.Consultas("select * from usuarios whererespuesta='"+respuesta+"'");
while(r.next()){usuario=r.getString("usuario");
clave=r.getString("reclave");}
base.desconectar();%><html><head><title>Cambiar Clave</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="./css/estilo.css"/><script>function inicio(){
window.location='jperfil.jsp'}function ir_pagina(){
if(document.form1.usuario.value.length==0){alert('Ingrese el usuario a cambiar');}else{
if(document.form1.clave.value.length==0){alert('Ingrese la clave a cambiar');
}else{if(document.form1.cclave.value.length==0){
alert('Ingrese la confirmacion clave');}else{
if(document.form1.clave.value!=document.form1.cclave.value){alert('Clave no son iguales');
}else{
window.location='ingreso_usuario.jsp?usuario='+document.form1.usuario.value+'&clave='+document.form1.clave.value;
}
54
}
}
}}</script><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}.style1 {
color: #000000;font-weight: bold;
}.style2 {font-size: 16px}.style3 {color: #000000}body,td,th {
color: #000000;}--></style></head>
<body><jsp:include page="/jcabecera.jsp" flush="true"/><jsp:include page="/jizquierdomenu.jsp" flush="true"/>
<table width="501" height="473" border="0"><tr>
<td width="1" rowspan="2"> </td><td width="490" height="20"> </td>
</tr><tr>
<td valign="top">
55
<table width="477" height="130" border="0"><tr><td width="214" height="103" align="center" valign="top"><table
width="172" height="101" border="0" align="center"><tr>
<td width="162" height="95" align="center" valign="top"><pclass="Estilo4"><img src="imagenes/adm.png" width="90"height="91"></p></td>
</tr></table>
<div align="center"></div></td><td width="253" align="center" valign="top"><p class="Estilo4
style2">PERFIL ADMINISTRADOR </p><p class="Estilo8"> </p></td>
</tr><tr><td height="21" colspan="2" align="center"><div align="left">
<p><span class="style1">Metodo de Recepción declave</span></p>
<form name="form1" method="post" action="">
<table width="400" border="0" align="center"><tr>
<td width="124">Usuario :</td><td width="185"><input type="text" name="usuario" id="usuario"
value="<%=usuario%>"></td><td width="77"><input type="hidden" name="user" id="hiddenField"
value="<%=usuario%>"></td></tr><tr>
<td>Clave :</td><td><input type="password" name="clave" id="clave"
value="<%=clave%>"></td><td> </td>
</tr><tr>
<td>Confimar Clave :</td><td><input type="password" name="cclave" id="cclave"
value="<%=clave%>"></td><td> </td>
</tr><tr>
<td> </td>
56
<td><input type="button" name="button" id="button"value="Siguiente" onClick="ir_pagina()">
<input type="button" name="button2" id="button2"value="Cancelar" onClick="inicio()"></td>
<td> </td></tr>
</table><p> </p></form>
</div></td></tr>
</table><p align="justify"> </p></td>
</tr></table></body></html>
////////////////////////////////////////////////////////////////////////////////////////consola1.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/>
<%String maquina_abuscar="";String respuesta="";String button2=request.getParameter("button2");
if(button2!=null){maquina_abuscar=request.getParameter("select1");
String comando=request.getParameter("comando");cliente.solicitud="$-"+comando;
cliente.ip=maquina_abuscar;respuesta=cliente.waitForPackets();cliente.envias.close();
cliente.recibes.close();
out.println("<script>window.location='consola.jsp?respuesta="+respuesta+"&comando="+comando+"'</script>");
}
%>
57
////////////////////////////////////////////////////////////////////////////////////////deleteservidor.jsp
///////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.lang.*,java.sql.*;"%><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="comando" class="com.wrow.database.Comandos"/>
<%ResultSet res;if(null!=request.getParameter("maquina")){String ip=request.getParameter("maquina");base.conectar();base.mantenimiento("delete from servidor where ip='"+ip+"'");comando.delete_servidor(ip);base.desconectar();
}%><html><head><title>Nuevo Servidor</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}--></style><script languaje="javascript">
58
function verifica_datos(){var valor="";if(confirm("Esta seguro de eliminar el servidor")){
document.forms["form1"].submit();}}</script></head><body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
<table width="518" height="473" border="0"><tr>
<td width="44" rowspan="2"> </td><td width="464" height="20"> </td>
</tr><tr>
<td valign="top"><table width="512" height="314" border="0"><tr>
<td width="195" height="103" align="center" valign="top"><tablewidth="172" height="101" border="1">
<tr><td width="162" height="95" align="center" valign="top"><p
class="Estilo4"><img src="imagenes/servidor.png" width="90"height="91"></p></td>
</tr></table></td><td align="center" valign="top"><p class="Estilo4">ELIMINAR
SERVIDOR </p><p class="Estilo8"><span class="Estilo7">Permitir eliminar por
medio de un Wizard el servidor real web </span></p></td></tr><tr>
<td height="201" colspan="2" align="center"><form name="form1"method="post" action="delete_servidor.jsp">
<table width="51%"><tbody>
<tr>
59
<td colspan="2" style="color:#ff0000;font-weight:bold;"> </td>
</tr>
<tr><td class="titulofondo" align="left" width="43%">Direccion IP: </td><td class="titulofondo" align="right" width="57%">
<select name="maquina" id="select"><%base.conectar();res=base.Consultas("select * from servidor");while(res.next()){out.println(" <option
value='"+res.getString("ip")+"'>"+res.getString("nombre")+"</option>");}base.desconectar();
%></select></td>
</tr><tr>
<td class="titulofondo" align="left" width="43%"> </td><td class="titulofondo" align="right" width="57%"> </td>
</tr><tr>
<td colspan="2" align="left" class="menu_titu"><div align="center"><input class="mkbutton" type="button" value="Eliiminar"
name="submit2" onClick="verifica_datos()"></div></td>
</tr></tbody>
</table></form></td>
</tr></table>
<p align="justify"> </p></td></tr>
</table></body></html>
60
////////////////////////////////////////////////////////////////////////////////////////Envia_mail.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.io.*" errorPage="" %><jsp:useBean id="mailer" class="com.wrow.database.Enviar_Mail"/><jsp:useBean id="base" class="com.wrow.database.Base"/><%String mail=request.getParameter("mail");String clave="";base.conectar();ResultSet r=base.Consultas("select reclave from usuarios wherecorreo='"+mail+"'");
while(r.next()){clave=r.getString("reclave");
}base.desconectar();mailer.enviarMensaje("La su clave es :"+clave);out.println("<script>alert('Correo fue enviado');window.location='jperfil.jsp';</script>");
%>
////////////////////////////////////////////////////////////////////////////////////////Estados_servidor.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html"%><%@page pageEncoding="UTF-8"%><jsp:useBean id="procesos" class="com.wrow.database.Procesos"/><html>
<head><title>JSP Page</title></head><body>
<% out.println(procesos.ver_paquetes()); %><%-- <jsp:useBean id="beanInstanceName" scope="session"
class="beanPackage.BeanClassName" /> --%><%-- <jsp:getProperty name="beanInstanceName"
property="propertyName" /> --%>
</body></html>
61
////////////////////////////////////////////////////////////////////////////////////////imagen.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page import="javax.servlet.*"%><%@ page import="java.awt.*"%><%@ page import="java.awt.image.*"%><%@ page import="com.sun.image.codec.jpeg.*"%><%@ page import="org.jfree.chart.JFreeChart"%><%@ page import="org.jfree.chart.ChartUtilities"%><%@ page import="org.jfree.chart.ChartFactory"%><%@ page import="org.jfree.data.general.DefaultPieDataset"%><%// Genera un simple pastelDefaultPieDataset objDatos = new DefaultPieDataset();objDatos.setValue("Excelente", new Integer(75));objDatos.setValue("Bueno", new Integer(10));objDatos.setValue("Regular", new Integer(10));objDatos.setValue("Deficiente", new Integer(5));
JFreeChart objGrafico = ChartFactory.createPieChart //Cambielo por un =ChartFactory.createPieChart3D( "Calidad del Servicio", // TÃtulo de la gráficaobjDatos, // Vector de datostrue, // Mostrar la leyenda en la gráficatrue, // Mostrar los tooltipsfalse // Configurar el grafico para generar URLs);
BufferedImage imgPantalla = objGrafico.createBufferedImage(300,300);
// Prepara el JSP para responder la petición del usuarioServletOutputStream objSalida = response.getOutputStream();
// Crea un objeto para codificar en JPEGJPEGImageEncoder objCodifica =JPEGCodec.createJPEGEncoder(objSalida);
//Codifica la imagen en JPEGobjCodifica.encode(imgPantalla);%
62
////////////////////////////////////////////////////////////////////////////////////////Ingresa_usuario.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.security.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/><%byte[] hash = null;byte[] uniqueKey =null;String usuario=request.getParameter("usuario");String clave=request.getParameter("clave");String user=request.getParameter("user");
uniqueKey = clave.getBytes();try {
hash =MessageDigest.getInstance("MD5").digest(uniqueKey);
}catch (NoSuchAlgorithmException e) {
throw new Error("no MD5 support in this VM");}StringBuffer hashString = new StringBuffer();for ( int i = 0; i < hash.length; ++i ) {
String hex = Integer.toHexString(hash[i]);if ( hex.length() == 1 ) {
hashString.append('0');hashString.append(hex.charAt(hex.length()-1));
} else {hashString.append(hex.substring(hex.length()-2));
}}
base.conectar();//out.println("update usuarios setusuario='"+usuario+"',reclave='"+clave+"',clave='"+hashString+"' whereusuario='"+usuario+"'");base.mantenimiento("update usuarios setusuario='"+usuario+"',reclave='"+clave+"',clave='"+hashString+"' whereusuario='"+usuario+"'");out.println("<script>alert('Se ha realiza la actualizacion de nuevos datos conexito');window.location='jperfil.jsp';</script>");base.desconectar();%>
63
////////////////////////////////////////////////////////////////////////////////////////jbienbenida.jsp
///////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page language="java" contentType="text/html;charset=iso-8859-1"%><html><head><title>Bienvenidos</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="css/estilo.css"/><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo4 {
color: #CC0000;font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}--></style></head>
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/>
<table width="275" height="473" border="0"><tr>
<td width="10" rowspan="2"> </td><td width="255" height="20"> </td>
</tr><tr>
<td><table width="512" height="408" border="0"
onClick="window.location='jservidor.jsp'"><tr>
64
<td width="195" height="152" align="center" valign="top"><tablewidth="172" height="150" border="1">
<tr><td width="162" height="169" align="center" valign="top"><p
class="Estilo4">NUEVO SERVIDOR </p><p class="Estilo8"><span class="Estilo7">Permitir configurar por
medio de un Wizard el servidor Real, añadiendolo al balanceo</span></p>
<p class="Estilo7"><img src="imagenes/servidor.png" width="90"height="91"></p></td>
</tr></table></td><td colspan="2" align="center" valign="top"><table width="163"
height="150" border="1"><tr>
<td height="169" align="center" valign="top"><p><spanclass="Estilo4">MONITOREO</span></p>
<p><span class="Estilo7">Permitira Seleccionar la forma demonitorear , los servidores web </span></p>
<p class="Estilo7"><img src="imagenes/monitoreo.png"width="90" height="91"></p></td>
</tr></table></td><td width="163" colspan="2" align="center" valign="top"><table
width="163" height="150" border="1"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">REPORTES</span></p>
<p> <span class="Estilo7"> Muestra Reportes de Balanceo porTrafico </span></p>
<p class="Estilo7"><img src="imagenes/reporte.png" width="90"height="91"></p></td>
</tr></table></td>
</tr><tr><td height="201" colspan="2" align="center"><table width="163"
height="150" border="1"><tr>
<td align="center" valign="top"><p><spanclass="Estilo4">RESPALDO</span> </p>
<p><span class="Estilo7">Permite Respaldar los Archivos deConfiguracion de los Servidores Reales </span></p>
65
<p class="Estilo7"><img src="imagenes/respaldo.png" width="90"height="91"></p></td>
</tr></table></td><td colspan="3" align="center"><table width="163" height="150"
border="1" ><tr>
<td align="center" valign="top"><p><span class="Estilo4">PERFILADM </span> </p>
<p><span class="Estilo7">Permitira Realizar Cambios al Perfil deUsuario ADM </span></p>
<p class="Estilo7"><img src="imagenes/adm.png" width="90"height="91"></p></td>
</tr></table></td>
</tr></table><p align="justify"> </p></td>
</tr></table><jsp:include page="verifica_correo.jsp" flush="true"/></body></html>
////////////////////////////////////////////////////////////////////////////////////////jcabecera.jsp
///////////////////////////////////////////////////////////////////////////////////////
<table width="993" border="0" align="center" nowrap class=titulofondo><tr>
<td bordercolor="0"> </td><td height="72" bordercolor="0"><div align="center">
<table width="563" border="1"><tr>
<td width="624" bgcolor="#FFFFFF"><div align="center">BASCULAWEB</div></td>
</tr></table>
</div></td></tr><tr>
<td width="115" bordercolor="0"> </td><td width="868" height="21" bordercolor="0"> </td>
</tr>
66
</table>
////////////////////////////////////////////////////////////////////////////////////////jizquierdomenu.jsp
///////////////////////////////////////////////////////////////////////////////////////
<table width="993" border="0" align="center"><tr>
<td width="222" height="133"><table width="245" height="395" border="0"><tr><td height="21"> </td>
</tr><tr><td height="46" align="right"><a href="jbienvenida.jsp"><img
src="imagenes/btnbienvenida.png" width="112" height="44"border="0"></a></td>
</tr><tr><td width="239" height="32" align="right"><a href="jservidor.jsp"><img
src="imagenes/btnservidor.png" width="112" height="44" border="0"/></a></td>
</tr><tr>
<td height="46" align="right"><a href="delete_servidor.jsp"><imgsrc="imagenes/elimina.png" width="112" height="48" border="0" /></a></td>
</tr><tr><td height="46" align="right"><a href="jmonitoreo.jsp"><img
src="imagenes/btnmonitoreo.png" width="112" height="44" border="0"/></a></td>
</tr><tr><td height="46" align="right"><a href="reportes.jsp"><img
src="imagenes/btnreporte.png" width="112" height="44" border="0"/></a></td>
</tr><tr><td height="46" align="right"><a href="respaldo.jsp"><img
src="imagenes/btnrespaldo.png" width="112" height="44" border="0"/></a></td>
</tr><tr>
67
<td height="46" align="right"><a href="jperfil.jsp"><imgsrc="imagenes/btnperfil.png" width="112" height="44" border="0" /></a></td>
</tr><tr><td height="46" align="right"><a href="index.jsp"><img
src="imagenes/btnsalir.png" width="112" height="44" border="0" /></a></td></tr>
</table> </td>${'<'}td width="609" rowspan="3" valign="top">
////////////////////////////////////////////////////////////////////////////////////////mail.jsp
///////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html;charset=iso-8859-1" language="java"import="java.sql.*"%><jsp:useBean id="base" class="com.wrow.database.Base"/>
<html><head><title>Documento sin título</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"><link type="text/css" rel="stylesheet" href="./css/estilo.css"/><script>function ir_pagina(){window.location='envia_mail.jsp?mail='+document.form1.radio.value;}function inicio(){
window.location='jperfil.jsp'}</script><style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo1 {color: #333333}.Estilo4 { color: #CC0000;
font-size: 12px;font-weight: bold;
68
font-family: "Times New Roman", Times, serif;}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}.style1 {
color: #000000;font-weight: bold;
}.style2 {font-size: 16px}.style3 {color: #000000}body,td,th {
color: #000000;}--></style></head>
<body><jsp:include page="/jcabecera.jsp" flush="true"/><jsp:include page="/jizquierdomenu.jsp" flush="true"/>
<table width="501" height="473" border="0"><tr>
<td width="1" rowspan="2"> </td><td width="490" height="20"> </td>
</tr><tr>
<td valign="top"><table width="477" height="130" border="0">
<tr><td width="214" height="103" align="center" valign="top"><table
width="172" height="101" border="0" align="center"><tr>
<td width="162" height="95" align="center" valign="top"><pclass="Estilo4"><img src="imagenes/adm.png" width="90"height="91"></p></td>
</tr></table>
<div align="center"></div></td><td width="253" align="center" valign="top"><p class="Estilo4
style2">PERFIL ADMINISTRADOR </p><p class="Estilo8"> </p></td>
</tr><tr>
69
<td height="21" colspan="2" align="center"><div align="left"><p><span class="style1">Metodo de Recepción de
clave</span></p><form name="form1" method="post" action="">
<%
base.conectar();String correo="";
ResultSet r=base.Consultas("select correo from usuarios");
while(r.next()){correo=r.getString("correo");out.println("<p><input name='mail'
type='radio' id='radio' value='"+correo+"' checked>Enviar al correo:"+correo+"</p>");
}base.desconectar();
%>
<p align="center"><input type="button" name="button" id="button" value="Siguiente"
onClick="ir_pagina()"><input type="button" name="button2" id="button2" value="Cancelar"
onClick="inicio()"></p></form>
</div></td></tr>
</table><p align="justify"> </p></td>
</tr></table></body></html>
////////////////////////////////////////////////////////////////////////////////////////ndmc.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/>
70
<jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="servidores" class="com.wrow.database.Servidores"/><%String maquina_abuscar="";String boton=request.getParameter("button");String maquinas=request.getParameter("maquina");String estado="";String ser="";if(boton!=null){
maquina_abuscar=request.getParameter("select");if(false==servidores.devuelve_ping(maquina_abuscar).booleanValue()){
out.println("<script>alert('La maquina Selecionada tiene problema decomunicacion\\n Por favor revisar se esta conectado el cable red o si estaprendida')</script>");
maquina_abuscar="";}}%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css"><!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title></title></head>
<body>
<form id="form1" name="form1" method="post" action="ndmc.jsp">
<table width="702" border="0" align="center"><tr><td colspan="3"><div align="center" class="style1">
<div align="left">Disco Duro Memoria CPU</div></div></td>
</tr>
71
<tr><td width="79"><div align="right"><strong>Maquina
:</strong></div></td><td width="112"><select name="select" id="select"><%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){maquina=r.getString("ip");if(i==0){
maq=maquina;}
if(maquina_abuscar.compareTo(maquina)==0){out.println("<option
value='"+maquina+"' selected='selected'>"+maquina+"</option>");}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select></td><td width="604"><input type="submit" name="button" id="button"
value="Buscar"></td></tr><tr><td colspan="3"><p>
<%String respuesta="";
if(maquina_abuscar.length()>0){cliente.ip=maquina_abuscar;
}else{cliente.ip=maq;
}cliente.solicitud="6-";
72
respuesta=cliente.waitForPackets();
%></p>
<table width="578" border="0"><tr>
<td width="310"><strong><img src="imagenes/discoduro.jpg"width="90" height="58" align="top" />Disco Duro</strong></td>
</tr><%
String h="";String aux="";StringTokenizer tokens = new
StringTokenizer(respuesta,"?");while(tokens.hasMoreTokens()){h=tokens.nextToken();if(h.indexOf("%")>0){
aux=aux+h;out.println("<tr><td>"+aux+"</td></tr>");
aux="";}else{aux=h;}
}%>
</table>
————————————————————————————————————
<table width="578" border="0"><tr>
<td width="572"><strong><img src="imagenes/memoria.jpg"width="95" height="62" />Memoria </strong></td>
</tr><%
cliente.solicitud="7-";respuesta=cliente.waitForPackets();
tokens = new StringTokenizer(respuesta,"?");while(tokens.hasMoreTokens()){h=tokens.nextToken();
73
out.println("<tr><td>"+h+"</td></tr>");}
%>
</table>
————————————————————————————————————<table width="584" border="0">
<tr><td><strong><img src="imagenes/cpu.jpg" width="88" height="49"
/>Procesador</strong></td></tr><%
cliente.solicitud="8-";respuesta=cliente.waitForPackets();
tokens = new StringTokenizer(respuesta,"?");while(tokens.hasMoreTokens()){h=tokens.nextToken();out.println("<tr><td>"+h+"</td></tr>");
}%>
</table>
————————————————————————————————————<p> </p>
<p> </p><p>
<%
cliente.envias.close();cliente.recibes.close();
%></p>
<p> </p></td></tr>
</table>
74
</form></body></html>
////////////////////////////////////////////////////////////////////////////////////////nservicios.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="servidores" class="com.wrow.database.Servidores"/><jsp:useBean id="formato" class="com.wrow.database.Formatos"/><%String maquina_abuscar="";String boton=request.getParameter("button");String maquinas=request.getParameter("maquina");String estado="";String ser="";cliente.ip="";if(boton!=null){maquina_abuscar=request.getParameter("select");if(false==servidores.devuelve_ping(maquina_abuscar).booleanValue()){
out.println("<script>alert('La maquina Selecionada tiene problema decomunicacion\\n Por favor revisar se esta conectado el cable red o si estaprendida')</script>");
maquina_abuscar="";}else{out.println("<script>alert('Por favor espere alguno segundos q nos estamos
comunicando con el servidor\\n no haga ninguna accion hasta que presentetodos los servicios ')</script>");}
}if(maquinas!=null){maquina_abuscar=request.getParameter("maquina");ser=request.getParameter("servicio");estado=request.getParameter("estado");cliente.solicitud="4-"+ser+"-"+estado+"-";
cliente.ip=maquina_abuscar;boton=cliente.waitForPackets();
75
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css"><!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title></head>
<body>
<form id="form1" name="form1" method="post" action="nservicios.jsp">
<table width="702" border="0" align="center"><tr><td colspan="3"><div align="center" class="style1">
<div align="left">Monitoreo de Servicios</div></div></td>
</tr><tr><td width="79"><div align="right"><strong>Maquina
:</strong></div></td><td width="112"><select name="select" id="select"><%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){
maquina=r.getString("ip");if(maquina_abuscar.compareTo(maquina)==0){
76
out.println("<optionvalue='"+maquina+"' selected='selected'>"+maquina+"</option>");
}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select></td><td width="604"><input type="submit" name="button" id="button"
value="Buscar"></td></tr><tr><td colspan="3"><table width="710" border="0" align="center">
<tr><td width="102"
bgcolor="#CCCCCC"><strong>Servicio</strong></td><td width="418" bgcolor="#CCCCCC">
<strong>Estado</strong></td><td width="176" bgcolor="#CCCCCC"> </td>
</tr>
<%String respuesta="";String g="";
String m="";
if(maquina_abuscar.length()>0){cliente.ip=maquina_abuscar;
}else{// cliente.ip=maq;
}if(cliente.ip.length()>0 ){m=cliente.ip;
cliente.solicitud="1-";String h="";
int e=0;respuesta=cliente.waitForPackets();StringTokenizer tokens = new StringTokenizer(respuesta,"?");
while(tokens.hasMoreTokens()){if((e%2)==0){
77
out.println(" <tr bgcolor='#469DB0'>");}else{
out.println(" <tr bgcolor='#7CD2E0'>");}
h="";h=tokens.nextToken().substring(3);if(h.trim().length()>0){out.println("<td>"+h+"</td>");cliente.solicitud="2-"+h+"-";g=cliente.waitForPackets();if(g.trim().length()>0){g=formato.sin_carateres_especiales(g);}
out.println("<td>"+g+"</td>");out.println("<td><input type='button' name='button'
id='button' value='Iniciar'onclick='window.location=\"nservicios.jsp?maquina="+m+"&servicio="+h+"&estado=start\"' /><input type='button' name='button2' id='button2' value=' Parar'onclick='window.location=\"nservicios.jsp?maquina="+m+"&servicio="+h+"&estado=stop\"' /></td>");
out.println("</tr>");}
e++;
}out.println("<script>alert('Los servicios presentado listo ')</script>");
// cliente.cerrar_conexion();}cliente.envias.close();cliente.recibes.close();%>
</table></td></tr>
</table></form>
</body></html>
78
////////////////////////////////////////////////////////////////////////////////////////ntrafico.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="base" class="com.wrow.database.Base"/><jsp:useBean id="servidores" class="com.wrow.database.Servidores"/><%String maquina_abuscar="";String boton=request.getParameter("button");
if(boton!=null){
maquina_abuscar=request.getParameter("select");if(false==servidores.devuelve_ping(maquina_abuscar).booleanValue()){
out.println("<script>alert('La maquina Selecionada tiene problema decomunicacion\\n Por favor revisar se esta conectado el cable red o si estaprendida')</script>");
maquina_abuscar="";}
}
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head>
<style type="text/css"><!--.style1 {
font-size: 24px;font-weight: bold;
}-->
</style><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Untitled Document</title></head>
<body>
79
<form id="form1" name="form1" method="post" action="ntrafico.jsp">
<table width="702" border="0" align="center"><tr><td colspan="3"><div align="center" class="style1">
<div align="left">Monitoreo de Trafico de Red</div></div></td>
</tr><tr><td width="79"><div align="right"><strong>Maquina
:</strong></div></td><td width="112"><select name="select" id="select"><%base.conectar();String maquina="";String maq="";int i=0;
ResultSet r=base.Consultas("select ip from servidor");while(r.next()){maquina=r.getString("ip");if(i==0){
maq=maquina;}
if(maquina_abuscar.compareTo(maquina)==0){out.println("<option
value='"+maquina+"' selected='selected'>"+maquina+"</option>");}else{out.println("<option value='"+maquina+"'
>"+maquina+"</option>");}i++;
}base.desconectar();
%></select></td><td width="604"><input type="submit" name="button" id="button"
value="Buscar"></td></tr><tr><td colspan="3"><table width="736" border="0" align="center">
<tr>
80
<td width="71"bgcolor="#CCCCCC"><strong>Protocolo</strong></td>
<td width="94" bgcolor="#CCCCCC"><strong>Paq.Recibido</strong></td>
<td width="89" bgcolor="#CCCCCC"><strong>Paq.Enviado</strong></td>
<td width="148" bgcolor="#CCCCCC"><strong>IPOrigen</strong></td>
<td width="149" bgcolor="#CCCCCC"><strong>IPDestino</strong></td>
<td width="159" bgcolor="#CCCCCC"><strong>Estado</strong></td></tr>
<%String respuesta="";String g="";
String f="";StringTokenizer tokens1;if(maquina_abuscar.length()>0){
cliente.ip=maquina_abuscar;}else{
cliente.ip=maq;}
cliente.solicitud="3-";String h="";
int e=0;respuesta=cliente.waitForPackets();
StringTokenizer tokens = new StringTokenizer(respuesta,"?");
while(tokens.hasMoreTokens()){h=tokens.nextToken();
if((e%2)==0){out.println(" <tr
bgcolor='#469DB0'>");}else{
out.println(" <trbgcolor='#7CD2E0'>");
}tokens1= new StringTokenizer(h);while(tokens1.hasMoreTokens()){
f=tokens1.nextToken();out.println("<td>"+f+"</td>");
81
}e++;
}cliente.envias.close();cliente.recibes.close();// cliente.cerrar_conexion();
%></table></td>
</tr></table>
</form></body></html>
////////////////////////////////////////////////////////////////////////////////////////p.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@page contentType="text/html"%><%@page pageEncoding="UTF-8"%><jsp:useBean id="mail" class="com.wrow.database.Mail"/><%mail.enviar_mail("[email protected]","sjfdsjsdhf");%><html>
<head><title>JSP Page</title></head><body>
<%-- <jsp:useBean id="beanInstanceName" scope="session"class="beanPackage.BeanClassName" /> --%>
<%-- <jsp:getProperty name="beanInstanceName"property="propertyName" /> --%>
</body></html>
////////////////////////////////////////////////////////////////////////////////////////respaldar.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.util.*,java.io.*,java.text.*" errorPage="" %><jsp:useBean id="cliente" class="com.wrow.database.Cliente"/><jsp:useBean id="formato" class="com.wrow.database.Formatos"/>
82
<jsp:useBean id="base" class="com.wrow.database.Base"/><%String button2=request.getParameter("button2");String direccion=request.getParameter("url");
Date myfecha = new Date();SimpleDateFormat f =new SimpleDateFormat("yyyymmddHHmmss");String s=f.format(myfecha);String maquina_abuscar=request.getParameter("select1");
if(button2!=null){if(direccion.length()==0){s="C:\\respaldo"+s;}else{base.conectar();String servid=base.Consultas_objecto("select nombre as objecto fromservidor where ip='"+maquina_abuscar+"'");base.desconectar();s=direccion+"respaldo/"+servid+"/"+s;}
String respuesta="";String h="";
File dir = new File(s);dir.mkdirs();String g="";
cliente.ip=maquina_abuscar;cliente.solicitud="1-";respuesta=cliente.waitForPackets();
File archivo;FileOutputStream fo;StringTokenizer tokens = new StringTokenizer(respuesta,"?");
while(tokens.hasMoreTokens()){h=tokens.nextToken().substring(3);if((h.trim()).length()>0){archivo= new File(s+"/"+h);archivo.createNewFile();cliente.solicitud="5-"+h+"-";respuesta=cliente.waitForPackets2();respuesta=formato.sin_carateres_especiales(respuesta);
83
byte barray[]=respuesta.getBytes();fo=new FileOutputStream (s+"/"+h);
for(int i=0;i<barray.length;i++){fo.write(barray[i]);
}}
}
}cliente.envias.close();
cliente.recibes.close();out.println("<script>alert('El Respaldo fue realizado con exito en la siguientedireccion "+s+"');window.location='respaldo.jsp';</script>");%>
////////////////////////////////////////////////////////////////////////////////////////ver_correo.jsp
///////////////////////////////////////////////////////////////////////////////////////
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN""http://www.w3.org/TR/html4/loose.dtd"><%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*,java.io.*" errorPage="" %><jsp:useBean id="proceso_base" class="com.wrow.database.Base"/><html><head><title>Correo</title><meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css"><!--body {
background-color: #FFFFFF;}.Estilo4 {
color: #CC0000;font-size: 12px;font-weight: bold;font-family: "Times New Roman", Times, serif;
}.Estilo7 {font-size: 12px; font-family: "Times New Roman", Times, serif; color:#CC0000;}.Estilo8 {color: #CC0000}-->
84
</style></head>
<body><jsp:include page="jcabecera.jsp" flush="true"/><jsp:include page="jizquierdomenu.jsp" flush="true"/><table width="715" border="1">
<tr><td width="149"><strong>to</strong></td><td width="157"><strong>fecha</strong></td><td width="387"><strong>mensaje</strong></td>
</tr><%proceso_base.conectar();ResultSet r=proceso_base.Consultas("select * from correo where estado=0");while(r.next()){out.println("<tr>");out.println("<td width='149'><strong>"+r.getString("to")+"</strong></td>");out.println("<td width='157'><strong>"+r.getString("date")+"</strong></td>");out.println("<td
width='387'><strong>"+r.getString("mensaje")+"</strong></td>");out.println("</tr>");
}proceso_base.mantenimiento("update correo set estado=1");proceso_base.desconectar();
%></table></body></html>
////////////////////////////////////////////////////////////////////////////////////////verifica.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@page language="java" contentType="text/html" %><jsp:useBean id="base" class="com.wrow.database.Base"/><%String usuario=request.getParameter("txt_usuario");String clave=request.getParameter("pass");base.conectar();Boolean b=base.verificaconsultas("select * from usuarios whereusuario='"+usuario+"' and clave='"+clave+"'");if(b.compareTo(new Boolean(true))==0){
out.println("<script>window.location='jbienvenida.jsp';</script>");}else{
85
out.println("<script>alert('El usuario no esta registrado en la base dedatos');window.location='index.jsp';</script>");}base.desconectar();
%>////////////////////////////////////////////////////////////////////////////////////////
verifica_correo.jsp///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*,java.util.*,java.io.*" errorPage="" %><jsp:useBean id="proceso_base" class="com.wrow.database.Base"/><jsp:useBean id="meses" class="com.wrow.database.Revisa_Mail"/><%
String cadena="";String from="";String date="";String to="";String subject="";String mensaje="";String Id="";String dia="";String mes="";String anio="";String hora="";
String numeros_correo="";int h=0;int k=0;int y=0;int g=0;boolean bandera=false;Boolean ban_object;boolean ban=false;char c;FileInputStream leer=null;proceso_base.conectar();//leer= new FileInputStream("C:\\compartir\\juan");leer= new FileInputStream("/var/mail/juan");int size=leer.available();
for(int i=0;i<=size;i++){c=(char)leer.read();
86
if(c=='\n'){
if(cadena.indexOf("From ")==0){bandera=false;if(mensaje.length()>0){
ban_object=proceso_base.verificaconsultas("select * fromcorreo where Id='"+Id+"'");
if(ban_object.booleanValue()==false ){proceso_base.mantenimiento("insert into correo
values('"+Id+"','"+from+"','"+to+"','"+date+"','"+subject+"','"+mensaje+"',0)");}
}mensaje="";
}if(cadena.indexOf("Date:")==0){
date=cadena.substring("Date:".length(),cadena.length());date=date.substring(6,date.indexOf("-")-1);h=date.indexOf(" ");dia=date.substring(0,h);k=date.indexOf(" ",h+1);mes=date.substring(h+1,k);y=date.indexOf(" ",k+1);
anio=date.substring(k+1,y);hora=date.substring(y+1,date.length());
date=anio+"-"+meses.meses(mes)+"-"+dia+" "+hora;}if(cadena.indexOf("From: ")==0){from=cadena.substring("From: ".length(),cadena.length());
}if(cadena.indexOf("Message-Id:")==0){
Id=cadena.substring("Message-Id:".length()+2,cadena.length());Id=Id.substring(0,Id.indexOf("@")-1);
// System.out.println(Id);}
if(bandera==true){if(cadena.length()>0){
mensaje+=cadena;}
}
87
if(cadena.indexOf("Subject:")==0){subject=cadena.substring("Subject: ".length(),cadena.length());
}if(cadena.indexOf("To:")==0){g=cadena.indexOf("ec")+2;
to=cadena.substring("To: ".length()+1,g);bandera=true;
}cadena="";
}else{cadena+=c;}
}leer.close();numeros_correo=proceso_base.Consultas_objecto("select count(*) as
objecto from correo where estado=0");proceso_base.desconectar();if(Integer.parseInt(numeros_correo)>0){
%><table width="462" height="49" border="0">
<tr><td width="318" class="Estilo7"><strong><img
src="imagenes/enviarmail.jpg" width="66" height="28" align="middle" />Tiene(s)
<% out.print(numeros_correo); %> mensajes nuevos </strong></td><td width="134" class="Estilo7"><input type="button" name="button"
id="button" value="Revisar Correo"onclick="window.location='ver_correo.jsp'"/></td>
</tr></table><p>
<%}
%></p>
////////////////////////////////////////////////////////////////////////////////////////verificarespuesta.jsp
///////////////////////////////////////////////////////////////////////////////////////
<%@ page contentType="text/html; charset=utf-8" language="java"import="java.sql.*" errorPage="" %><jsp:useBean id="base" class="com.wrow.database.Base"/>
88
<%String respuesta=request.getParameter("respuesta");base.conectar();Boolean b=base.verificaconsultas("select * from usuarios whererespuesta='"+respuesta+"'");if(b.compareTo(new Boolean(true))==0){out.println("<script>window.location='cambiarrespuesta.jsp?respuesta="+respuesta+"';</script>");}else{
out.println("<script>alert('La respuestaincorrecta');window.location='jbienvenida.jsp';</script>");
}base.desconectar();%>
////////////////////////////////////////////////////////////////////////////////////////Script de la Base de Datos
///////////////////////////////////////////////////////////////////////////////////////
-- MySQL Administrator dump 1.4
--
-- ------------------------------------------------------
-- Server version 5.1.20-beta-community-nt-debug
/*!40101 SET
@OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET
@OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS
*/;
/*!40101 SET
@OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
89
/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS,
UNIQUE_CHECKS=0 */;
/*!40014 SET
@OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS,
FOREIGN_KEY_CHECKS=0 */;
/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE,
SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;
--
-- Create schema monitor
--
CREATE DATABASE IF NOT EXISTS monitor;
USE monitor;
--
-- Definition of table `correo`
--
DROP TABLE IF EXISTS `correo`;
CREATE TABLE `correo` (
`id` varchar(30) NOT NULL,
`from` varchar(45) NOT NULL,
`to` varchar(45) NOT NULL,
`date` datetime NOT NULL,
90
`subject` varchar(200) NOT NULL,
`mensaje` text NOT NULL,
`estado` int(11) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `correo`
--
/*!40000 ALTER TABLE `correo` DISABLE KEYS */;
INSERT INTO `correo` (`id`,`from`,`to`,`date`,`subject`,`mensaje`,`estado`)
VALUES
('200806191959.m5JJx0Rh01047','root
<[email protected]>','[email protected]','2008-07-19
14:59:00','Quiescent real server: 192.168.1.202:80 (192.168.200.2:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.202:80
(192.168.200.2:80) (Weight set to 0)Daemon-Status: running',1),
('200806192004.m5JK4hRl01056','root
<[email protected]>','[email protected]','2008-07-19
15:04:43','Quiescent real server: 192.168.1.201:80 (192.168.200.2:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.2:80) (Weight set to 0)Daemon-Status: running',1),
91
('200807051956.m65JuHWN00770','root
<[email protected]>','[email protected]','2008-07-05
14:56:17','hola','Subject: holakfjkdsjflk jdslkdlkf jdalkf',1),
('200807051958.m65JwGee00771','root
<[email protected]>','[email protected]','2008-07-05
14:58:16','prueba','Subject: pruebafs djhgdjgk gkj dg jfh dhgf hfdkjg dkj
gdfgjds hgj dkjg dkg dkjhfgjdhf kgd hkgdshgkf jgljfdg jlkfdjglkfdg',1),
('200807052001.m65K1ppO00778','root
<[email protected]>','[email protected]','2008-07-05
15:01:51','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052004.m65K4HWB00780','root
<[email protected]>','[email protected]','2008-07-05
15:04:17','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052005.m65K5XCq00781','root
<[email protected]>','[email protected]','2008-07-05
15:05:33','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
92
('200807052005.m65K5Ype00781','root
<[email protected]>','[email protected]','2008-07-05
15:05:34','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052020.m65KKKK600853','root
<[email protected]>','[email protected]','2008-07-05
15:20:20','Quiescent real server: 192.168.1.202:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.202:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052022.m65KMOOS00855','root
<[email protected]>','[email protected]','2008-07-05
15:22:24','Restored real server: 192.168.1.202:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.202:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052031.m65KV8VU00861','root
<[email protected]>','[email protected]','2008-07-05
15:31:08','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052038.m65KcaPG00868','root
<[email protected]>','[email protected]','2008-07-05
93
15:38:36','Quiescent real server: 192.168.1.201:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052042.m65Kgbxa00869','root
<[email protected]>','[email protected]','2008-07-05
15:42:37','Restored real server: 192.168.1.201:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052050.m65Ko9OM00881','root
<[email protected]>','[email protected]','2008-07-05
15:50:09','Quiescent real server: 192.168.1.202:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.202:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052052.m65KqCMu00882','root
<[email protected]>','[email protected]','2008-07-05
15:52:12','Restored real server: 192.168.1.202:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.202:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052103.m65L3VmL00895','root
<[email protected]>','[email protected]','2008-07-05
16:03:31','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
94
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052105.m65L5s7600899','root
<[email protected]>','[email protected]','2008-07-05
16:05:54','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052105.m65L5vUu00903','root
<[email protected]>','[email protected]','2008-07-05
16:05:57','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052106.m65L64Ni00903','root
<[email protected]>','[email protected]','2008-07-05
16:06:04','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052106.m65L6MUj00904','root
<[email protected]>','[email protected]','2008-07-05
16:06:22','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
95
('200807052106.m65L6QGl00904','root
<[email protected]>','[email protected]','2008-07-05
16:06:26','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052106.m65L6WoP00904','root
<[email protected]>','[email protected]','2008-07-05
16:06:32','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052106.m65L6aU800905','root
<[email protected]>','[email protected]','2008-07-05
16:06:36','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052107.m65L7FkA00908','root
<[email protected]>','[email protected]','2008-07-05
16:07:15','Quiescent real server: 192.168.1.201:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052107.m65L7JhY00908','root
<[email protected]>','[email protected]','2008-07-05
96
16:07:19','Restored real server: 192.168.1.201:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052107.m65L7Zqi00909','root
<[email protected]>','[email protected]','2008-07-05
16:07:35','Quiescent real server: 192.168.1.201:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052107.m65L7eZ800909','root
<[email protected]>','[email protected]','2008-07-05
16:07:40','Restored real server: 192.168.1.201:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052107.m65L7i2s00910','root
<[email protected]>','[email protected]','2008-07-05
16:07:44','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052107.m65L7nKg00910','root
<[email protected]>','[email protected]','2008-07-05
16:07:49','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
97
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052107.m65L7oG200910','root
<[email protected]>','[email protected]','2008-07-05
16:07:50','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052108.m65L83bZ00911','root
<[email protected]>','[email protected]','2008-07-05
16:08:03','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052108.m65L840T00911','root
<[email protected]>','[email protected]','2008-07-05
16:08:04','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052108.m65L8UGa00911','root
<[email protected]>','[email protected]','2008-07-05
16:08:30','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
98
('200807052108.m65L8Z9500912','root
<[email protected]>','[email protected]','2008-07-05
16:08:35','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052108.m65L8h4n00912','root
<[email protected]>','[email protected]','2008-07-05
16:08:43','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052108.m65L8ikx00912','root
<[email protected]>','[email protected]','2008-07-05
16:08:44','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052108.m65L8uDc00913','root
<[email protected]>','[email protected]','2008-07-05
16:08:56','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052108.m65L8vPb00913','root
<[email protected]>','[email protected]','2008-07-05
99
16:08:57','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052109.m65L91pA00913','root
<[email protected]>','[email protected]','2008-07-05
16:09:01','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052109.m65L93HN00913','root
<[email protected]>','[email protected]','2008-07-05
16:09:03','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052109.m65L9B0700914','root
<[email protected]>','[email protected]','2008-07-05
16:09:11','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052109.m65L9C2I00914','root
<[email protected]>','[email protected]','2008-07-05
16:09:12','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
100
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052109.m65L9Oar00914','root
<[email protected]>','[email protected]','2008-07-05
16:09:24','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052109.m65L9Ptb00915','root
<[email protected]>','[email protected]','2008-07-05
16:09:25','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052109.m65L9jUk00915','root
<[email protected]>','[email protected]','2008-07-05
16:09:45','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052109.m65L9lvX00915','root
<[email protected]>','[email protected]','2008-07-05
16:09:47','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
101
('200807052110.m65LA0qb00916','root
<[email protected]>','[email protected]','2008-07-05
16:10:00','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052110.m65LA2uD00917','root
<[email protected]>','[email protected]','2008-07-05
16:10:02','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052110.m65LARi400917','root
<[email protected]>','[email protected]','2008-07-05
16:10:27','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052110.m65LASZZ00917','root
<[email protected]>','[email protected]','2008-07-05
16:10:28','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052110.m65LAYj800918','root
<[email protected]>','[email protected]','2008-07-05
102
16:10:34','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052110.m65LAZBB00918','root
<[email protected]>','[email protected]','2008-07-05
16:10:35','Restored real server: 192.168.1.203:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052119.m65LJNjv00920','root
<[email protected]>','[email protected]','2008-07-05
16:19:23','Quiescent real server: 192.168.1.201:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052119.m65LJT9q00921','root
<[email protected]>','[email protected]','2008-07-05
16:19:29','Restored real server: 192.168.1.201:80 (192.168.200.1:80) (Weight
set to 1)','Log-Message: Restored real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 1)Daemon-Status: running',1),
('200807052122.m65LMjKc00922','root
<[email protected]>','[email protected]','2008-07-05
16:22:45','Quiescent real server: 192.168.1.203:80 (192.168.200.1:80)
103
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.203:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052123.m65LNBp000923','root
<[email protected]>','[email protected]','2008-07-05
16:23:11','Quiescent real server: 192.168.1.201:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.201:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1),
('200807052123.m65LNTuY00923','root
<[email protected]>','[email protected]','2008-07-05
16:23:29','Quiescent real server: 192.168.1.202:80 (192.168.200.1:80)
(Weight set to 0)','Log-Message: Quiescent real server: 192.168.1.202:80
(192.168.200.1:80) (Weight set to 0)Daemon-Status: running',1);
/*!40000 ALTER TABLE `correo` ENABLE KEYS */;
--
-- Definition of table `registros`
--
DROP TABLE IF EXISTS `registros`;
CREATE TABLE `registros` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`servidor` varchar(20) NOT NULL,
`fecha` datetime NOT NULL,
PRIMARY KEY (`id`)
104
) ENGINE=MyISAM AUTO_INCREMENT=19 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `registros`
--
/*!40000 ALTER TABLE `registros` DISABLE KEYS */;
INSERT INTO `registros` (`id`,`servidor`,`fecha`) VALUES
(1,'192.168.1.201','2008-06-01 08:46:11'),
(2,'192.168.1.201','2008-06-01 08:50:11'),
(3,'192.168.1.201','2008-06-01 08:55:11'),
(4,'192.168.1.201','2008-06-01 09:06:11'),
(5,'192.168.1.201','2008-06-01 09:10:11'),
(6,'192.168.1.201','2008-06-01 09:15:11'),
(7,'192.168.1.201','2008-06-01 09:18:11'),
(8,'192.168.1.201','2008-06-01 09:20:11'),
(9,'192.168.1.201','2008-06-01 09:25:11'),
(10,'192.168.1.201','2008-06-02 08:10:11'),
(11,'192.168.1.201','2008-06-02 08:20:11'),
(12,'192.168.1.201','2008-06-02 08:35:11'),
(13,'192.168.1.201','2008-06-02 09:16:11'),
(14,'192.168.1.201','2008-06-02 09:13:11'),
(15,'192.168.1.201','2008-06-02 09:35:11'),
(16,'192.168.1.201','2008-06-02 09:38:11'),
105
(17,'192.168.1.201','2008-06-02 09:40:11'),
(18,'192.168.1.201','2008-06-02 09:45:11');
/*!40000 ALTER TABLE `registros` ENABLE KEYS */;
--
-- Definition of table `respaldo_archivos`
--
DROP TABLE IF EXISTS `respaldo_archivos`;
CREATE TABLE `respaldo_archivos` (
`archivo` varchar(40) DEFAULT NULL,
`contenido` text
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `respaldo_archivos`
--
/*!40000 ALTER TABLE `respaldo_archivos` DISABLE KEYS */;
/*!40000 ALTER TABLE `respaldo_archivos` ENABLE KEYS */;
--
106
-- Definition of table `servidor`
--
DROP TABLE IF EXISTS `servidor`;
CREATE TABLE `servidor` (
`ip` varchar(15) NOT NULL,
`nombre` varchar(15) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
--
-- Dumping data for table `servidor`
--
/*!40000 ALTER TABLE `servidor` DISABLE KEYS */;
INSERT INTO `servidor` (`ip`,`nombre`) VALUES
('192.168.1.203','servidor 3'),
('192.168.1.201','Servidor 2');
/*!40000 ALTER TABLE `servidor` ENABLE KEYS */;
--
-- Definition of table `usuarios`
107
--
DROP TABLE IF EXISTS `usuarios`;
CREATE TABLE `usuarios` (
`codigo` int(10) unsigned NOT NULL AUTO_INCREMENT,
`usuario` varchar(45) NOT NULL,
`clave` varchar(45) NOT NULL,
`reclave` varchar(45) NOT NULL,
`respuesta` varchar(45) NOT NULL,
`correo` varchar(45) NOT NULL,
PRIMARY KEY (`codigo`)
) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=latin1;
--
-- Dumping data for table `usuarios`
--
/*!40000 ALTER TABLE `usuarios` DISABLE KEYS */;
INSERT INTO `usuarios`
(`codigo`,`usuario`,`clave`,`reclave`,`respuesta`,`correo`) VALUES
108
(1,'admin','21232f297a57a5a743894a0e4a801fc3','admin','hola','juan@balanc
eo.edu.ec');
/*!40000 ALTER TABLE `usuarios` ENABLE KEYS */;
--
-- Definition of procedure `guarda_servidor`
--
DROP PROCEDURE IF EXISTS `guarda_servidor`;
DELIMITER $$
/*!50003 SET @TEMP_SQL_MODE=@@SQL_MODE,
SQL_MODE='STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER' */ $$
CREATE DEFINER=`root`@`localhost` PROCEDURE
`guarda_servidor`(CODIGO VARCHAR(50))
BEGIN
END $$
/*!50003 SET SESSION SQL_MODE=@TEMP_SQL_MODE */ $$
DELIMITER ;
/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;
109
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS
*/;
/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;
/*!40101 SET
CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET
CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET
COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;
/*!40101 SET
CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
1.4. ASIGNACION DE PARAMETROS DE RED
1.4.1 Nombre del anfitrión (HOSTNAME)
Debe modificarse con un editor de textos el fichero /etc/hosts, y debe
verificarse que esté diferenciado el eco o retorno del sistema del nombre
del sistema, el cual deberá estar asociado a una de las direcciones IP,
específicamente la que esté asociada a dicho nombre en el servidor de
nombres de dominio o DNS si se cuenta con uno en la red local. Ejemplo:
127.0.0.1 localhost.localdomain localhost
192.168.1.202 serverweb1.balanceo.edu.ec
Se debe establecer un nombre para el sistema. Éste deberá ser un
nombre de dominio completamente resuelto por un servidor de nombre de
110
dominio (DNS) o bien, en el caso de sistemas sin conexión a red o
sistemas caseros, sea resuelto localmente en /etc/hosts.
De tal modo, el nombre del anfitrión (hostname) del sistema se definirá
dentro del fichero /etc/sysconfig/network del siguiente modo:
NETWORKING=yes
HOSTNAME= serverweb1.balanceo.edu.ec
1.4.2. Dirección IP, máscara de subred y puerta de enlace
Debe modificarse con cualquier editor de textos y verificar que sus
parámetros de red sean los correctos, el fichero localizado en la ruta
/etc/sysconfig/network-scripts/ifcfg-eth0. Ejemplo:
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.1.202
NETMASK=255.255.255.0
GATEWAY=192.168.1.1
Los parámetros anteriores son proporcionados por el administrador de la
red local en donde se localice la máquina que está siendo configurada, o
bien definidos de acuerdo a una planificación predefinida.
El administrador de la red deberá proporcionar una dirección IP disponible
(IPADDR) y una máscara de la sub-red (NETMASK).
111
1.5. Servidores de nombres
Debe modificarse con un editor de textos /etc/resolv.conf y deben
establecerse en éste los servidores de resolución de nombres de dominio
(DNS). Esto se realiza en los servidores reales Ejemplo:
nameserver 192.168.1.7
nameserver 192.168.1.6
1.5.1 Función de reenvío de paquetes para IP versión 4
Si se tiene planeado implementar un NAT o DNAT, se debe habilitar el
reenvío de paquetes para IP versión 4.
Esto se realiza en el fichero /etc/sysctl.conf cambiando:
#net.ipv4.ip_forward = 0 ( POR EL VALOR )
#net.ipv4.ip_forward = 1:
1.5.2. Comprobaciones
Después de haber configurado todos los parámetros de red deseados,
sólo deberá ser reiniciado el servicio de red, ejecutando lo siguiente:
#service network restart
Basta solamente comprobar si hay realmente conectividad. Puede
ejecutarse el mandato ping hacia cualquier dirección de la red local para
tal fin.
#ping 192.168.1.7
112
Las interfaces y la información de las mismas se pueden examinar
utilizando:
# ifconfig
Los encaminamientos se pueden comprobar ejecutando:
# route -n
Para comprobar si hay resolución de nombres, se puede realizar una
consulta hacia los DNS definidos para el sistema utilizando:
#host algún.dominio
#nslookup servidorbd.balanceo.edu.ec
1.6. Iniciar servicios y añadirlo al arranque del sistema
Para citar un ejemplo si se desea iniciar HTTPD por primera vez en los
servidores reales cuando se realice lo siguiente:
#service httpd start
Si va a reiniciar el servicio, realice lo siguiente:
#service httpd restart
Para que HTTPD inicie automáticamente cada vez que reinicie o se
prenda el servidor sólo ejecute el siguiente comando:
#chkconfig httpd on
113
1.7. Instalaciones de Servicios utilizados
1.7.1. Instalar y configurar MySQL™.
Acerca de MySQL™.
MySQL™ es un DBMS (bataBase Management System) o sistema de
gestión de base de datos SQL (Structured Query Language o Lenguaje
Estructurado de Consulta) multiusuario y multihilo con licencia
GNU/GPL.
MySQL™ es propiedad y patrocinio de MySQL AB, compañía fundada por
David Axmark, Allan Larsson y Michael Widenius, con base de
operaciones en Suecia, la cual posee los derechos de autor de casi todo
el código que lo integra. MySQL AB desarrolla y mantiene el sistema
vendiendo servicios de soporte y otros valores agregados, así como
licenciamiento propietario para los desarrollos de equipamiento lógico que
requieren mantener cerrado su código.
MySQL™ es actualmente el servidor de base de datos más popular para
los desarrollos a través de la red mundial, con una estimación de más de
diez millones de instalaciones. Es muy rápido y sólido.
1.8.1. Equipamiento lógico necesario.
1.8.1.1. Instalación a través de yum.
Si utiliza CentOS 5 solo se necesita realizar lo siguiente para instalar o
actualizar el equipamiento lógico necesario:
114
#yum -y install mysql mysql-server
1.8.1.2 Procedimientos
1.8.1.3 SELinux y el servicio mysqld
Si utiliza CentOS 5, utilice la herramienta system-config-securitylevel
(desde el modo gráfico), seleccione la pestaña de (SELinux), y habilite la
casilla con la leyenda Disable SELinux protection for mysqld daemon en
la sección de SELinux Service Protection. De otro modo, el servicio
mysqld no podrá iniciar.
Gráfico 1 – Configuración de SELinux
system-config-securitylevel.
115
1.8.1.4. Iniciar, detener y reiniciar el servicio mysqld.
Para iniciar por primera vez el servicio mysqld y generar la base de datos
inicial (mysql), utilice:
#service mysqld start
Para reiniciar el servicio mysqld, utilice:
#service mysqld restart
Para detener el servicio mysqld, utilice:
#service mysqld stop
1.8.1.5. Agregar el servicio mysqld al arranque del sistema.
Para hacer que el servicio de mysqld esté activo con el siguiente inicio del
sistema, en todos los niveles de corrida (2, 3, 4, y 5), se utiliza lo
siguiente:
# chkconfig mysqld on
1.8.1.6. Asignación de clave de acceso al usuario root.
El usuario root en MySQL%trade;, no tiene asignada clave de acceso
alguna después de iniciado el servicio por primera vez. Por razones de
seguridad, es muy importante asignar una clave de acceso.
116
1.8.1.6.1. Método cortó.
La forma más simple de asignar una clave de acceso al usuario root de
MySQL™ solo requiere de un único mandato, descrito a continuación.
#mysqladmin -u root password nueva-clave-de-acceso
En adelante, será necesario añadir la opción -p a cualquier sentencia de
línea de mandatos para, mysqladmin y mysqldump para ingresar la clave
de acceso del usuario root y poder, de esta forma, realizar diversas tareas
administrativas.
1.8.2 Instalar y configurar básica de Apache.
Acerca del protocolo HTTP.
HTTP (Hypertext Transfer Protocol, o Protocolo de Transferencia de
Hipertext), es el método utilizado para transferir o transportar información
en la Red Mundial (WWW, World Wide Web). Su propósito original fue el
proveer una forma de publicar y recuperar documentos HTML.
El desarrollo del protocolo fue coordinado por World Wide Web
Consortium y la IETF (Internet Engineering Task Force, o Fuerza de
Trabajo en Ingeniería de Internet), culminando con la publicación de
varios RFC (Request For Comments), de entre los que destaca el RFC
2616, mismo que define la versión 1.1 del protocolo, que es el utilizado
hoy en día.
117
HTTP es un protocolo de solicitud y respuesta a través de TCP, entre
agentes de usuario (Navegador, motor de índice y otras herramientas) y
servidores, regularmente utilizando el puerto 80. Entre la comunicación
entre éstos puede intervenir como servidores Intermediarios (Proxies),
puertas de enlace y túneles.
URL: http://tools.ietf.org/html/rfc2616
1.8.2.1. Acerca de Apache.
Apache es un servidor HTTP, de código abierto y licenciamiento libre, que
funciona en Linux, sistemas operativos derivados de Unix™, Windows,
Novell Netware y otras plataformas. Ha desempeñado un papel muy
importante en el crecimiento de la red mundial, y continua siendo el
servidor HTTP más utilizado, siendo además el servidor de facto contra el
cual se realizan las pruebas comparativas y de desempeño para otros
productos competidores. Apache es desarrollado y mantenido por una
comunidad de desarrolladores auspiciada por Apache Software
Foundation.
URL: http://www.apache.org/
118
1.8.2.2. Equipamiento lógico necesario.
1.8.2.2.1. Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux , solo basta utilizar
lo siguiente:
#yum -y install httpd
Si se desea que Apache incluya soporte para PHP/MySQL, Perl, Python y
SSL/TLS, solo bastará ejecutar:
#yum -y install php php-mysql mod_perl mod_python mod_ssl
1.8.2.3. Iniciar servicio y añadir el servicio al arranque del sistema.
Apache es un servicio que por fortuna solo es necesario instalar e iniciar.
No requiere modificaciones adicionales para su funcionamiento básico.
Para añadir el servicio a los servicios que inician junto con el sistema,
solo basta ejecuta:
#chkconfig httpd on
Para iniciar el servicio por primera vez, solo basta utilizar:
#service httpd start
Para reiniciar el servicio, considerando que se interrumpirán todas las
conexiones establecidas en ese momento, solo basta utilizar:
#service httpd restart
119
Si el servicio ya está trabajando, también puede utilizar reload a fin de
que Apache vuelva a leer y cargar la configuración sin interrumpir el
servicio, y, por ende, las conexiones establecidas.
#service httpd reload
Para detener el servicio, solo basta utilizar:
#service httpd stop
1.8.2.4. Procedimientos.
1.8.2.4.1. SELinux y Apache.
Si utiliza alguna distribución con núcleo 2.6 basada sobre Red Hat™
Enterprise Linux 5.0, como serían CentOS 5.0 o White Box Enterprise
Linux 5.0 en adelante, éstas incluyen SELinux que añade seguridad
adicional al a Apache, sin embargo algunas opciones impedirán utilizar
ciertas funciones en Apache, como directorios virtuales. Ejecute system-
config-securitylevel desde el modo gráfico y active la casilla que dice
«Disable SELinux Protection for httpd daemon» y haga clic en el botón
de«Aceptar». Si no tiene planeado utilizar directorios virtuales, puede
dejar desactivada la casilla y aprovechar toda la seguridad adicional que
brinda SELinux.
120
Gráfico 2 Configuración de SELinux
system-config-securitylevel.
1.8.2.5. Ficheros de configuración.
Cualquier ajuste que se requiera realizar, ya sea para configurar sitios de
Red virtuales u otra funcionalidad adicional, se puede realizar sin tocar el
fichero principal de configuración, utilizando cualquier fichero con
extensión *.conf dentro del directorio /etc/httpd/conf.d/.
1.8.2.6. Configuración de Sitios de Red en Apache.
Puede generarse cualquier fichero con extensión *.conf dentro del
directorio /etc/httpd/conf.d/ de Apache® 2.0.x. Puede incluirse contenido
como el siguiente:
121
# Definición del Sitio de Red principal
Servidores Balanceadores
NameVirtualHost 192.168.1.7
<VirtualHost 192.168.200.1>
ServerAdmin [email protected]
DocumentRoot /var/www/html/basculaweb /index.html
ServerName www.basculaweb.edu.ec
</VirtualHost>
NameVirtualHost 192.168.1.6
<VirtualHost 192.168.200.1>
ServerAdmin [email protected]
DocumentRoot /var/www/html/basculaweb /index.html
ServerName www.basculaweb.edu.ec
</VirtualHost>
Servidores reales
NameVirtualHost 192.168.1.202
<VirtualHost 192.168.200.1>
ServerAdmin [email protected]
122
DocumentRoot /var/www/html/sistemaweb/index.html
ServerName www.balanceo.edu.ec
</VirtualHost>
NameVirtualHost 192.168.1.203
<VirtualHost 192.168.200.1>
ServerAdmin [email protected]
DocumentRoot /var/www/html/sistemaweb/index.html
ServerName www.balanceo.edu.ec
</VirtualHost>
NameVirtualHost 192.168.1.201
<VirtualHost 192.168.200.1>
ServerAdmin [email protected]
DocumentRoot /var/www/html/sistemaweb/index.html
ServerName www.balanceo.edu.ec
</VirtualHost>
1.8.3. Instalar y configurar servidor de nombres de dominio (DNS)
1.8.3.1. Introducción.
Bind (Berkeley Internet Name Domain), BIND (acrónimo de Berkeley
Internet Name Domain) es una implementación del protocolo DNS y
123
provee una implementación libre de los principales componentes del
Sistema de Nombres de Dominio, los cuales incluyen:
Un servidor de sistema de nombres de dominio (named).
Una biblioteca resolutoria de sistema de nombres de dominio.
Herramientas para verificar la operación adecuada del DNS (bind-
utils).
El Servidor DNS BIND es ampliamente utilizado en la Internet (99% de los
servidores DNS) proporcionando una robusta y estable solución. DNS
(Domain Name System). DNS (acrónimo de Domain Name System) es
una base de datos distribuida y jerárquica que almacena la información
necesaria para los nombre de dominio. Sus usos principales son la
asignación de nombres de dominio a direcciones IP y la localización de
los servidores de correo electrónico correspondientes para cada dominio.
El DNS nació de la necesidad de facilitar a los seres humanos el acceso
hacia los servidores disponibles a través de Internet permitiendo hacerlo
por un nombre, algo más fácil de recordar que una dirección IP.
Los Servidores DNS utilizan TCP y UDP en el puerto 53 para responder
las consultas. Casi todas las consultas consisten de una sola solicitud
UDP desde un Cliente DNS seguida por una sola respuesta UDP del
servidor. TCP interviene cuando el tamaño de los datos de la respuesta
excede los 512 bytes, tal como ocurre con tareas como transferencia de
zonas.
124
1.8.3.2. Paquete. Descripción.
bind Incluye el Servidor DNS (named) y herramientas para verificar su
funcionamiento.
bind-libs Biblioteca compartida que consiste en rutinas para
aplicaciones para utilizarse cuando se interactúe con Servidores
DNS.
bind-chroot Contiene un árbol de ficheros que puede ser utilizado
como una jaula chroot para named añadiendo seguridad adicional al
servicio.
bind-utils Colección de herramientas para consultar Servidores DNS.
Cachingnameserver Ficheros de configuración que harán que el
servidor DNS actúe como un caché para el servidor de nombres.
1.8.3.3. Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux 5, o versiones
posteriores, se puede instalar utilizando lo siguiente:
#yum -y install bind bind-chroot bind-utils caching-nameserver
1.8.3.4. Preparativos.
Idealmente se deben definir primero los siguientes datos:
Dominio a resolver.
125
Servidor de nombres principal (SOA). Éste debe ser un nombre que ya
esté plenamente resuelto, y debe ser un FQDN (Fully Qualified
Domain Name).
Lista de todos los servidores de nombres (NS) que se utilizarán para
efectos de redundancia. Éstos deben ser nombres que ya estén
plenamente resueltos, y deben ser además FQDN (Fully Qualified
Domain Name).
Cuenta de correo del administrador responsable de esta zona. Dicha
cuenta debe existir y no debe pertenecer a la misma zona que se está
tratando de resolver.
Al menos un servidor de correo (MX), con un registro A, nunca
CNAME.
IP predeterminada del dominio.
Sub-dominios dentro del dominio (www, mail, ftp, ns, etc.) y las
direcciones IP que estarán asociadas a estos
1.8.3.5. Tipo de Registro. Descripción.
A (Address)
Registro de dirección que resuelve un nombre de un anfitrión hacia una
dirección IPv4 de 32 bits.
CNAME (Canonical Name)
126
Registro de nombre canónico que hace que un nombre sea alias de otro.
Los dominios con alias obtiene los sub-dominios y registros DNS del
dominio original.
MX (Mail Exchanger)
Registro de servidor de correo que sirve para definir una lista de
servidores de correo para un dominio, así como la prioridad entre éstos.
PTR (Pointer)
Registro de apuntador que resuelve direcciones IPv4 hacia el nombre
anfitriones. Es decir, hace lo contrario al registro A. Se utiliza en zonas de
Resolución Inversa.
NS (Name Server) Registro de servidor de nombres que sirve para definir
una lista de servidores de nombres con autoridad para un dominio.
SOA (Start of Authority) Registro de inicio de autoridad que especifica el
Servidor DNS Maestro (o Primario) que proporcionará la información con
autoridad acerca de un dominio de Internet, dirección de correo
electrónico del administrador, número de serie del dominio y parámetros
de tiempo para la zona.
127
SRV (Service)
Registro de servicios que especifica información acerca de servicios
disponibles a través del dominio. Protocolos como SIP (Session Initiation
Protocol) y XMPP (Extensible Messaging and Presence Protocol) suelen
requerir registros SRV en la zona para proporcionar información a los
clientes.
TXT (Text)
Registro de texto que permite al administrador insertar texto
arbitrariamente en un registro DNS. Este tipo de registro es muy utilizado
por los servidores de listas negras DNSBL (DNS-based Blackhole List)
para la filtración de Spam. Otro ejemplo de uso son las VPN, donde suele
requerirse un registro TXT para definir una llave que será utilizada por los
clientes.
1.8.3.6. Zonas de Reenvío.
Devuelven direcciones IP para las búsquedas hechas para nombres
FQDN (Fully Qualified Domain Name). En el caso de dominios públicos, la
responsabilidad de que exista una Zona de Autoridad para cada Zona
de Reenvío corresponde a la autoridad misma del dominio, es decir, y por
lo general, quien esté registrado como autoridad del dominio tras
consultar una base de datos WHOIS. Quienes compran dominios a través
128
de un NIC (por ejemplo ejemplo: www.nic.mx) son quienes se hacen
cargo de las Zonas de Reenvío, ya sea a través de su propio Servidor
DNS o bien a través de los Servidores DNS de su ISP. Salvo que se trate
de un dominio para uso en una red local, todo dominio debe ser primero
tramitado con un NIC como requisito para tener derecho legal a utilizarlo y
poder propagarlo a través de Internet.
1.8.3.7. Zonas de Resolución Inversa.
Devuelven nombres FQDN (Fully Qualified Domain Name) para las
búsquedas hechas para direcciones IP. En el caso de segmentos de red
públicos, la responsabilidad de que exista de que exista una Zona de
Autoridad para cada Zona de Resolución Inversa corresponde a la
autoridad misma del segmento, es decir, y por lo general, quien esté
registrado como autoridad del segmento tras consultar una base de datos
WHOIS. Los grandes ISP, y en algunos casos algunas empresas, son
quienes se hacen cargo de las Zonas de Resolución Inversa.
1.8.3.8. Equipamiento lógico necesario.
bind Incluye el Servidor DNS (named) y herramientas para verificar
su funcionamiento.
129
bind-libs Biblioteca compartida que consiste en rutinas para
aplicaciones para utilizarse cuando se interactúe con Servidores
DNS.
bind-chroot Contiene un árbol de ficheros que puede ser utilizado
como una jaula chroot para named añadiendo seguridad adicional al
servicio.
bind-utils Colección de herramientas para consultar Servidores DNS.
cachingnameserver Ficheros de configuración que harán que el
Servidor DNS actúe como un caché para el servidor de nombres.
1.8.3.9. Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux 5, o versiones
posteriores, se puede instalar utilizando lo siguiente:
yum -y install bind bind-chroot bind-utils caching-nameserver
1.8.3.10. Creación de los ficheros de zona.
Los siguientes corresponderían a los contenidos para los ficheros de zona
requeridos para la red local y por el NIC con el que se haya registrado el
dominio. Note por favor que en las zonas de reenvío siempre se
especifica al menos un Mail Exchanger (MX) y que se utilizan
tabuladores (tecla TAB) en lugar de espacio. Solo necesitará sustituir
130
nombres y direcciones IP, y quizá añadir nuevos registros para
complementar su red local.
1.8.3.11. Zona de reenvío red local
/var/named/chroot/var/named/balanceo.edu.ec.zone
$TTL 86400@ IN SOA dns.balanceo.edu.ec. juan.balanceo.edu.ec. (
2007041701; número de serie28800 ; tiempo de refresco7200 ; tiempo entre reintentos de consulta604800 ; tiempo tras el cual expira la zona86400 ; tiempo total de vida)
@ IN NS dns@ IN MX 10 mail@ IN A 192.168.1.1Intranet IN A 192.168.1.1Serverbd IN A 192.168.1.6Servidor2 IN A 192.168.1.7ServidorBD IN A 192.168.1.201Servidorweb1 IN A 192.168.1.202Servidorweb2 IN A 192.168.1.203www.balanceo.edu.ec IN CNAME intranetmail IN A 192.168.1.1dns IN CNAME intranet
1.8.3.12. Zona de reenvío red wan
/var/named/chroot/var/named/balanceo.com.zone
Suponiendo que hipotéticamente se es la autoridad para el dominio
«balanceo.com», se puede crear una Zona de Reenvio con un
contenido similar al siguiente:
131
$TTL 86400@ IN SOA fqdn.balanceo.com. juan.balanceo.edu.ec. (
2007041701; número de serie28800 ; tiempo de refresco7200 ; tiempo entre reintentos de consulta604800 ; tiempo tras el cual expira la zona86400 ; tiempo total de vida)
@ IN NS dns@ IN MX 10 mail@ IN A 192.168.200.1wan IN A 192.168.200.1Serverbd IN A 192.168.200.2Servidor2 IN A 192.168.200.3www.balanceo.com IN CNAME wandns IN CNAME wan
1.8.3.13. Zona de resolución inversa red local (balanceo.edu.ec)
/var/named/chroot/var/named/1.168.192.in-addr.arpa.zone
$TTL 86400
@ IN SOA dns.balanceo.edu.ec. juan.balanceo.edu.ec. (2007041701 ; número de serie28800 ; tiempo de refresco7200 ; tiempo entre reintentos de consulta604800 ; tiempo tras el cual expira la zona86400 ; tiempo total de vida)
@ IN NS dns.balanceo.edu.ec.1 IN PTR intranet.balanceo.edu.ec.6 IN PTR serverbd.balanceo.edu.ec.7 IN PTR servidor2.balanceo.edu.ec.201 IN PTR servidorBD.balanceo.edu.ec.202 IN PTR servidorweb1.balanceo.edu.ec.203 IN PTR servidorweb2.balanceo.edu.ec.
132
1.8.3.14. Zona de resolución inversa del dominio (balanceo.com)
/var/named/chroot/var/named/200.168.192.in-addr.arpa.zone
Suponiendo que hipotéticamente se es la autoridad para el segmento de
red 192.168.200.0/24, se puede crear una Zona de Resolución Inversa
con un contenido similar al siguiente:
$TTL 86400@ IN SOA fqdn.balanceo.com. juan.balanceo.edu.ec. (
2007041701 ; número de serie28800 ; tiempo de refresco7200 ; tiempo entre reintentos de consulta604800 ; tiempo tras el cual expira la zona86400 ; tiempo total de vida)
@ IN NS dns.balanceo.com.1 IN PTR wan.balanceo.com.2 IN PTR serverbd.balanceo.com.3 IN PTR servidor2.balanceo.com.
Cada vez que haga algún cambio en algún fichero de zona, deberá
cambiar el número de serie (serial) a fin de que tomen efecto los cambios
de inmediato cuando se reinicie el servicio named, ya que de otro modo
tendría que reiniciar el equipo, algo poco conveniente.
1.8.3.15. Configuración de parámetros en el fichero
/etc/named.conf
En la siguiente configuración de ejemplo, se pretende lograr lo siguiente:
133
Red Local: cualquier tipo de consulta hacia dominios externos y
locales (es decir,www.yahoo.com, www.google.com, alcancelibre.org,
además de balanceo.com).
Resto del mundo: solo puede hacer consultas para la zona de
balanceo.com De este modo se impide que haya consultas recursivas
y con esto impedir la posibilidad de sufrir/participar de un ataque
DDoS.
acl "redlocal" {127.0.0.1;192.168.200.0/24;
};
options {directory "/var/named";dump-file "/var/named/data/cache_dump.db";statistics-file "/var/named/data/named_stats.txt";forwarders { 192.168.0.1; };forward first;
allow-query {redlocal;192.168.200.2;192.168.200.3;
};
allow-recursion { 127.0.0.1; 192.168.200.0/24; };};
zone "." IN {type hint;file "named.ca";};
zone "balanceo.edu.ec" {type master;
134
file "balanceo.edu.ec.zone";allow-update { none; };allow-query { 192.168.1.0/24; };};
zone "1.168.192.in-addr.arpa" {type master;file "1.168.192.in-addr.arpa.zone";allow-update { none; };};
zone "balanceo.com" {type master;file "balanceo.com.zone";allow-update { none; };allow-query { 192.168.200.0/24; };};
zone "200.168.192.in-addr.arpa" {type master;file "200.168.192.in-addr.arpa.zone";allow-update { none; };};
1.8.3.15.1 Iniciar servicio y añadir el servicio al arranque del
sistema.
Named un servicio que necesita una configuración para su
funcionamiento Para añadir el servicio a los servicios que inician junto con
el sistema, solo basta ejecuta:
chkconfig named on
Para iniciar el servicio por primera vez, solo basta utilizar:
service named start
Para reiniciar el servicio, considerando que se interrumpirán todas las
conexiones establecidas en ese momento, solo basta utilizar:
135
service named restart
Si el servicio ya está trabajando, también puede utilizar reload a fin de
que Apache vuelva a leer y cargar la configuración sin interrumpir el
servicio, y, por ende, las conexiones establecidas.
service named reload
Para detener el servicio, solo basta utilizar
service named stop
1.8.4. Instalar y configurar un servidor de mail (POSTFIX)
1.8.4.1. Equipamiento lógico necesario.
1.8.4.1.1 Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux 5, o versiones
posteriores, se puede instalar utilizando lo siguiente:
yum -y install postfix
También vamos a instalar el soporte que tiene postfix para mysql:
yum –y install postfix-mysql
1.8.4.2. Configuración de parámetros en el fichero
/etc/postfix/main.cf
Una vez instalado vamos al directorio /etc/postfix y con nuestro editor
favorito, abrimos el archivo principal main.cf el cual esta estupendamente
136
comentado ha continuación indicaremos la configuración de los
parámetros importantes.
queue_dierctory = /var/spool/postfixcommand_dierctory = /usr/sbindaemo_directory = /usr/lib/postfixmail_ower = postfixmyhostname = serverbd.balanceo.edu.ecmydomain = balanceo.edu.ecmyorigin = $myhostnamemydestination = juan.balanceo.edu.ec,localhost,localhost.balanceo.edu.ecmynetworks = 192.168.1.0/24
La siguiente opción nos permitirá elegir en que formato postfix va ha
guardar los mensajes en el buzón de cada usuario. SI elegimos Mailbox,
los mensajes se guardaran en un único archivo en el cual se van
encolando los mensajes según van llegando al buzón.
El formato Maildir, consiste en un directorio en el que hay tres
subdirectorios en el que se van guardando los mensajes en diferentes
archivos.
home_mailbox = Maildir/mail_spool_directory = /var/spool/mail/relay_domains = mynetworkssmtpd_banner = $myhostname ESMTP $mail_namelocal_destinations_concurrency_limit = 2default_destinations_concurrency_limit = 100default_destinations_recipient_limit = 20debug_peer_level = 2debugger_comand = PAHT = /usr/bin:/usr/X11R6/bin xxgdb $daemon_directory/6process_name $ process_id & sleep 5alias_maps = hash: /etc/aliasesalias_database = hash: /etc/aliases
137
1.8.4.3. Iniciar servicio y añadir el servicio al arranque del sistema.
Postfix un servicio que necesita una configuración para su
funcionamiento Para añadir el servicio a los servicios que inician junto con
el sistema, solo basta ejecuta:
chkconfig postfix on
Para iniciar el servicio por primera vez, solo basta utilizar:
service postfix start
Para reiniciar el servicio, considerando que se interrumpirán todas las
conexiones establecidas en ese momento, solo basta utilizar:
service postfix restart
Si el servicio ya está trabajando, también puede utilizar reload a fin de
que Apache vuelva a leer y cargar la configuración sin interrumpir el
servicio, y, por ende, las conexiones establecidas.
service postfix reload
Para detener el servicio, solo basta utilizar
service postfix stop
1.8.5. Instalar y configurar cluster servidor
(heartbeat y ldirectord)
1.8.5.1. Introduccion
Este trabajo explora las distintas posibilidades que nos ofrece hoy en día
el mundo del Software Libre para implantar servidores de alta
disponibilidad en el terreno empresarial y orientados principalmente al
138
servicio en Internet (servidores HTTP, SMTP, POP, etc), basados en
servidores (clustering) con bajo el Sistema Operativo GNU/Linux.
1.8.5.2. Introducción al clustering de servidores
En el verano de 1994 Thomas Sterling y Don Becker, trabajando para el
CESDIS (Center of Excellence in Space Data and Informarion Sciencies)
bajo el patrocinio del Proyecto de las Ciencias de la Tierra y el Espacio
(ESS) de la NASA, construyeron un Cluster de Computadoras que
consistía en 16 procesadores DX4 conectados por una red Ethernet a
10Mbps. Ellos llamaron a su máquina Beowulf. La máquina fue un éxito
inmediato y su idea de proporcionar sistemasbasados en COTS (equipos
de sobremesa) para satisfacer requisitos de cómputo específicos
sepropagó rápidamente a través de la NASA y en las comunidades
académicas y de investigación. El esfuerzo del desarrollo para esta
primera máquina creció rápidamente en lo que ahora llamamos el
Proyecto Beowulf.
Este Beowulf construido en la NASA en 1994 fue el primer cluster de la
historia, y su finalidad era el cálculo masivo de datos. Desde entonces, la
tecnología de clusters se ha desarrollado enormemente, apareciendo
gran cantidad de estudios, teorías, programas y arquitecturas implantando
clusters para diversos fines.
139
En general, podríamos decir que hay dos tipos de clusters, atendiendo a
su finalidad:
Clusters para el procesamiento masivo de datos
Clusters de alta disponibilidad
Usted necesita configurar tres archivos para hacer un buen heartbeat,
todos ellos se colocarán en este directorio “/etc/ha.d/”.
Ellos son:
ha.cf el archivo de la configuración Principal
haresources Recurso configuración archivo
Información de Autenticación de authkeys
Los dos primeros pueden ser leídos por todos, pero el archivo del
authkeys debe tener permiso 600.
Las buenas noticias son que versiones de la muestra de estos archivos
pueden encontrarse en el directorio de la documentación.
Si usted instala heartbeat con paquetes rpm entonces el siguiente
comando le mostrará si se encuentran instalados en su sistema:
#rpm -q heartbeat -d
140
1.8.5.3. Equipamiento lógico necesario.
1.8.5.3.1. Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux 5, o versiones
posteriores, se puede instalar siempre y cuando tenga conexión ha
Internet utilizando lo siguiente:
#yum install heartbeat
Ahora que ya se instalaron los paquetes de heartbeat se procederá ha
realizar la instalación de los siguientes paquetes:
Heratbeat - 2.1.3-3.el5.centos.i386.rpmHeratbeat - devel- 2.1.3-3.el5.centos.i386.rpmHeratbeat -gui - 2.1.3-3.el5.centos.i386.rpmHeratbeat - ldirectord - 2.1.3-3.el5.centos.i386.rpmHeratbeat - pils - 2.1.3-3.el5.centos.i386.rpmHeratbeat - stonith - 2.1.3-3.el5.centos.i386.rpm
Una ves descargado tendrá que instalar cada paquete el ldirectord tiene
dependencias las cuales se mostrara ha continuación
#yum install heartbeat - ldirectord - 2.1.3-3.el5.centos.i386.rpm
Perl - Authen-Radius - 0.13-1.el5.centos extrasPerl - Data-HexDump - 0.02-1.el5.centos extrasPerl - Mail-Pop3Client - 2.17-1.el5.centos extrasPerl - MailTools - 1.77-1.el5.centos extrasPerl - Net-IMAP-Simple - 1.17-1.el5.centos extrasPerl - Net-IMAP-Simple- SSL - 1.3-1.el5.centos extrasPerl - TimeDate - 1:1.16-el5.centos extras
A continuación se mostrara todo el proceso de la instalación vía
gráficamente en la cual se indicaran cada una de las instalaciones de
todos los RPM y sus dependencias del HEARTBEAT las cuales ya fueron
141
mencionadas anteriormente estos rpm son los necesarios para la
instalación tanto del balanceador como del cluster.
Gráfico 3 - Implementando Heartbeat
Gráfico 4 - Buscando Repositorio de descarga (rpm)
142
Gráfico 5 - Guardando descarga de rpm
Gráfico 6 - Resolviendo dependencias y descargando paquetes
143
Gráfico 7- Instalación Total del Heartbeat
Gráfico 8 - Instalación de paquetes adicionales
144
Gráfico 9 - Proceso de Instalación del paquete ldirectord
Gráfico 10 - Resolviendo y descargando Dependencias
145
Gráfico 11 - Proceso de Confirmación de Descarga de Dependencias
Gráfico 12 - Instalación de Dependencias
146
Gráfico 13 - Instalación Completa
1.8.5.4. ldirectord+heartbeat
1.8.5.4.1. Introducción
ldirectord (Linux Director Daemon) es un demonio escrito por Jacob Rief
para monitorizar servicios HTTP y HTTPS en un cluster LVS. Es una
solución mucho menos genérica que mon, ya que no tenemos la libertad
que teníamos con mon para definir nuestros propios programas para
monitorizar el servicio que queramos, pero el hecho de estar
específicamente diseñado para trabajar con LVS hace que sea mucho
más fácil de instalar e integrar dentro de un cluster de este tipo.
Las principales ventajas de ldirectord sobre ipvsadm en un cluster LVS
son:
147
Ldirectord es un software de monitoreo, y que basado en los
resultados del monitoreo cambia las reglas del balanceador de manera
automática.
ldirectord lee los ficheros de configuración de LVS para acceder a los
servidores y monitorizarlos, y en caso de caída de alguno de ellos
puede modificar directamente estos ficheros de configuración para
eliminarlos del cluster.
ldirectord se puede configurar fácilmente para que sea lanzado por
heartbeat al arrancar el cluster, consiguiendo así una mayor
integración de todo el software que forma el cluster LVS.
1.8.5.5. Configuración de parámetros en el fichero
/etc/ha.d/ha.cf
En este archivo se definen los nodos del cluster y los interfaces que el
heartbeat usa para verificar si un sistema está levantado o caído, el
archivo a editar es el siguiente el ha.cf que se detalla a continuación:
Quitar comentario de las siguiente líneas:
logfile /var/log/ha-loglogfacility local0
Tiempo entre los latidos del corazón.
keepalive 2
Tiempo en segundos en el que se considera un servidor de balanceocomo “muerto” si no responde.
148
deadtime 6
Tiempo antes de emitir latido del corazón.
warntime 4
Se define el Puerto de comunicación del bcast/ucast
udpport 694
Interfaz de red que se utiliza para enviar el latido del corazón, entreservidores de balanceo.
bcast eth2 # Linux
Prepara un medio de latido del corazón de multicast.
mcast eth2 225.0.0.1 694 1 0
Indica un startup automático del servidor principal.
auto_failback onDefinición de nodos del cluster.
node serverbd.balanceo.edu.ecnode servidor2.balanceo.edu.ec
1.8.5.6. Configuración de parámetros en el fichero
/etc/ha.d/haresources
Ésta es una lista de recursos que mueven desde máquina a máquina
cuando los nodos bajan y suben en el cluster. El nombre del nodo se lista
delante de la información del grupo de recurso, este nombre es del nodo
principal para ejecutar el servicio. Si usted está ejecutando auto_failback
ON, entonces estos servicios se pondrán en marcha en el nodo principal,
en cualquier tiempo ellos estarán up. Si usted está ejecutando
149
auto_failback OFF, entonces la información del nodo se usará en el caso
de un simultáneo startup. Los archivos del haresources deben SER
IDÉNTICOS en todos los nodos del cluster. Si sus archivos son diferentes
entonces no trabajaran como se desea.
serverbd.balanceo.edu.ec IPaddr::192.168.1.1/24/eth0/192.168.1.255IPaddr::192.168.200.1/24/eth1/192.168.200.255 ldirectordMailTo::[email protected]::EVENTO_EN_CLUSTER_BALANCEADORES
1.8.5.7. Configuración de parámetros en el fichero
/etc/ha.d/ldirectord
El servidor con LVS se suele llamar Linux Director (LD). El esquema
presentado está pensado para balanceo de carga con alta disponibilidad.
En el caso de precisar tolerancia a fallos en el Linux Director se podría
montar un nuevo servidor gemelo y configurarlo según la documentación
para que actúe como respaldo del Linux Director principal.
Fijaos que el LD tiene dos interfaces de red, uno público de cara al
exterior (192.168.200.1) y uno interno para los servidores del cluster
(192.168.1.1). Los nodos del cluster (serberweb1 y serberweb2) tienen
como puerta de enlace principal la 192.168.1.1, de esta forma las
respuestas de los servidores web llegan al cliente remoto enmascaradas
con la ip 192.168.200.1 y no con la IP del nodo del clúster que ha
respondido. Esto es imprescindible si estamos manteniendo el
150
seguimiento de la sesión con cookies y no queremos que se cree una
nueva sesión cuando cambia el nodo que responde.
# Global Directiveschecktimeout=3checkinterval=1#fallback=127.0.0.1:80autoreload=yeslogfile="/var/log/ldirectord.log"#logfile="local0"emailalert="[email protected]"#emailalertfreq=3600emailalertstatus=allquiescent=yes
# Sample for an http virtual servicevirtual=192.168.200.1:80
real=192.168.1.201:80 masq 1real=192.168.1.202:80 masq 1
real=192.168.1.203:80 masq 1#real=192.168.6.6:80 gate
# fallback=127.0.0.1:80service=httprequest="test-balanceo.html"receive="OK"#virtualhost=www.balanceo.edu.ecscheduler=wlc#persistent=600netmask=255.255.255.255protocol=tcpchecktype=negotiatecheckport=80
En ese fichero definimos el servidor virtual, 192.168.200.1:80 y los nodos
reales (en este caso 2). Con fallback podemos definir un servidor de
respuesta en caso de que todos los nodos estén caídos.
Lo que me resultó curioso fue la forma de comprobar cada un segundo
(CheckInterval=1) qué nodos del cluster están activos. No envía un
151
simple ping, en el caso de un servicio http o https hace una petición a una
página de pruebas (request=" test-balanceo.html") y busca una
expresión regular en ella (receive=".OK"). En caso de no obtener
respuesta (checktimeout=3) o no sea la esperada marca el servidor
como caído y manda la petición HTTP a otro lado del cluster. El algoritmo
de balanceo para este clúster es Weighted Least-Connections (wlc),
pero hay muchos más. Por ejemplo, si tenemos servidores con distinta
capacidad podemos usar Weighted Round Robin (wrr) y darle pesos
adecuados (entre 0 y 1) a los nodos. A menor peso, menos peticiones a
resolver.
¿Y cómo sabemos que todo marcha?, fácil, tenemos unas cuantas
herramientas para ello. La primera es mirar el syslog y ver que el deamon
ldirectord ha arrancado perfectamente. Luego podemos utilizar ipvsadm,
nos informará de los nodos definidos, su peso actual (0 - inactivo, 1-
activo) y el número de conexiones activas.
Además pueden consultarse estadísticas que serían representables con
software de monitorización.
1.8.5.8. Configuración de parámetros en el fichero
/etc/ha.d/authkeys
En este archive se configure las llaves de autentificación para el cluster,
las cuales deben ser las mismas para los dos nodos del cluster (serverbd,
152
servidor2) se pueden usar tres tipos distintos: crc, md5, sha1,
dependiendo de la seguridad que se necesite para este proyecto se
escogió el sha1
auth 11 sha1 seminario#1 crc#2 sha1 HI!#3 md5 Hello!
Por rezones de seguridad se recomienda asignar los permisos de 600 a
este archivo este archivo se lo puede crear.
1.8.6. Instalar y configurar IPVSADM servicio de monitoreo (Cluster)
1.8.6.1. Introducción
Está basado en el software ipvsadm-1.24-8.1 este software permite
crear tablas para redireccionar requerimientos de algún servicio virtual (ej:
http 80, smtp 25, etc.) hacia los servidores reales.
El software permite poner varios servidores reales para cada servicio
virtual definido. Cada servidor es asignado con un peso “valor ponderado”
dependiendo de su estado de disponibilidad.
Está basado en reglas similares a las del firewall, las reglas pueden ser
creadas manualmente, y modificadas en línea.
153
1.8.6.2. Equipamiento lógico necesario.
1.8.6.2.1. Instalación a través de yum.
Si se utiliza de CentOS 5 o White Box Enterprise Linux 5, o versiones
posteriores, se puede instalar utilizando lo siguiente:
yum -y install ipvsadm-1.24-8.1.src.rpm
1.8.6.3. Iniciar servicio y añadir el servicio al arranque del sistema.
Ipvsadm un servicio que necesariamente no necesita una configuración
para su funcionamiento Para añadir el servicio a los servicios que inician
junto con el sistema, solo basta ejecuta:
chkconfig ipvsadm on
Para iniciar el servicio por primera vez, solo basta utilizar:
service ipvsadm start
Para reiniciar el servicio, considerando que se interrumpirán todas las
conexiones establecidas en ese momento, solo basta utilizar:
service ipvadma restart
Si el servicio ya está trabajando, también puede para el mismo utilizando
service ipvsadm stop
1.8.7. Instalar y configurar Java (JRE)
Para descargar el instalador de java debemos de tener en cuenta los
siguientes pasos:
154
Visite http://java.com.
Haga clic en el botón Descarga gratuita de Java Gráfico #.
Hay dos tipos de paquetes de instalación. Paquete Linux RPM o
archivo binario autoextraíble para Linux. Descargue el paquete que
mejor se ajuste a sus necesidades.
Nota: Linux RPM (Centos 5 Package Manager) utiliza el RPM para
instalar el JRE. Para poder emplear este método deberá disponer de
RPM en su equipo. En caso contrario, utilice la otra opción.
Gráfico 14 - Descargando Java
Haga clic en el botón de descarga adecuado para descargar el
paquete que mejor se ajuste a sus necesidades. Puede descargar el
archivo en cualquier directorio del sistema
155
Después de descargarlo compruebe que: El archivo binario
autoextraíble para Linux
o Se llama jre-1_6_0_02-linux-i586.bin
o Tiene un tamaño aproximado de 15,8 MB.
Los paquetes Linux RPM
o Se llama jre-1_6_0_02-linux-i586-rpm.bin
o Tienen un tamaño aproximado de 15,26 MB.
1.8.7.2. Equipamiento lógico necesario.
1.8.7.2.1. Instalación a través de rpm.bin.
Si se utiliza de CentOS 5, o versiones posteriores, se puede instalar
utilizando lo siguiente
#./jre-6u<versión>-linux-i586-rpm.bin
Se mostrará el contrato de licencia de archivos binarios Gráfico #. Léalo.
Pulse la barra espaciadora para pasar a la página siguiente. Al llegar al
final, escriba sí para proseguir con la instalación.
156
Gráfico 15 - Contrato de Licencia de Archivos Binarios
El archivo de instalación crea el archivo jre-6u<versión>-linux-i586.rpm
en el directorio actual Gráfico #.
Gráfico 16 - Extrae RPM
157
Para instalar los paquetes ejecute el comando RPM en el Terminal
Escriba:
#rpm -iv jre-6u<versión>-linux-i586.rpm
El JRE se ha instalado en el subdirectorio jre1.6.0_<versión> del
directorio actual. Compruebe que el subdirectorio jre1.6.0_<versión>
aparezca en el directorio actual. Escriba ls, si se muestra el directorio la
instalación ha finalizado
Gráfico 17 - Compruebe las instalación
1.8.8. Instalar y configurar NetBeans IDE
1.8.8.1. Introducción
NetBeans se refiere a una plataforma para el desarrollo de aplicaciones
de escritorio usando Java y a un entorno de desarrollo integrado (IDE)
desarrollado usando la Plataforma NetBeans.
La plataforma NetBeans permite que las aplicaciones sean desarrolladas
a partir de un conjunto de componentes de software llamados módulos.
Un módulo es un archivo Java que contiene clases de java escritas para
interactuar con las APIs de NetBeans y un archivo especial (manifest file)
158
que lo identifica como módulo. Las aplicaciones construidas a partir de
módulos pueden ser extendidas agregándole nuevos módulos.
Debido a que los módulos pueden ser desarrollados independientemente,
las aplicaciones basadas en la plataforma NetBeans pueden ser
extendidas fácilmente por otros desarrolladores de software.
NetBeans es un proyecto de código abierto de gran éxito con una gran
base de usuarios, una comunidad en constante crecimiento, y con cerca
de 100 socios en todo el mundo. Sun MicroSystems fundó el proyecto de
código abierto NetBeans en junio 2000 y continúa siendo el patrocinador
principal de los proyectos.
1.8.8.2. Equipamiento lógico necesario.
1.8.8.2.1. Instalación.
Navegue hacia el directorio que contiene el instalador, si es necesario,
cambie los permisos del instalador para hacerlo ejecutable escribiendo lo
siguiente en la línea de comando (netbeans_installer es el nombre del
instalador de NetBeans que se bajó):
#chmod +x netbeans_installer
Ejecute el instalador escribiendo lo siguiente en la línea de comando (Denuevo, netbeans_installer es el nombre del instalador de NetBeans quese bajó)):
#./netbeans_installer
159
Después aparecerá el Acuerdo de Licenciamiento (License Agreement),acéptelo y de clic en Siguiente (Next).
Especificar un directorio vacío donde instalar Netbeans IDE 6.0. Dar clicen Siguiente (Next).
Selecciones el JDK que se quiere usar junto con el NetBeans IDE de lalista de selección si hay más de uno. Dar clic en Siguiente (Next).
Verifique que el directorio de instalación es el correcto y que se cuentacon espacio suficiente en el sistema para la instalación.
De clic en Siguiente (Next) para iniciar la instalación.
Navegar hacia el subdirectorio “bin” donde se encuentra instalado
NetBeans IDE 6.0. Ejecutar el script de lanzamiento de la aplicación
escribiendo en la línea de comando para ejecutar el programa:
#./netbeans
1.9. Configuración de red para los servidores de balanceo.
Ejecutando el comando en la consola de Terminal.
system-network-config
El servidor primario tiene 2 interfaces de red físicas eth0 y eth1 las cuales
tiene que configurarse los mismos interfaces en ambos balanceadores ha
continuación se detalla la interfaces ya antes mencionadas.
1.9.1. Interfaz externa (Wan)(eth1)
Es la interfaz por medio de la cual se conecta a Internet y se controla el
cluster su configuración es la siguiente:
160
192.168.200.2 (eth1) IP (Estática) (serverbd) nodo1192.168.200.3 (eth1) IP (Estática) (servidor2) nodo2
1.9.2 Interfaz interna (Lan) (eth0)
La interfase por la cual se conecta el servidor con los servidores reales y
se monitorea el balanceo ha los mismos su configuración es la siguiente:
192.168.1.6 (eth0) IP (Estática) (serverbd) nodo1192.168.1.7 (eth0) IP (Estática) (servidor2) nodo2
1.9.3 Interfaz Virtual (Lan) (Wan)
Los servidores de balanceo constan con dos IP virtuales o (flotantes)
para cada interfaz de red física las cuales sirven Gateway para la LAN,
WAN
Cluster: direcciones IP flotantes. Estas direcciones flotantes son las
que hacen gateway tanto el la LAN como en la WAN, esta configuración
se la realiza previamente en el archivo haresources.
WAN eth1:1 192.168.200.1LAN eth0:1 192.168.1.1
1.10. Configuración de red para los servidores Reales (Server Web).
Ejecutando el comando en la consola de Terminal.
system-network-config
En cada uno de los servidores reales están constituidos con una interfaz
de red las cuales se detalla ha continuación:
LAN eth0 192.168.1.201 (servidorbase/datos)LAN eth0 192.168.1.202 (servidorweb1)
161
LAN eth0 192.168.1.203 (servidorweb2)GATEWAY=192.168.1.1 (Para servidores reales )
Nota.
Se crea una página en cada servidor real en la ruta: /var/www/html/ en la
cual se hace el requerimiento de una página web "test-balanceo.html"
con un contenido patrón “OK” para verificar el estado del servidor es decir
este es el censo entre el balanceador y los servidores reales.
Para cada uno de los servidores reales
162
CAPITULO 2
2. MANUAL DE USUARIO
Gráfico 18 – Pantalla de inicio de sesión
Esta pantalla me permitirá ingresar al sistema de control de balanceo de los
servidores web utilizando como usuario= admin y clave: admin.
163
Gráfico19 – Pantalla de Bienvenida
Después de ingresar de forma correcta al sistema me aparecerá la pantalla
de bienvenida el cual me presentará todas las opciones que posee el
sistema.
164
Gráfico 20 – Pantalla de Nuevo Servidor Real
La Pantalla nuevo servidor me permitirá ingresar un nuevo servidor real al
sistema de administración de balanceo. Aparte esta opción también configura
internamente en los balanceadores a los nuevos servidores reales.
165
Gráfico 21 – Pantalla de Eliminar Servidor Real
La pantalla de eliminar servidor me permite seleccionar de entre los
existentes al servidor real que deseo eliminar en el sistema de administración
de balanceo. Ademas esta opción también elimina internamente en el
balanceador la configuración del servidor real.
166
Gráfico 22 – Pantalla de Monitoreo
La pantalla de monitoreo cuenta con 6 opciones de selección múltiple que
nos va a dar de forma detallada los eventos registrados en los servidores
reales en el sistema de administración de balanceo.
.
167
Gráfico 23 – Pantalla de Monitoreo – Servicios
La pantalla monitorear servicios me permite seleccionar de una lista existente
de servidores real al que deseo me presente todos los servicios que estén
ejecutándose en ese momento permitiéndonos además el detener o
inicializar cualquiera de los servicios con los que cuente el servidor real en el
sistema de administración de balanceo.
168
Gráfico 24 – Pantalla de Monitoreo – Nodos Conectados
La pantalla monitoreo nodos conectados me permite seleccionar de una lista
existente de servidores real al que deseo me presente todas las conexiones
que se hacen desde la red externa hacia la intranet mostrando como un dato
importante el protocolo de comunicación que utiliza en su interacción.
169
Gráfico 25 – Pantalla de Monitoreo CPU – HDD/Memoria/Procesador
La pantalla monitoreo CPU - HDD/Memoria/Procesador me permite
seleccionar de una lista existente de servidores real al que deseo me
presente todas las características que posee dicho equipo.
170
Gráfico 26 – Pantalla de Monitoreo – Balanceo
La pantalla monitoreo balanceo siendo una de las pantallas mas importantes
de la aplicación permite seleccionar de una lista existente de servidores
reales gráficos estadísticos de las conexiones realizadas diariamente o por
horas de conexión; además presenta el tipo de sistema operativo que tiene
instalado, la temperatura del equipo y la velocidad en RPM a la que esta
trabajando el ventilador del procesador y sistema.
171
Gráfico 27 – Pantalla de Monitoreo – Balanceo
En esta pantalla podemos apreciar mucho mejor lo comentariado en la
pagina anterior.
.
172
Gráfico 28 – Pantalla de Consola
La pantalla monitoreo consola me permite digitar y ejecutar ciertos comandos
de respuesta corta emulando una Terminal de consola mostrándonos su
resultado.
173
Gráfico 29 – Reportes
La pantalla de reportes cuenta con dos opciones de selección que nos va a
dar de forma detallada los resultados obtenidos del mismo en el sistema de
administración de balanceo.
174
Gráfico 30 – Reportes de Tráfico
La pantalla reportes de trafico va a mostrar de forma detallada las IP de los
servidores reales, su nombre, el total de conexiones, paquetes entrantes y
salientes y la cantidad en bytes de los mismos; además nos da la opción de
presentar estos datos filtrándolos por día.
175
Gráfico 31 – Reportes de Conexiones Actuales
La pantalla Reportes de conexiones actuales me presenta de forma global
todas las conexiones que hay de todos los servidores reales existentes a los
balanceadores mostrando como dato importante el protocolo de
comunicación que utiliza en su interacción.
176
Gráfico 32 – Respaldo
La pantalla de respaldo me permite realizar como su nombre mismo indica el
respaldo de los servicios al seleccionar de una lista existente el servidor real
al que deseo crearle una carpeta que va a contener todos los archivos de
configuración (SERVICOS) dependiendo del runlevel en el que este
corriendo el servidor real.
177
Gráfico 33 – Perfil Administrador
La pantalla perfil administrador se la utiliza cuando el administrador a olvido
su contraseña teniendo dos opciones que a continuación se explicará.
178
Gráfico 34 – Perfil Administrador – Respuesta Secreta
Utilizar respuesta secreta para comprobar mi identidad, escribimos en la
casilla Respuesta secreta una palabra que se encuentre guardada en el
servidor y nos identifique como administrador de la red.
179
Gráfico 35 – Perfil Administrador – Respuesta Secreta
En seguida nos mostrará una opción en la cual por seguridad el administrador podrácambiar la contraseña del sistema.
Gráfico 36 – Perfil Administrador – Respuesta Secreta
Mensaje del sistema indicándonos que el proceso fue realizado con éxito.
180
Gráfico 37 – Perfil Administrador – Recepción de Clave
Método de Recepción de clave, envía un mail al correo del administrador con
la contraseña del sistema.
Gráfico 38 – Perfil Administrador – Recepción de Clave
Mensaje del sistema indicándonos que la clave fue enviada al correo del
administrador.
a
Instalación modo Grafico de Centos 5
Requisitos de Hardware:
Si bien los sistemas GNU/Linux pueden instalarse en equipo con
capacidades muy reducidas (o limitadas), para tener un entorno con un
buen desempeño y que soporte las nuevas características de los
sistemas incluidos en esta distribución, se recomienda un equipo con las
siguientes características:
Procesador Intel Pentium III / AMD Athlon, 550MHz (o mejor)
512 MB RAM
10 GB en disco duro
Cuando menos un Puerto Serial (COM), para estaciones “headless”
Interfaz de red.
Procedimientos:
Iniciamos nuestra computadora, asegurándonos que en el BIOS de la
misma tengamos habilitada la opción de arranque mediante CDROM o
DVDROM. La primera pantalla que obtendremos será la del inicio del
sistema Isolinux, donde podemos observar una serie de instrucciones que
nos podrán ayudar en el proceso de instalación de nuestro sistema.
b
Gráfico 1 - Iniciar modo gráfico
En esta pantalla (Gráfico 1) podemos observar una línea de comandos
(boot:) que está a la espera de que ingresemos opciones para el inicio del
proceso de instalación.
Para iniciar el modo gráfico, en español, procedemos a invocar el
instalador Anaconda con los siguientes parámetros:
boot: linux lang=es
c
Si no deseamos introducir ningún parámetro, y queremos iniciar el
proceso de instalación en modo gráfico, solamente deberemos teclear
«Intro» o «Enter».
La siguiente pantalla (Gráfico 2) nos indica si deseamos verificar la
integridad de los datos contenidos en el disco. Es recomendable realizar
este procedimiento, cuando menos, la primera ocasión que utilizamos
dicha media de instalación, con la finalidad de comprobar que
descargamos y grabamos correctamente la información en el disco.
Posteriormente es bueno verificar ocasionalmente para detectar algún
daño que vaya teniendo debido a las rayaduras o alguna otra
inclemencia.
Gráfico 2 - Prueba de medios (CD)
d
Debemos tomar en cuenta que este proceso puede llevar bastante tiempo
en completarse. Seleccione «Aceptar» para comenzar la revisión, u
«Omitir» para saltarse este paso.
NOTA: En las pantallas de texto, en donde contamos con
múltiples opciones, nos desplazaremos entre ellas con las
teclas de «TAB», «Alt-TAB» y las de dirección. Para activar la
opción seleccionada, utilizaremos las teclas «Barra
Espaciadora» o «Intro/Enter»
Una vez finalizado este paso, el sistema de instalación de Centos,
efectuará análisis de hardware para determinar la información de nuestro
sistema necesaria para continuar el proceso. Llevado a cabo dicho
análisis, obtendremos la pantalla de bienvenida de Anaconda a CentOS 5
(Gráfico 3).
Anaconda es el instalador para Red Hat Linux y Fedora, en la actualidad
lo han incorporado a otras versiones de linux.
e
Gráfico 3 - Pantalla de bienvenida de Anaconda a CentOS 5
Al seleccionar la opción de “Notas de lanzamiento” obtendremos
información sobre el sistema que estamos instalando como algunas notas
legales, descripción de cambios, compatibilidad con el USP y cambios
entre versiones (Gráfico 4):
f
Gráfico 4 - Notas de lanzamiento
A continuación tenemos la pantalla de selección del idioma
predeterminado de instalación del sistema (solamente si no se envió
como parámetro al inicio del arranque).
Seleccionamos «Spanish (Español)», o el de preferencia del usuario
(Gráfico 5). Pulsar en «Next»
g
Gráfico 5 - Selección del idioma
En esta pantalla seleccionamos la distribución de teclas en nuestro
teclado.
Seleccione el mapa de teclado que corresponda al dispositivo utilizado. El
mapa «Español» o bien «Latinoamericano» de acuerdo a lo que
corresponda (Gráfico 6). Al terminar, haga clic sobre el botón «Siguiente».
h
Gráfico 6 - Distribución de teclas en nuestro teclado
Salvo que exista una instalación previa que se desee actualizar (no
recomendado), deje seleccionado «Instalar CentOS» y haga clic en el
botón «Siguiente» a fin de realizar una instalación nueva (Gráfico 7).
i
Gráfico 7 - Instalación Nueva de Centos
Para crear las particiones de forma automática, lo cual puede funcionar
para la mayoría de los usuarios, puede seleccionar (Gráfico 8):
Remover particiones en dispositivos seleccionados y crear
disposición: Esta opción eliminará cualquier partición encontrada en
los dispositivos (discos) seleccionados, y creará automáticamente una
disposición de particiones por defecto.
Remover particiones de linux en dispositivos seleccionados y
crear disposición: Al igual que la anterior, pero solamente eliminará
las particiones linux que se encuentren en dicho dispositivo.
j
Asímismo, creará automáticamente una disposición de particiones por
defecto.
Usar espacio disponible en dispositivos seleccionados y crear
disposición: Si en nuestro disco disponemos de espacio libre NO
PARTICIONADO, y con capacidad de particionar, el sistema tomará
este espacio y creará en él una disposición de particiones por defecto.
Crear disposición personalizada: Para usuarios con un poco mas de
experiencia en el manejo de sistemas. Esta opción nos permitirá tener
control casi total sobre el esquema de particionamiento de nuestro
disco.
Gráfico 8 - Seleccionar tipo de partición del HDD.
k
Gráfico 8.1 - Seleccionar tipo de partición del HDD.
Nosotros hemos seleccionado la opción “Usar espacio disponible en
dispositivos seleccionados y crear disposición”.
A continuación el gestor de arranque GRUB (Gráfico 9), sistema que nos
permitirá administrar y seleccionar el sistema operativo con el que
queramos iniciar el equipo (si contamos con múltiples sistemas
instalados) o la versión de núcleo del mismo sistema operativo que
requiramos (como puede ser el caso de actualizaciones).
l
Gráfico 9 – Gestor de Arranque GRUB
Si nuestro sistema cuenta con alguna interfaz de red, y esta es
compatible con nuestro sistema operativo, se nos presentará la sección
para la configuración de nuestra red (Gráfico 9):
m
Gráfico 9-1 - Configuración de Nuestra Red
Seleccionamos cual (o cuales) de las interfaces se activarán al inicio de
nuestro sistema. Asimismo, podremos configurar cada interfaz ya sea
mediante una configuración automática vía un servidor DHCP, o
configurar manual y estáticamente dicha interfaz.
n
Gráfico 9.2 - Configuración de Nuestra Red
Además, en esta sección podremos configurar el nombre de anfitrión de
nuestro sistema (nombre de máquina).
o
Gráfico 9.3 - Configuración de Nuestra Red
Una vez configurada nuestra red, seguimos con la configuración sobre la
ubicación geográfica de nuestro servidor (Gráfico 10). Es conveniente
tener ajustado nuestro huso horario (o zona horaria) correctamente, para
tener un mejor control sobre las bitácoras y mensajes generados por el
sistema.
p
Gráfico 10 - Configuración Geográfica
A continuación insertaremos la contraseña de nuestro superusuario root
(Gráfico 11). Es importante recordar esta ya que será con la que
ingresemos para realizar las tareas administrativas en nuestro sistema.
q
Gráfico 11 - Contraseña de Root
Una vez ingresada y verificada la contraseña en ambas casillas, el
sistema de instalación analizará nuestro equipo en búsqueda de
instalaciones previas de algún sistema compatible. Si este existe, nos
solicitará elegir entre la actualización del sistema instalado, o el realizar
una instalación completamente nueva.
r
NOTA: No se recomienda la actualización desde versiones
anteriores del sistema. En lugar de ello, recomendamos
realizar una instalación nueva ya que con ello nos
aseguraremos tanto de la integridad de los subsistemas
instalados, como de la compatibilidad de las configuraciones.
A continuación seleccionaremos los grupos de paquetes que vayamos a
necesitar en nuestro equipo (Gráfico 12). Estos grupos describen una
serie de paquetes informáticos contenidos en nuestra media de
instalación y son seleccionados previamente por nuestro proveedor.
Gráfico 12 – Selección e Instalación de Paquetes
s
Entre los grupos encontramos:
Escritorio Gnome: Este es el sistema gráfico de escritorio por defecto
en las distribuciones basadas en linux. Su característica es que trata
de ser muy ergonómico y sencillo de utilizar para cualquier tipo de
usuario.
Escritorio KDE: Este sistema gráfico de escritorio está más enfocado
hacia la obtención de un escritorio muy agradable a la vista. Es
bastante personalizable y tiene muchos elementos para ir mejorando
la experiencia del usuario.
Servidor (herramientas en modo texto): Contiene aquellos sistemas
requeridos para la configuración de nuestros distintos servicios, así
como los sistemas base de los mismos. Estas herramientas son en
modo de solo texto (consola o terminal).
Servidor (herramientas en modo gráfico): Contiene herramientas
gráficas con las cuales podremos configurar nuestros distintos
servicios desde un entorno gráfico.
Clústers de procesamiento: Herramientas y sistemas requeridos
para la implementación de arreglos de servidores de alto desempeño
o de alta disponibilidad, según los requerimientos de nuestro entorno.
Clústers de almacenamiento: Herramientas y sistemas requeridos
para el manejo de arreglos de dispositivos de almacenamiento
distribuidos.
t
Adicionalmente, CentOS 5 nos da la posibilidad de conectarnos a su
depósito de paquetes extras (CentOS Extras), e instalarlos directamente
en el proceso de instalación. El depósito CentOS Extras contiene
paquetes que nos proveen sistemas como: Xfce (sistema gráfico de
escritorio ligero), o algunas herramientas añadidas (plugins) para el
sistema de actualización (YUM). Para utilizar este depósito, deberemos
contar con una conexión a internet.
Si deseamos comprobar a detalle cuales son los paquetes que se
instalarán, o personalizar nuestra selección de programas, podemos
elegir la opción «Personalizar ahora». De lo contrario, si confiamos en los
paquetes selectos por nuestro proveedor, elegimos «Personalizar luego»
(Gráfico 13).
u
Gráfico 13 – Personalizar Luego
Se llevará a cabo el cálculo de dependencias. Esto es, de los paquetes
seleccionados se analizará cuales son los requerimientos propios de cada
paquete, ya que probablemente requieran de algún otro paquete para su
correcto funcionamiento. Una vez finalizado exitosamente el cálculo de
dependencias, se nos despliega la siguiente ventana (Gráfico 14):
v
Gráfico 14 – Finalización del Cálculo de Dependencias
Esta pantalla indica nuestro punto de no regreso. Hasta este momento,
nuestro equipo permanece sin modificaciones. Debemos verificar y
cerciorarnos de que el disco en el que vamos a instalar ha sido
previamente respaldado (si aplica), que la tabla de particiones está bien
elaborada, se seleccionaron los paquetes necesarios, etc. Una vez que
pulsemos «Siguiente», comenzará el formateo de nuestras particiones
(Gráfico 14):
w
Gráfico 14-1. Formateo de Particiones
Así como la instalación de los paquetes seleccionados (y sus
dependencias) (Gráfico 15):
x
Gráfico 15 - Instalación de los Paquetes
Si no hubo algún contratiempo (ej. disco de instalación dañado o mal
grabado, falta de espacio en disco duro), y dependiendo tanto de la
velocidad de nuestro equipo como de la cantidad de paquetes
seleccionados para la instalación, obtendremos la pantalla que marca el
fin de la etapa de instalación de nuestro sistema CentOS 5 (Gráfico 16).
y
Gráfico 16 - Fin de la Etapa de Instalación
Se expulsará nuestra media de instalación, debemos cerciorarnos de
retirar dicho disco con el fin de no afectar la siguiente etapa. Al pulsar el
botón «Reiniciar», el sistema arrancará con la segunda etapa del proceso
de instalación (Gráfico 17), que es la de la configuración inicial de nuestro
sistema:
z
Gráfico 16 -1. Arranque del Sistema
Iniciando y configurando nuestro equipo:
aa
Gráfico 16- 2. Arranque del Sistema
La pantalla de bienvenida a la etapa de configuración general del equipo
(Gráfico 17):
bb
Gráfico 17 - Etapa de Configuración
Configuramos nuestro muro cortafuegos (system-config-securitylevel).
En esta sección tenemos dos opciones principales (Gráfico 18):
Habilitado: Utilizaremos esta sencilla herramienta para proveer
seguridad a nuestro sistema. Muy recomendable si no se piensa
elaborar un sistema ruteador complejo, sino un entorno de servidor o
escritorio estándar.
Deshabilitado: Recomendado si planeamos configurar algún método
externo para nuestra protección por cortafuegos.
cc
Gráfico 18 - Cortafuegos
SELinux significa “Linux con Seguridad Mejorada”, por sus siglas en
inglés (Security Enhanced Linux), e incrementa notoriamente la
seguridad durante la ejecución de nuestras aplicaciones a un nivel de
núcleo (Gráfico 19).
dd
Gráfico 19 – SELinux
Podemos configurar a SELinux en tres niveles:
Obediente: El modo más estricto para el cumplimiento de las políticas
implementadas. Puede ocasionar algún funcionamiento no previsto en
algún sistema web que no cumpla con las especificaciones de
SELinux.
Permisivo: Permitirá el funcionamiento tradicional de las aplicaciones,
pero nos notificará si acaso alguna parte de la ejecución de la
aplicación no cumple con las políticas de SELinux
Deshabilitado: No se habilitará SELinux
ee
NOTA: SELinux, en esta versión de Linux, se encuentra
habilitado por defecto. Si elige deshabilitarlo, deberá reiniciar
su sistema ya que requiere hacer las modificaciones
pertinentes al núcleo.
Kdump es un sistema residente en memoria, encargado de monitorear la
actividad de los procesos en nuestro sistema con la finalidad de obtener
información sobre algún fallo crítico que “tire” nuestro sistema. Lo único
que deberemos configurar es la cantidad de memoria física (RAM) que se
reservará para la ejecución de este monitor (Gráfico 20).
Gráfico 20 – Kdump
ff
En la siguiente pantalla ajustaremos la fecha y hora actuales en nuestro
sistema (Gráfico 21). Si el sistema ya cuenta con una conexión a internet
(o a red con algún servidor de tiempo previamente configurado),
podremos indicarle a nuestro sistema que sincronice esta información con
algún servidor central de tiempo. Esto es ampliamente recomendable si
nuestro equipo va a convivir en un entorno donde es necesaria esta
característica.
Gráfico 21 – Ajuste de Fecha y Hora
gg
Toca el turno a la creación de nuestro primer usuario dentro del sistema
(Gráfico 22). Es ampliamente recomendado el crear a este usuario, y
utilizar la cuenta administrativa del superusuario root lo MENOS posible.
Gráfico 22 – Creación del Primer Usuario
Si contamos con discos adicionales para nuestro sistema, compatibles
con el formato de nuestra distribución, es el momento de añadirlos a
nuestro sistema (Gráfico 23):
hh
Gráfico 23 – CDs Adicionales
Si realizamos alguna modificación a SELinux, o habilitamos Kdump, el
sistema deberá reiniciarse para tomar en cuenta los cambios (Gráfico 24):
ii
Gráfico 24 – Reinicio del Sistema
Una vez que pulsemos el botón de finalizar, nuestro sistema reiniciará (si
fuese necesario), y obtendremos nuestra pantalla de inicio de sesión,
donde tendremos que dar nuestro nombre de usuario y contraseña
(Gráfico 25).
jj
Gráfico 25 – Pantalla de Inicio de Sesión
Con esto concluimos todo el proceso de instalación de nuestra
distribución CentOS 5.
Top Related