domingo, 14 de junio de 2009

Point in Time Recovery (PITR) en PostgreSQL

En la lista de correo de seguidores PostgreSQL Centroamérica dije que compartiría este manualito, y aquí va, no sin antes introducirlo tal como hice en el correo enviado a tal lista.

Por estos lados costarricenses donde me encuentro actualmente (aunque no por mucho tiempo), estoy metiendo PostgreSQL a todo dar en instituciones/empresas actualmente capturadas por otros SGBDs propietarios corporativos de nombres que no mencionaré porque los detesto.

Mi interés particular, aparte de las virtudes evidentes de PostgreSQL como SGBD relacional, es la configuración avanzada para ofrecer GRATIS algunas de esas cositas que en otros ámbitos llaman "herramientas de valor añadido" (es decir, de costo $$,$$$ agregado). Por ejemplo, ya conseguí configurar el respaldo incremental (y/o Point In Time Recovery), elaboré un "howto" al grano en español entendible que copiaré y pegaré a continuación.

Lo siguiente es ver si logro configurar un PGCluster (replicación síncrona) para poder afirmar con rotundidad que la replicación/alta disponibilidad es perfectamente posible y funciona de lo más bien en PgSQL: , pero esto ya es harina de otro costal, muchísimo más enrevesado el asunto que un archive_mode=on y demás.

Y ahora sin más dilación, el manualito del PITR (sobre Debian GNU/Linux Lenny).



Deben establecerse en el postgresql.conf (/etc/postgresql/8.3/main/postgresql.conf)

archive_mode = on
archive_command = 'test ! -f /var/backups/postgresql/%f && cp %p /var/backups/postgresql/%f'

# Poner un valor distinto de 0 sólo si necesito forzar la
# creación de un backup incremental cada XXX segundos
archive_timeout = 300

Lo importante es decidir donde van a enviarse los ficheros de respaldo (ojalá un servidor o dispositivo de almacenamiento remoto). Pueden ver que yo indiqué /var/backups/postgresql, pero eso no tiene que ser así en absoluto. El directorio donde vayan a almacenarse (p.e. /var/backups/postgresql) debe pertenecerle al usuario postgres (o éste usuario postgres deberá tener permiso de escritura). Si no es así, o el comando no funciona por algún motivo, PostgreSQL no podrá trasladar los ficheros incrementales y se quedarán acumulados en su lugar por defecto, es decir,
en el pg_xlog hasta que tal circunstancia se resuelva.

Obviamente la partición donde esté el pg_xlog/ podría llenarse. En caso de que eso suceda, PostgreSQL hará un PANIC shutdown, lo que implica que no se pierde ninguna transacción, pero hasta que no haya algo de espacio, la BD no podrá levantarse nuevamente. Si todo va bien, en el pg_xlog/ sólo se mantienen los 9 últimos ficheros.

Cuando algo sucede con el comando de traslado, queda registrado en el log de postgresql, así que un vistazo de vez en cuando no está mal.

Cuando todo está preparado, se puede hacer un restart de postgresql:
/etc/init.d/postgresql-8.3 restart

Hacer un backup

1) conectarse al SGBD con el usuario postgres y ejecutar la sentencia

select * from pg_xlogfile_name_offset(pg_start_backup('/var/backups/postgresql'));

Ojo al nombre del fichero que devuelve, es el fichero que contiene los cambios desde ese instante y deberán guardarse tanto ese como los sucesivos para que el backup esté completo. Los anteriores ficheros pueden ignorarse.

2) salir de la sesión en el SGBD y hacer una copia completa del directorio donde está el cluster

cd /var/lib/postgresql/8.3

tar czf /dondesea/completo.tar.gz main/

(este último comando puede tardar bastante, todo depende de lo gorda que sea la BD)

3) volver a entrar al gestor como usuario postgres y realizar

select * from pg_xlogfile_name_offset(pg_stop_backup());

la salida dice cual es el último fichero con transacciones durante la realización del backup.

Habrá que mover el backup completo a su destino definitivo, así como los ficheros incrementales de /var/backups/postgresql a partir del que dijo el start_backup hasta el que dijo el stop_backup al dispositivo donde se vaya a realizar el backup.

Listo!

Recuperar un backup

Para poder restaurar necesitaremos el backup completo así como los ficheros incrementales que se generaron durante el respaldo (entre el start y el stop) y los posteriores que se hayan ido generando. Yo puedo restaurar hasta un punto dado en el tiempo (de hecho esta virtud es de lo más ideal aparte de reducir el tamaño de los backups), por lo que no hay problema si lo que necesito es recuperar datos borrados antes de un momento en concreto y tengo ficheros incrementales posteriores al desastre.

Éste es el procedimiento:

1) Parar postgres

2) Eliminar todo lo que haya dentro del directorio del cluster (p.e. /var/lib/postgresql/8.3/main)

3) Como usuario postgres, descomprimir el fichero de backup completo

