Archivo de Autores para Miguel Angel Guillen

01
jul
09

Mysql-zrm backup de la base de datos

mysql-rzm es una serie de herramientas que nos facilitan el hacer backups y que es sencillo de actualizar. Creamos un directorio en /etc/mysql-zrm y creamos dentro un fichero que se llame “mysql-zrm.conf”.

host=”192.168.122.40″
database=”appDB”
password=”passb”
user=”dba-backup”
compress=1
destination=”/mnt/backup”

Ojo, no atacamos al proxy porque mysqlproxy no maneja uno de los protocolos que usa mysql-zrm.

Ahora solo nos queda usar mysql-zrm-schedule para ello, con la aplicación podemos indicar la frecuencia de los backups.

01
jul
09

Resumen de los últimos días (II)

Como comente en el post anterior las maquinas MySQL tuvieron que ser reinstaladas, el motivo un problema con la paqueteria de openSolaris y los servicios, calculé que tardaba menos reinstalando y así hice, una vez instalado simplemente instalar SUNWmysql51 y ya tenemos mysql.

Balanceo con mysql-proxy

Primero es activar el demonio en debian, por defecto no viene activado para usarse pues hay que configurarlo previamente, vamos a /etc/default/mysql-proxy donde lo dejamos así:

ENABLED="true"
OPTIONS="--proxy-address=192.168.122.154:3306
--admin-address=:1337
--proxy-backend-addresses=192.168.122.40:3306
--proxy-backend-addresses=192.168.122.41:3306"

Básicamente le decimos que escuche una dirección(192.168.122.154:3306) y que balancee con los configurados con proxy-backend-addresses (usa round-robin). También dejamos abierto escuchando solo localhost el administrador por si necesitamos monitorizar el balanceador.

Con esto ya tenemos balanceados los dos clientes, ahora solo falta que estén sincronizados el uno con el otro y se repliquen los datos. Para ello he seleccionado replicación de solo la base de datos para la aplicación que se llamara appDB, que usará un usuario appUSER. Como hacer replicación master to master hay muchos manuales, pero si indicaré lo clave para esta configuración:

binlog-do-db=appDb
binlog-ignore-db=mysql

auto_increment_increment= 2
auto_increment_offset   = 1

Esa parte de la configuración (en my.cnf) esta en ambos nodos(en el segundo o master 2 es “auto_increment_offset   = 2″ en vez de 1), aquí decimos explícitamente que cuando replique los datos no replique la base d datos mysql y solo appDB. Las dos ultimas es la configuración del auto-incremento, cuando tenemos el auto-incremento en una tabla por cada fila inserta un id numérico secuencial, con esta configuración uno llevara los pares y otros los impares.  Se puede configurar de muchas maneras (que cuente de 10 en 10 y empiece en 5, teniendo la secuencia “5,10,15,…”) para evitar colisiones.

Resumen de maquinas

Con esto mysql ya lo tenemos balanceado y sincronizado, en mi estructura mysql-proxy se encuentra en la misma maquina virtual que el apache proxy, para que se tengo las siguientes:

  • glassfish  -> openSolaris con glassfish
  • glashfish2 -> OpenSolaris con glassfish
  • mysql -> openSolaris con MySQL
  • mysql2 -> openSolaris con MySQL
  • nas -> Opensolaris con raidz con sistema de ficheros compartido
  • proxy -> Debian lenny con mysql-proxy y Apache2

Básicamente esta casi acabado solo falta el firewall y backup, en la próxima entrada explicaré como hacerlo y como voy hacer el test de funcionamiento.

01
jul
09

Resumen de los ultimos días

Llevo unos días sin escribir, el motivo principal ha sido las constantes caídas de las maquinas virtuales, mi equipo no es muy potente y tengo el procesador al 100 el 90% del tiempo, las maquinas solaris arrancan una vez si otra no, y el proxy debian murió sin más el sistema de archivos(con su consiguiente kernel panic), lo gracioso es que fui a rescatar las configuraciones en /etc y era exactamente el directorio muerto (enlace muerto). Así que volver empezar, así que en resumen estas son las instalaciones repetidas:

  • Los dos opensolaris con mysql(llamados mysql1 y mysql2)
  • El Proxy debian
  • Re-configurar todo otra vez

