Documentación
Ganchos TKLBAM
Esta página de documento se basa en este blog post.
TKLBAM tiene un mecanismo de ganchos de propósito general nifty que puede utilizar para activar acciones útiles en la copia de seguridad y restauración.
Ejemplos de ganchos:
- Limpieza de archivos temporales
- Servicios de parálisis/iniciación para aumentar la coherencia de los datos
- Codificación/decodificación de datos de bases de datos no compatibles
- Utilizando LVM para crear/restorer una instantánea de un volumen de cambio rápido
El mecanismo de ganchos fue desarrollado originalmente para poder solucionar algunos problemas indirectamente relacionados con la usabilidad de TKLBAM. En particular, nuestros primeros usuarios beta informaron que a veces la restauración tklbam no encontraría ningún volumen de respaldo. Cuando investigamos esto resultó ser una discrepancia de reloj. La solución obvia era sincronizar el reloj antes de comenzar la restauración, pero cuanto más pensaba en ello más la idea de cablear duro que ntpdate me frotó de la manera equivocada. Por algunas razones:
- Es un problema auxiliar, no un problema central con la lógica de TKLBAM
- Estoy fuera de línea mucho tiempo durante el desarrollo así que necesitaba alguna manera de apagar esto, pero no quiero añadir más código específico de pruebas a menos que sea absolutamente necesario.
- Está bien si un servidor específico (por ejemplo, pool.ntp.org) es el predeterminado, pero debe haber alguna manera de configurarlo si un usuario, por ejemplo, quiere utilizar un servidor NTP interno.
Intenté pensar en una manera limpia de lograr estos objetivos simples de una manera limpia (por ejemplo, opciones de cli, variables de entorno, archivos de configuración), pero todo lo que me inventé fue Tan feo.
Entonces me di cuenta de que un mecanismo de ganchos resolvería este problema de una manera simple, genérica.
Aplicación
/etc/tklbam/hooks.d puede contener ejecutables (por ejemplo, scripts) que serán operados por tklbam antes y después de dos operaciones (actualmente):
- respaldo
- restaurar
Dos argumentos se transmiten a los ganchos:
- operación: restauración/retroalimentación
- estado: pre/post
Los códigos de salida no cero elevan un HookError.
Ventajas
En un solo golpe, resolver el problema del reloj y también permite a los usuarios avanzados definir sus propios ganchos para cuidar las cosas que TKLBAM no (por ejemplo, detener los procesos intensivos de IO antes backup, codificación/decodificación de bases de datos no compatibles, etc.)
Gancho de fijación de ejemplo
import os
import sys
import executil
from string import Template
NTPSERVER = os.environ.get("NTPSERVER", "pool.ntp.org")
ERROR_TPL = """\
##########################
## FIXCLOCK HOOK FAILED ##
##########################
Amazon S3 and Duplicity need a UTC synchronized clock so we invoked the
following command::
$COMMAND
Unfortunately, something went wrong...
$ERROR
"""
def fixclock():
command = "ntpdate -u " + NTPSERVER
try:
executil.getoutput(command)
except executil.ExecError, e:
msg = Template(ERROR_TPL).substitute(COMMAND=command,
ERROR=e.output)
print >> sys.stderr, msg,
sys.exit(1)
def main():
op, state = sys.argv[1:]
if op in ('restore', 'backup') and state == 'pre':
fixclock()
if __name__ == "__main__":
main()Para más información, discusión y comentario, consulte blog original por Liraz.