Copiar los ficheros incrementales respaldados en el pg_xlog (p.e. /var/lib/postgresql/8.3/main/pg_xlog). Ojo, todos los ficheros y directorios dentro del main le deben pertenecer a postgres, si hacemos cosas como root, quizá sea adecuado un chown -R postgres main/.

Crear un fichero de instrucciones de restauración denominado "recovery.conf" en el directorio del cluster (p.e. vi /var/lib/postgresql/8.3/main/recovery.conf).

Indicar en él qué se debe hacer para restaurar. Lo más básico es poner donde están los ficheros de restauración y hasta qué momento queremos restaurar, por ejemplo:

restore_command = 'cp /var/lib/postgresql/8.3/main/pg_xlog/%f "%p"'
recovery_target_time='13/05/2009 12:55:47.548867 CST'

4) como root

Antes de arrancar la BD, puede ser importante impedir que se conecte nadie al SGBD para asegurar previamente que todo está en orden: para ello únicamente es necesario modificar el pg_hba.conf.

Para que no haya problemas, antes de reiniciar, es conveniente limpiar el directorio donde se estaban haciendo la transferencia de ficheros incrementales para que no se encuentre con uno que ya exista y quede detenido el traslado.

Entonces podemos ya arrancar el servidor.

Pueden verse en la bitácora /var/log/postgresql/postgresql-8.3-main.log los efectos de la restauración: el servidor procede a leer los ficheros incrementales hasta el punto en tiempo dado.

Una vez concluida la restauración, el recovery.conf es renombrado a recovery.done

Podemos comprobar que todo se restauró como debía hasta el momento que se indicó (es increíble ver como tablas borradas/actualizadas por error vuelven a la vida como si nada).

Lo último que resta es habilitar el acceso de los usuarios en el pg_hba.conf (si es que lo habíamos deshabilitado) y recargar la configuración con un /etc/init.d/postgresql-8.3 reload.

Listo!

LIMITANTE IMPORTANTE: lo que se está resguardando es TODO el cluster, es decir, todas las BDs contenidas en él. Si hacemos una restauración devolveremos TODAS las BDs a ese punto en el tiempo... y lo más probable es que el desastre sólo ocurriera en una de ellas. En tal caso, lo único que se puede hacer es hacer la restauración hasta un punto donde esté la/s tabla/s defenestrada, sacar un copy de dicha tabla a un archivo (o un pg_dump de la BD en cuestión mucho mejor), volver a repetir la restauración sin indicar un punto en el tiempo y entonces, con los datos sacados del copy al archivo o el dump, arreglar la tabla en cuestión (o la BD con un pg_restore).

De donde saqué todo esto? de la doc. oficial, para mi gusto bastante espesa:
http://www.postgresql.org/docs/8.3/interactive/continuous-archiving.html

miércoles, 18 de junio de 2008

El Parásito Informático

No me cabe la menor duda, ante semejante título cualquiera pensaría que voy a describir las características de cierto software maléfico conocido en general como “virus” y las molestias que éste produce. No es que su efecto dañino sea en absoluto ignorable, sin embargo, comparado con los desastres que produce el software que describiré a continuación, los insignificantes virus informáticos quedan exactamente del tamaño que les corresponde en la vida real. En efecto, bien conocida es su enorme apariencia (y registrada y protegida), pero es como un catastrófico mal hereditario, y es que el 94% [nota 1] de las computadoras desktop domésticas y corporativas padecen congénito el Síndrome de Inmunodeficiencia Adquirida, también conocido en el mundo informático como Microsoft® Windows® y otras herramientas de la conocida marca.

Cualquiera es capaz de reconocer, inclusive quienes defienden a ultranza el paradigma del software propietario, que esta enfermedad neonatal hace que la computadora, así desnudita, tal y como vino al mundo, sea la anfitriona perfecta de cualquier bacilo que pulule por el aire de las redes o bien que se oculte infecto en todo tipo de dispositivo de almacenamiento: donde antes los diskettes de 3½” eran el vector de transmisión favorito, cual chinche de Chagas, hoy son las “llaves mayas” el Aedes Aegypti cebreado que aloja los dengues que seguro contagiarán a las pobres computadoras recién paridas.

Y uno se pregunta, ¿es que acaso es obligatorio sufrir tan macabro destino?, ¡pues no!, pero antes revelar la solución, debe exponerse que usted probablemente pagó una buena suma para que su herramienta de trabajo (y quizá centro de diversión) viniera con tal defecto incorporado. ¿Quién osaría hoy día poseer una computadora sin Windows® y sin Office®?, sería como tener un cuerpo sin corazón y sin manos: pues su corazón ventaneado costó no menos de $120 [nota 2] y sus manos ofimáticas $150 [nota 3], probablemente la tercera parte del precio de su nuevo equipo informático.

Usted puede espetarme en este mismo momento que por ambas cosas (y quien sabe cuantas más) no pagó un solo colón, pues cuando le propusieron tal desembolso, decidió ponerse un parche en el ojo para ignorar la parte de la realidad que no le gustaba y surcar los procelosos mares de la piratería, lo que es totalmente posible aunque arriesgado, pues tras la firma del CAFTA, quién sabe qué leviatanes [nota 4] pudieran emerger hasta hundirle el barco y remitirle a las autoridades portuarias para meterle entre rejas.