Lo gracioso es que siempre se rompias cuando iba a configurar el backup de todas pues el servidor nas ya estaba.

La otra gran parte del tiempo he estado investigando de ipmp (IP MultiPath), la verdad que como tecnología es una cosa grandiosa que debería existir en otros S.O. pero en este caso no podía utilizarlo, para entenderlo voy a explicar en que consiste. IPMP nos permite balancear y tener a prueba de fallos dispositivos de red físicos( y a partir de ahora también virtuales), para ello creamos un grupo del cual tiene una IP que responderá por el grupo y enviando al los dispositivos activos, existen básicamente dos configuraciones uno es “activo-activo” y otro “activo-en espera”, el segundo es el caso que se activa un dispositivo cuando se cae el principal, el primero balancea entre todos los dispositivos.

Bueno ya explicado se podría configurar una maquina virtual (LDom por ejemplo) que escuchara un dispositivo y otra maquina otro, así podríamos disponer de un balanceador a nivel de red si tenemos el mismo servicio en ambas maquinas virtuales. Este esquema no me es posible al tener ya todo virtualizando, el virtualizado del virtualizado es muyyyy lento y si la cosa la tengo ajustada eso podría terminar de apretar más el cinturón.

Así que busque un esquema más clasico, un simple mysql-proxy, que me da más juego pues permite ejecución de scripts lua, también he mirado lo de iptables lo que no me acordaba es que el failover es manual por tanto no sirve(habría que hacer un daemon especial y el tiempo anda justo sorry). También estuve peleandome con el squid pero he optado por otra solución mejor, apache, es más robusto y configurable,  permitiéndome jugar con las direcciones ademas de darme una interfaz web al balanceador. Entonces los cambios son:

  • Squid-> Apache
  • IPMP->mysql-proxy

Apache tiene una configuración sencilla pero robusta, usa los módulos proxy, proxy_balancer, rewrite y proxy_http. Debido a un cambio en la ultima versión proxy se desgloso en varios módulos (http, ftp, etc…) y tiré horas para saber que tenia que habilitar este, pues los manuales era para versiones anteriores (etch). Así que más tiempo gastado por cambios de versión, pero al final quedo muy bien:

<VirtualHost *:80>
ServerName proxy.abstracctest.com
ServerAlias abtracctest.com

RewriteEngine On
ProxyRequests Off

<Proxy *>
Order deny,allow
Allow from all
</Proxy>

<Location /balancer-manager>
SetHandler balancer-manager
Order Deny,Allow
Deny from all
Allow from 192.168
</Location>

<Proxy balancer://mycluster>
BalancerMember http://192.168.122.50:8080 route=w1
BalancerMember http://192.168.122.51:8080 route=w2
</Proxy>

<Location /clusterjsp>
Order allow,deny
Allow from all
</Location>

ProxyPass /clusterjsp balancer://mycluster/clusterjsp/ stickysession=JSESSIONID

<Location />
Order allow,deny
Allow from all
</Location>
ProxyPass /balancer-manager !
ProxyPass / balancer://mycluster/
</VirtualHost>

Laresolución es sencilla, activamos el proxy (abrimos la puerta con allow all), despues activamos el balanceador y ponemos los miembros de balanceo(aquí hay muchas opciones por si el balancio no es igualitario por ello no hay más) importante el “route=wx” pues es lo que nos sirve para distinguir los servidores a la hora de enrutar (para ello en cada instancia de glassfish en el panel de administración hay que añadir al servidor la opcion  “-DjvmRoute=wx” a la JVM de cada instancia). Tambien destacar el stickysession=JSESSIONID que nos permite tener sticky sessión, en mi ejemplo para probarlo use el ear que viene de demostración cluster con glassfish, en caso de ser PHP y apache seria BLANCEID. Cuando se deploye la aplicación con quercus(php en java) se verá si funciona con una opción u otra.

