viernes, 27 de marzo de 2015

Comenzamos la Práctica 3

Esta semana hemos comenzado la práctica 3 de SWAP. En esta práctica vamos a diseñar y configurar nuestra granja web a partir de los servidores web que instalamos en la práctica 2.

Así pues, instalaremos una nueva máquina Linux en la que NO debemos instalar el servidor Apache, ya que se apropiaría del puerto 80, y ese puerto lo necesitamos para que el software de balanceo reciba las peticiones HTTP de los usuarios. Sí le instalaremos el servicio SSH para poder administrarla remotamente.

Como software de balanceo, usaremos primero nginx y después haproxy.

Sólo uno de ellos puede estar en ejecución en un momento dado en la misma máquina, por lo que antes de instalar, configurar y lanzar el otro, debemos asegurarnos de que el primero está "apagado". Todos los detalles de cómo hacer la configuración se pueden estudiar en el guión de la práctica. Ahí se describe también cómo aplicar los distintos algoritmos de balanceo que vimos en la clase de teoría.

Una vez configurada la máquina balanceadora, para comprobar que nuestra granja web funciona bien, debemos hacer peticiones con la herramienta curl a la dirección IP del balanceador (no a las IP de las máquinas servidoras finales). Haciendo varias peticiones veremos que el balanceador está redirigiendo las peticiones a cada servidor final de acuerdo con el algoritmo configurado.

Tema 4 de teoría: Balanceo de carga

Inicialmente se usaban grandes mainframes como servidores (de todo tipo), pero resultaban muy caros de adquirir y mantener. Esas desventajas llevaron al desarrollo y uso del balanceo de carga.

La idea es que varias máquinas trabajando en paralelo es mejor que una sola máquina muy grande y cara. Es más, si una máquina del grupo se rompe, se puede sustituir fácilmente y además las tareas se pueden repartir entre grupos de servidores.

El balanceador reparte el tráfico web entre varios servidores, y realiza comprobaciones para asegurarse de que los servidores, aplicaciones y contenido están disponibles.

Existen diversos dispositivos hardware y software que pueden hacer funciones de balanceo. (distribuir el tráfico entre los servidores):



Por otro lado, el balanceador realiza tareas adicionales:
 - comprobar la disponibilidad de los servidores
 - protege de diversos ataques
 - derivar en función del tipo de tráfico

Existe software específico para configurar casi cualquier PC como balanceador, estableciendo diferentes algoritmos de reparto de carga.
Opciones de software libre:
 - HAProxy
 - ngingx
 - Apache
Opciones de software propietario:
 - Local Director (cisco)
 - BIG-IP (F5)
 - NLB (Microsoft)

También existen dispositivos tipo "caja negra" que incluyen el hardware y software necesarios para el balanceo, o bien procesadores específicos (ASIC, application specific integrated circuit) para realizar las tareas de modificación de paquetes. Entre otros, destacan los fabricantes: Fabricantes: Cisco Systems, Foundry Networks, Nortel Networks, F5 Networks y Radware.

A lo largo del tema hemos estudiado en detalle los siguientes conceptos y términos:
 - Modelo OSI
 - Balanceador de carga
 - VIP
 - Servidor
 - Grupo o cluster
 - Niveles de acceso de usuario
 - Redundancia
 - Persistencia
 - Disponibilidad de servicio
 - Algoritmos de balanceo de carga
 - Centro de datos
 - NAT: network addess translation

También hemos estudiado en detalle varios algoritmos de balanceo de carga. Los algoritmos más comunes disponibles tanto en software como en dispositivos hardware son:
 - balanceo basado en turnos (round-robin)
 - balanceo basado en el menor número de conexiones
 - balanceo basado en ponderación
 - balanceo basado en prioridad
 - balanceo basado en tiempo de respuesta
 - combinación de los algoritmos de tiempo de respuesta y menor número de conexiones


Por último, hemos estudiado el balanceo de carga global (GSLB, global server load balancing).

Se trata de una serie de técnicas para distribuir la carga entre varios centros de datos. De esta forma evitamos retrasos en las comunicaciones por las distancias entre el usuario y el servidor. Además, debido a la redundancia, si un centro falla, el tráfico se redirige a otro centro de datos.



Hay varias implementaciones posibles, con mayor o menor complejidad:
 - Uso del sistema de DNS
 - Redirección HTTP
 - GSLB basado en DNS
 - GSLB usando protocolos de enrutamiento