Y en este punto está la mayoría de las personas usuarias de las mencionadas herramientas, las estrellas rutilantes de la computación propietaria: aquellas que decidieron pagar por ética, por inconsciencia económica o por el miedo a la represalia, invirtieron una fuerte suma para tener problemas a corto plazo en cualquier caso; por otro lado, quienes decidieron navegar los océanos sacrificando su integridad y coherencia, igualmente se exponen a los despiadados huracanes avivados por el “calentamiento global” del software.

Desde un punto de vista individual es ciertamente dramático, pero yo no quiero centrarme en cada persona, por mucho que me despierte enorme simpatía el problema particular ajeno. Mi interés principal en esta discusión escrita es el efecto tenebroso que tiene este tipo de software a nivel de las instituciones públicas y empresas de cualquier país periférico: aquí es donde la definición de parásito se adapta a la perfección a estos síntomas. Las empresas formales e instituciones del Estado, sometidas al escrutinio permanente, únicamente pueden optar por la legalidad, con el consecuente drenaje de sangre monetaria que engordará abundantemente bolsillos de accionistas en las metrópolis de las correspondientes multinacionales, dejando apenas unos cuantos infames salarios en sus representaciones locales y las respectivas comisiones a los/as abogados/as encargados de fiscalizar que esta tenia intestinal del software siga ingiriendo su parte de presupuesto nacional.

Qué pena que los diferentes gobiernos de turno sigan agachando la cabeza (y poniendo la mano bien abierta, por si cae algo), ¿pero podría esperarse algo diferente de la clase política?, la verdad, no. La tristeza sin embargo se transforma en absoluto terror cuando contemplo como en las Universidades, venerables instituciones que enarbolan misión, visión y cualquier cantidad de principios sobre empatía popular y la defensa del prójimo a través del desarrollo y redistribución del más alto conocimiento, algunas personas propugnan este modelo propietario como el único modo de subsistencia informática y no sólo ignorando la existencia de las alternativas, sino que las ocultan a propósito o mienten al respecto de la calidad y viabilidad de estas otras posibilidades, condicionando con ello horriblemente a los/as futuros profesionales.

Pues que no me perdonen los/as vetustos/as catedráticos/as de la apatía académica, de la falsedad interesada y la más descarada transfusión de prostitución intelectual, que voy a contradecir en este Mayo de 2008 (ya hace 40 del afamado 68) sus lecciones putrefactas: muchas personas (y no precisamente peludos/as hippies) descubrieron finalmente arena de playa y no bajo los adoquines de las calles de París, sino en las costas del océano de Internet. En esta inmensidad virtual se entendieron sin necesidad de pactar y/o pagar un precio por su tiempo, y decidieron que era más interesante, mucho más productivo y en todo caso altamente beneficioso compartir en lugar de esconder, preferiblemente regalar antes que vender, y mil veces más humano colaborar en vez de competir. En ese afán, que otros vaticinaron al principio como “utópico” y que posteriormente descalificaron como “maligno”, produjeron una medicina absolutamente real, y que funciona bien como vacuna preventiva o bien como antibiótico sanador del egoísmo y corrupción tecnológica: me refiero, por supuesto, al software libre [nota 5].




http://en.wikipedia.org/wiki/Usage_share_of_desktop_operating_systems (Datos de Junio 2008)

Las versiones de Windows consideradas en el estudio son 98, 2000, XP y Vista.




Precio de Microsoft Windows Vista Home Basic (versión no Upgrade). Es la versión de Windows más barata a la venta pues los distribuidores, salvo contadas excepciones, no ofrecen Windows XP preinstalado por acuerdos realizados con Microsoft (DELL, HP, etc.).

http://www.windowsmarketplace.com/category.aspx?bcatid=2800




Precio de Microsoft Office 2007 versión Home Student (Word, Excel y PowerPoint). La versión más barata de Office no incluye PowerPoint, que es una herramienta fundamental.

http://office.microsoft.com/en-us/suites/FX101754511033.aspx




Business Software Alliance http://www.bsa.org





Software Libre: http://es.wikipedia.org/wiki/C%C3%B3digo_libre

Sistema Operativo que recomiendo para desktop: Ubuntu GNU/Linux http://www.ubuntu.com

Sistema Operativo que recomiendo para servidor: Debian GNU/Linux http://www.debian.org

Herramientas de ofimática: OpenOffice.org http://es.openoffice.org

Navegador y cliente de correo: Mozilla Firefox y Thunderbird http://www.mozilla.com

NOTA: este ensayo fue escrito totalmente en una computadora laptop utilizando Debian GNU/Linux 4.0r3 y OpenOffice.org 2.4.

lunes, 19 de marzo de 2007

Primera!

Estoy estrenando este espacio, ojalá pueda ir publicando todos los disparates que se me ocurren, :-D