Mañana a primera hora explico mysql-proxy que ha sido un bonito descubrimiento, ademas de la construcción de un master to master con mysql.

26
jun
09

cosas de zfs

Advertencia:

Este post es un resumen de los pequeños problemas que me he ido encontrando con ZFS, no describe el proceso de creación ni quiero que sea evaluador, simplemente es para anotarme cosas de el proceso de aprendizaje.

Prefacio

En el ultimo día me estuve peleando con zfs el fabuloso sistema de ficheros de opensolaris, solaris, freebsd, etc… ha sido un gran descubrimiento ver su potencial pero aun así hay cosas que me gustaría comentar de este sistema de ficheros en opensolaris.

Documentación

La documentación en el wiki de opensolaris es muy extensa y muy grande, quizás excesivamente grande se puede perder uno con facilidad, un poco de orden estaría bien al igual que una sección newbe. Aun así se encuentra todo y se agradece una documentación completa para poder indagar.

Referencias a la GUI

Hay muchas referencias a una gui para gestionar zfs y otros servicios en solaris y que se referencia en opensolaris y no esta, tuve que indagar en los foros un poco para ver que ocurría, y al final es tan simple que la gente instala este servicio de solaris en opensolaris.

Nombres SUN

En los productos Sun le gusta poner nombres a todo, y al final se pierde mucho uno en la nomenclatura y pierde el fondo de lo que esta trabajando por debajo, pero bueno es acostumbrarse, si has trabajado con java sabes que ocurre mucho.

26
jun
09

Resumen del Jueves

El jueves continué por donde me había quedado, el servidor nas. Tuve que reinstalar pues parece que hubo algún problema en la instalación, una vez reinstalado empecé a hacer el raid5. ZFS provee de varios mecanismos para hacer raid el equivalente a raid5 es raidz, en mi caso utilice raidz2 para ello. Los dispositivos primero añadí tres discos de 8GB y los configure con driver sata.

nas virtualbox

nas virtualbox

Una vez ya añadidos solo tuve que crear el pool con el comando zpool( existe una GUI en Solaris para realizar estas tareas desde web facilitando la instalación de estos recursos)

pfexec zpool create zpool raidz2 c9t1d0 c9t2d0 c9t3d0

Después creamos el sistema sobre el que vamos a montarlo(ZFS):

pfexec zfs create zpool/media

ZFS tiene un interfaz de comandos muy potente que nos permite configurar el sistema muy completamente pudiendo configurar el pool

zfs set compression=on zpool
zfs set setuid=off pool
zfs set exec=off pool

En este caso el sistema no va a guardar ejecutables solo datos, por ello desactivar el uid y los permisos de ejecución es añadir seguridad al medio, adicionalmente también podemos comprimir el sistema pero como el equipo no esta sobrado de cpu lo desactivé.

Compartir el pool en la red es muy sencillo por ello he creado dos distintos, unos compartido en nfs y otro en cifs(samba).
Instalamos cifs

pkg install SUNWsmbs SUNWsmbskr

después iniciamos el servicio

svcadm enable -r network/smb/server

Aquí tuve problemas pues no quería arrancar el servicio, pero bueno lo arregle desactivandolo y volviendo a activarlo.

Como he dicho he creado otro sistema dentro del pool media2

zfs create -o casesensitivity=mixed zpool/media2

La razón de esto es evitar problemas con windows pues no al pasar los ficheros se convierten todos los caracteres del nombre de fichero a minúsculas. Ahora solo falta activar la compartición.

zfs set sharesmb=on zpool/media2

Para compartir por nfs es muy parecido

zfs set sharenfs=on zpool/media