La tecnología del GSLB presenta una ventaja primordial: alta disponibilidad. Sin embargo, es muy complejo de implementar y comprender, y requiere de grandes conocimientos del funcionamiento de los DNS. Además, si la aplicación web usa BD, éstas deben estar sincronizadas entre los diversos sitios, lo que resulta muy complejo. De hecho, para que GSLB funcione es necesario un entorno de red muy controlado, con alta coordinación entre los operadores.


Como resumen, el balanceo de carga aporta diversos beneficios:

  • Escalabilidad: El balanceador distribuye las peticiones de los usuarios entre varios servidores reales, haciendo que la capacidad global de proceso y servicio crezca respecto a un solo servidor. 
  • Disponibilidad: El balanceador monitoriza el estado de los servidores y las aplicaciones, de forma que si encuentra que uno de los servidores ha fallado, dejará de enviarle peticiones. 
  • Mantenimiento: El administrador puede apagar una máquina para actualizarla o repararla, y el resto del conjunto seguirá dando el servicio. Posteriormente, la máquina se puede añadir de nuevo cuando vuelva a estar operativa. Además, podemos tener grupos de máquinas configuradas para dar un tipo de servicio (FTP, HTTP, SMTP, etc).
  • Seguridad: Puede ser una primera línea de defensa, rechazando varios tipos de ataques. Además, al hacer NAT, protege los servidores finales de accesos desde el exterior.
  • Calidad de servicio: Nos referimos al tiempo de respuesta, a la disponibilidad o a la capacidad de ofrecer servicios en función del tipo de usuario.



En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:


  • Ejercicio T4.1: Buscar información sobre cuánto costaría en la actualidad un mainframe. Comparar precio y potencia entre esa máquina y una granja web de unas prestaciones similares.
  • Ejercicio T4.2: Buscar información sobre precio y características de balanceadores hardware específicos. Compara las prestaciones que ofrecen unos y otros.
  • Ejercicio T4.3: Buscar información sobre los métodos de balanceo que implementan los dispositivos recogidos en el ejercicio 4.2
  • Ejercicio T4.4: Instala y configura en una máquina virtual el balanceador ZenLoadBalancer. Compara con la dificultad de la instalación y configuración usando nginx o haproxy (práctica 3).
  • Ejercicio T4.5: Probar las diferentes maneras de redirección HTTP. ¿Cuál es adecuada y cuál no lo es para hacer balanceo de carga global? ¿Por qué?
  • Ejercicio T4.6: Buscar información sobre los bloques de IP para los distintos países o continentes. Implementar en JavaScript o PHP la detección de la zona desde donde se conecta un usuario.
  • Ejercicio T4.7: Buscar información sobre métodos y herramientas para implementar GSLB.


Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podéis llamar "ejercicios_de_clase".

viernes, 13 de marzo de 2015

Tema 3 de teoría: La red de una granja web

La construcción de una red segura y escalable es fundamental para cualquier servidor. Si la red no está bien estructurada, los servidores no pueden servir la información. El equipo de administración del sistema debe analizar las opciones de conexión a Internet y diseñar adecuadamente la estructura de red. Una de las tareas que deben realizar es separar las subredes corporativas y también conectar a redes privadas de proveedores.

Todas estas decisiones de diseño implican un estudio de las alternativas disponibles:
  - a nivel de hardware: switch, hub, router, balanceador, etc
  - a nivel de software: sistema operativo, monitorización, balanceo, etc.