Ahora solo faltaría activarlo en los clientes, pero eso lo dejo para el próximo día antes vamos a activar el sistema de snapshots, zfs nos deja guardar instancias temporales de un pool o directorio para ello lleva una interfaz gráfica que lo que hace es activar el servicio zfs snapshots de la siguiente manera

frequent snapshots every 15 mins, keeping 4 snapshots
hourly snapshots every hour, keeping 24 snapshots
daily snapshots every day, keeping 31 snapshots
weekly snapshots every week, keeping 4 snapshots
monthly snapshots every month, keeping 12 snapshots

y desde el navegador de archivos podemos recuperar los ficheros en un momento determinado. En el próximo post podre screenshots de ello.

Hoy es el ultimo día en España de mi novia en muuucho tiempo así que hoy viernes no podre tampoco trabajar, por ello el sábado y el domingo me toca trabajar a tope :) .

24
jun
09

Resumen del martes

Este martes continué el proyecto, me tocó reinstalar la Debian pues parece que no termino bien la instalación y el sistema era inservible. Una vez acabado instalé el OpenSolaris para el glashfish, por suerte en el sistema de paquetes lleva ya una versión para instalar (pkg install glassfishv2). Esta versión inicialmente no crea ninguna zona (glassfish trabaja con zonas, mayor comodidad respecto por ejemplo jboss) por tanto hay que crear una zona para trabajar

pfexec asadmin create-domain --user admin --adminport 4848 domain-php

Nos preguntara dos passwords a la hora de generar la zona, una vez hemos acabado tenemos que crear el servicio

pfexec asadmin create-service --type das --passwordfile password.txt /var/appserver/domains/domain-php

En el fichero password.txt va los passwords de los servicios de la siguiente manera
AS_ADMIN_USER=admin
AS_ADMIN_PASSWORD=adminadmin
AS_ADMIN_MASTERPASSWORD=changeit

Y poco más, ahora solo tenemos que hacerlo funcionar y ver el estado del servicio

svcadm enable domain1
y para ver el estado

svcs -x domain1

También he estudiado que firewall añadir, me interesa que la maquina debian no lleve ningún tipo de interfaz, solo la shell y acceder desde ssh solamente, en opensalaris esta pendiente deshabilitar el modo gráfico para que solo se acceda por ssh, pero de momento por comodidad se deja en marcha.

Según el wiki de debian lo ideal seria un shorewall aunque he mirado y Vuurmuur tiene muy buena pinta, el problema es que no esta en lenny por lo que parece.

También he puesto otra instancia de OpenSolaris para toquetear un poco con ZFS, y empezar el nas.

De los objetivos de ayer solo se ha quedado pendiente el ipmultipah, que retomo el jueves. Hoy miércoles me es imposible retomar el proyecto debido a que he ido al medico por la mañana y la he perdido por completo, y esta tarde estaré con mi chica que se va un año al extranjero, de todas formas hay tiempo y lleva buen ritmo y antes del día dos estará acabado y testado.

23
jun
09

Resumen del Lunes

Hoy ha sido un día duro, he tenido que recuperar algo de información y empezar a encontrarme los primeros problemas, vamos empezando.

Resumen de hechos:

  • Instalación de la debian para proxy
  • Instalación de OpenSolaris para MySql (posible reinstalación)
  • Instalación de los módulos de RAM nuevos
  • Actualización de la BIOS
  • Configuración de VirtualBox

Perfil del Anfitrión

El anfitrión con el sistema de virtualización es el siguiente:

Linux localhost.localdomain 2.6.29.4-167.fc11.i686.PAE #1 SMP Wed May 27 17:28:22 EDT 2009 i686 athlon i386 GNU/Linux

7GiB System Memory

AMD Athlon(tm) 64 X2 Dual Core

Y el sistema operativo anfitrión es Ferdora 11.

Posteriormente paso el lshw para un análisis completo.

Configuración de Virtualbox

Para que los servicios funcionen de cara al exterior y se comuniquen entre ellos necesitamos un dispositivo bridge, aparte para poner direcciones estáticas y así tener mejor controlado los equipos cuando estén en host-only (son pocos y un servidor dhcp es innecesario para este asunto).

En este caso en preferencias de Virtualbox tenemos los cambios a realizar en red, también configuramos las maquinas virtuales para que funcione con el dispositivo bridge que tenemos (se genera al instalar VirtualBox).

Problemas de hardware

Uno de los problemas que uno quiere es encontrarse con problemas de hardware, el principal es la falta de ram pues cuando estaba haciendo cálculos de recursos que iba a necesitar la ram era critica, solo había tres Gigabites de memoria y solo las maquinas solaris ya consumían cuatro y medio o cinco. He comprado cuatro gigas nuevos pero mi equipo se negaba a usarlos congelando el arranque de fedora, así que he investigado y era problema de la BIOS así que te nido que preparar un freedos en un stick usb y los programas adecuados, averiguar que opciones de freedos necesitaba y actualizar, ha sido más largo de lo que quería pues los fallos podían ser muchos y tuve que comprobar uno a uno. Una vez puestos ya podía usarlos pues fedora lleva de serie un kernel con PAE activado.

Instalación de la Debian

Ya tengo lista la debian para trabajar con ella, solo falta comprobar que squid venga con soporte de x-forward sino tendré que recompilar el paquete para poder balancear. Las opciones de la instalación se la he dejado al instalador de debian que me ha dejado un sistema de particiones muy bueno (divide y clacula el espacio para /tmp /var, /usr, etc…

Disco virtual de 8 Gigabites

Instalación de OpenSolaris

La instalación ha sido muy sencilla pues el instalador es como el de ubuntu pero más simplificado, me queda ver como va el particionado pero me parece que con ZFS no es necesario al tener volúmenes lógicos. Se ha instalado Mysql
pfexec pkg install SUNWmysql5
y Vpanel para mysql, seguramente también instalaré phpmyadmin para poder explorar fácilmente mysql, pero se quedará como opcional.

El Martes

Para el martes espero poder instar la otra instancia de mysql configurar la ipmultipath, instalar glashfish con soporte php y hacer un test de squid.

21
jun
09

Presentación y esquema

Diagrama prueba

Diagrama prueba

Hola, voy a presentar el esquema de lo que sera el proyecto para la prueba:

- Un servidor proxy que balancea con round robin sobre Debian GNU/Linux (un router puede substituir físicamente este sistema)

- Dos equipos que que tienen virtualizados dos sistemas OpenSolaris, uno para un servidor de aplicaciones Glashfish y otro para Mysql, los servidores están sincronizados mediante una replicación master to master.

- Servidor NAS que provee en este caso de las particiones temporales al proxy y provee a a los servidores mysql de sistema de backup. Este sistema es un OpenSolaris con ZFS que tiene una serie de discos en raid 5.

De aqui sacamos una pequeña lista inicial de tareas:

  • Instalación de Opensolaris para glashfish y mysql (luego replicamos el disco duro).
  • Instalación de Debian para proxy.
  • Instalación del servidor NAS con Opensolaris.
  • Configuración de los servidores Mysql para replicación.
  • Configuración del Proxy con balanceo.
  • Configuración del Firewall en el Proxy.
  • Configuración de IPmultipath o iptables para atacar una unica ip a los servidores mysql.
  • Configuración del Servidor de NAS por CFIS o NFS(aún en estudio).
  • Configurar la aplicación PHP para que funcione en glasfish con Caucho Resin.
  • Configurar el sistema de backup de MYSQL.
  • Configurar el sistema de Ip’s de proveedor virtual.
  • Automatización de actualizaciones y envíos de correos de seguridad.
  • Realización de test de prueba.
  • Realización de test de seguridad.

Según se vaya realizando el progreso la bitácora se actualizara con los cambios diarios o según progreso.




Seguir

Get every new post delivered to your Inbox.