Las diferentes subredes (backbones) hacen de enlace entre máquinas. Se pueden crear simplemente con un switch (http://es.wikipedia.org/wiki/Conmutador_(dispositivo_de_red)), router (http://es.wikipedia.org/wiki/Router) o hub (http://es.wikipedia.org/wiki/Concentrador).

Es sumamente importante configurar una zona segura en la red del sistema. Es lo que se llama zona desmilitarizada o DMZ (demilitarized zone). Se trata de un área restringida o aislada, y totalmente controlada. La idea es controlar los servicios y aplicaciones ofrecidos a otras redes externas al DMZ.

Existen varias alternativas para conectar la granja web a otras redes:
 1. Configuración sin DMZ
 2. Configuración de DMZ simple
 3. Configuración de DMZ tradicional
 4. Configuración de DMZ doble

La estructura recomendada finalmente es la configuración de DMZ doble que se muestra a continuación:


Es la configuración más segura:
 - El DMZ tiene un front-rail y un back-rail.
 - El delantero es un segmento de red conectado a Internet.
 - Los servidores quedan protegidos con el cortafuegos.
 - El trasero está conectado a la subred interna (segura), y protegido con otro cortafuegos.

Para realizar esta configuración se necesitan máquinas con doble conexión al fron-rail y back-rail:
 - Requiere doble tarjeta de red
 - Adecuado para acceder a Internet y servidores internos
 - Configuración para servidores HTTP, SMTP, POP3, FTP, etc
 - Ofrecen servicios hacia Internet y a las subredes seguras

También máquinas con conexión sólo al front-rail:
 - Requiere sólo una tarjeta de red
 - Adecuado para acceder sólo a Internet
 - Los servicios ofrecidos quedan aislados
 - Configuración para servidores HTTP, SMTP, POP3, FTP, etc
 - Ofrecen servicios hacia Internet

Y por último máquinas con conexión sólo al back-rail:
 - Requiere sólo una tarjeta de red
 - Para servidores que no necesitan acceso a Internet
 - Servicios ofrecidos a las redes corporativas/seguras
 - Configuración para servidores de BD o aplicaciones


Por último, la conexión a Internet depende de varios factores para asegurar la calidad del servicio y la seguridad:
 1. Calidad del servicio y ancho de banda
 2. Filtrado y bloqueo de paquetes
 3. Network address translation (NAT)


En cuanto a los ejercicios que vamos planteando en los temas de teoría, en este tema hemos planteado los siguientes ejercicios:
Ejercicio T3.1: Buscar con qué órdenes de terminal o herramientas gráficas podemos configurar bajo Windows y bajo Linux el enrutamiento del tráfico de un servidor para pasar el tráfico desde una subred a otra.

Ejercicio T3.2: Buscar con qué órdenes de terminal o herramientas gráficas podemos configurar bajo Windows y bajo Linux el filtrado y bloqueo de paquetes.

Como ya indicamos, la entrega de los ejercicios de clase se realiza en el repositorio personal que cada cual mantenéis en github.com, en una carpeta que podemos llamar "ejercicios_de_clase".

lunes, 9 de marzo de 2015

Comenzamos la Práctica 2

Esta semana hemos comenzado la práctica 2 de SWAP. En ésta, vamos a suponer que tenemos un servidor web y para evitar un posible desastre, hemos adquirido un segundo servidor para sustituir el principal. De esa forma, podemos sustituir el servidor en producción por el secundario y continuar trabajando en pocos minutos.

Para esta práctica vamos a crear dos máquinas virtuales (servidor en producción o m1, y servidor de sustitución o m2). Ambas máquinas serán idénticas en software y en cuanto al contenido del espacio web. Deben tener habilitado el servicio SSH y Apache. La idea será configurarlas de forma que la de sustitución sea un clon exacto de la de producción.

Veremos varias opciones para hacerlo, y acabaremos configurando el RSYNC con las claves SSH y CRONTAB para automatizar todo el proceso. Tened en cuenta que las claves SSH se deben crear en M2 y copiarlas a M1; la tarea crontab se debe configurar en M2 para que ejecute el rsync y acceda a M1 para copiar los cambios en el espacio web que tiene que actualizar. Recomiendo trabajar en todo momento como root, pero también se puede trabajar con las cuentas de usuario.

Todos los detalles de cómo hacer la configuración se pueden estudiar en el guión de la práctica (en PRADO2).

sábado, 7 de marzo de 2015

Trabajar con Markdown en GitHub

Lo habitual es subir a github.com archivos de código (texto plano). En esos casos, cuando accedemos a través de la interfaz web a esos archivos subidos, el sistema web nos muestra el contenido de forma similar a:

 

 

Es exactamente el archivo que tenemos en la copia del repositorio que almacenamos (en local) en nuestra máquina.

 

Sin embargo, hay muchas ocasiones en las que nos conviene presentar la información de una forma más completa y más cuidada, con formatos de letra, datos tabulados, incluyendo enlaces e imágenes.

 

En nuestro repositorio podemos subir archivos de gráficos (PNG o JPG, p.ej.) y archivos Markdown (extensión .md) que github.com nos mostrará aplicando los formatos que establezcamos.

 

El lenguaje Markdown

 

Markdown es un lenguaje de marcado muy sencillo y ligero. Básicamente, lo que hace es convertir el texto marcado en documentos XHTML bien formados. Este lenguaje se basa en el uso de ciertos caracteres para incluir y usar ciertos tipos de formatos.

 

Por ejemplo, anteponiendo el caracter # a una línea de texto, convertiremos esa línea en una cabecera de primer nivel. Si anteponemos ## estaremos indicando que ese texto lo queremos como cabecera de segundo nivel:

 # Cabecera de primer nivel

 ## Cabecera de segundo nivel

 

Si una palabra o texto queda encerrada entre dos caracteres * estaremos poniéndola en cursiva, mientras que si la encerramos entre doble ** estaremos poniéndola en negrita:

  *cursiva*

 **negrita**

 

También podemos enlazar otras páginas o archivos, de forma que cuando github.com nos muestre el archivo .md formateado, veamos y podamos pinchar sobre un enlace (como estamos acostumbrados) para ir a otra página. La sintaxis para incluir un enlace es:

 texto fuera del [enlace](http://www.dominio.com/carpeta/archivo.html)

 

De la misma forma, github.com nos puede mostrar imágenes en el texto formateado, si las incluimos en el archivo .md con el formato:

 ![img](http://www.dominio.com/carpeta/archivo.png)

 

Existen muchos más formatos que podemos usar en un archivo .md pero con los vistos tendremos más que suficiente para crear documentos bien presentados para entregar los trabajos y prácticas. Al final de este mini-tutorial incluimos una serie de enlaces donde aprender todos los detalles del lenguaje, extensiones, etc.

 

Un ejemplo de uso

 

Vamos a hacer un ejemplo completo suponiendo que para la entrega de nuestra práctica-1 queremos entregar un archivo .md en el que mostremos los resultados con formatos de texto bien presentados e incluyendo una tabla de datos y una imagen.

 

Para ello, vamos a subir a la carpeta “practica1” de nuestro repositorio de la asignatura un archivo de texto plano con extensión .md y un archivo de imagen con extensión .PNG. El proceso a seguir es el mismo que vimos en el primer tutorial sobre git+github

 

Una vez que los tengamos subidos a nuestro repositorio remoto en github.com:

 

podemos obtener el enlace a la imagen (opción “Copiar enlace” de nuestro navegador):

 

 

Ahora estamos en disposición de editar el archivo .md que tenemos en nuestro repositorio para especificar los formatos, incluir un enlace, una imagen y una tabla.

 

En la primera parte de nuestro archivo Markdown incluiremos una cabecera de primer nivel (línea 1), texto plano sin formato (línea 4), una cabecera de segundo nivel (línea 6), una palabra en cursiva (línea 8), otra palabra en negrita (línea 10), y según la sintaxis que hemos visto antes, un enlace a Google (línea 12) e incluiremos una imagen que hemos subido al repositorio y de la que hemos obtenido la URL (línea 16):

 


Esta primera parte del archivo “fich.md” se nos mostrará en github.com como sigue
:

 

 

En la segunda parte de dicho archivo, vamos a incluir dos tablas (formato un tanto especial usando guiones, | y dos puntos) y una cabecera de tercer nivel (formato ###):

 

 

Esta segunda parte del archivo “fich.md” se nos mostrará en github.com como sigue:

 

 

 

Este lenguaje tiene una gran funcionalidad, siendo sumamente flexible, sencillo y ligero. Para conocer más detalles acerca del mismo, mostramos en la siguiente sección un buen número de páginas con tutoriales y páginas de ayuda.

Referencias

 

http://en.wikipedia.org/wiki/Markdown

http://es.wikipedia.org/wiki/Markdown

http://daringfireball.net/projects/markdown/

 

https://github.com/adam-p/markdown-here/wiki/Markdown-Cheatsheet

http://markdowntutorial.com/lesson/1/

https://guides.github.com/features/mastering-markdown/

https://help.github.com/articles/markdown-basics/

https://confluence.atlassian.com/display/STASH/Markdown+syntax+guide

 

http://xlson.com/2010/11/09/getting-started-with-github-pages.html

https://pages.github.com

 

http://www.tablesgenerator.com/markdown_tables

 

 

Trabajar con Git y GitHub

Para trabajar con este software de control de versiones, primero crearemos una cuenta en https://github.com y nos instalaremos el cliente de git (ver los enlaces al final del tutorial).

 

Una vez creada la cuenta en github.com para hospedar nuestro repositorio, vamos a la pestaña:

 

y creamos un nuevo repositorio. Será el repositorio “remoto” (el que está en github.com):

 

El trabajo del día a día lo haremos en nuestra máquina local (en la copia local del repositorio), y de cuando en cuando iremos subiendo nuestro trabajo al repositorio remoto.

 

Sólo tenemos que inventarnos el nombre del repositorio. Será público (gratuito), y querremos que lo inicialice con un archivo README, aunque esté vacío al principio:

 

 

Una vez creado, nos mostrará el contenido en ese momento. Sólo tendremos el archivo README:

 

 

Ya tenemos el repositorio preparado. Ahora podemos trabajar en nuestra máquina en local e ir subiendo las cosas al repositorio remoto (en github.com).

 

Para ello, copiamos la dirección de nuestro repositorio:

 

Y en el terminal de nuestro ordenador ejecutamos el git clone:

 

 

Ahora, en este tutorial, vamos a crear varias carpetas y archivos. Por ejemplo, la carpeta donde vamos a ir entregando los trabajos de clase y la carpeta para la práctica 1:

 

 

Antes que nada, debemos añadir esos archivos y carpetas al repositorio local, para que estén bajo el control de git. Si no, no podremos subirlas al repositorio remoto en github.com. Para añadir archivos, usamos el comando “add”, y para confirmar cualquier acción sobre el repositorio, el comando “commit” del git:

 

 

Con esto ya están bajo el control de git, pero aún no las hemos subido al remoto. Para ello, usaremos el comando “push” del git:

 

 

Obtendremos muchos mensajes y diversa información. El programa pedirá el nombre de usuario y contraseña para poder subir contenido al repositorio remoto. En la captura anterior no aparecen los mensajes correspondientes ya que para mi cuenta tengo configuradas las claves SSH de forma que no me solicite la identificación más.

 

Todo debe funcionar correctamente y quedar almacenado en el repositorio en github.com. Podemos comprobarlo desde la interfaz web:

 

 

Con esto habríamos entregado la práctica1 y un trabajo de clase. Si tras subirlo al servidor queremos modificar algo y actualizarlo en el repositorio remoto, sólo debemos trabajar con el archivo que corresponda en nuestra máquina en nuestra carpeta (en el repositorio local bajo el control de git):

 

 

Luego volvemos a usar los comandos “commit” y “push” del git:

 

 

Todo se actualiza en el repositorio remoto:

 

 

Finalmente, si quisiéramos eliminar uno de los archivos, usamos el comando “rm” del git, con lo que lo eliminamos del sistema de archivos local, y luego lo confirmaremos con el comando “commit” y con un “push”:

 

 

Y en el repositorio remoto desaparecerá el archivo:

 

 

Esta herramienta de control de versiones es tremendamente útil. Tiene muchas más funciones que éstas básicas comentadas aquí. En los enlaces al final de este documento se puede encontrar información adicional sobre cómo obtener el software cliente de git y sobre las posibilidades de esta herramienta.

 

 

Referencias

 

http://es.wikipedia.org/wiki/Git

http://rogerdudler.github.io/git-guide/index.es.html

http://gitimmersion.com/

http://git-scm.com/book/es/v1

http://www.psicobyte.com/descargas/ZenDeGit2.pdf

http://www.alvaroremesal.net/blog-alvaroremesal/recuperar-archivos-antigos-con-git

http://algunostutoriales.blogspot.com.es/2014/12/introduccion-git-chuletario-basico.html

https://github.com/oslugr/curso-git/blob/master/texto/uso_basico.md

 

http://guides.beanstalkapp.com/version-control/git-on-windows.html

https://msysgit.github.io/

 

http://www.thegeekstuff.com/2011/08/git-install-configure/

http://git-scm.com/download/linux

 

https://code.google.com/p/git-osx-installer/

http://guides.beanstalkapp.com/version-control/git-on-mac.html

http://ivanprego.com/programacion/como-instalar-y-configurar-git-en-mac-os-x/

http://coolestguidesontheplanet.com/install-update-latest-version-git-mac-osx-10-9-mavericks/