lunes, 22 de noviembre de 2010

Centos 5x: Herramientas de desempeño de disco duro

Tenemos 2 tipos de raid comunmente usados, Raid-5 y Raid-10. Ahora uno puede comprar una tarjeta controladora que soporta estos y muchos mas, el unico detalle es que muchas no tiene drivers para Linux/Unix y sus herramientas de monitoreo requieren modulo grafico para poder usarlas.

Bien desde que conoci a md en Linux o gmirror en FreeBSD he optado por llevar a cabo mis arreglos via software con estas 2 herramientas.

Ahora que herramientas tenemos a la mano Open Source que podamos usar para ver el desempeño de nuestros discos duros o arreglos?

Aqui muestro algunas de ellas y las herramientas que podemos usar para capturar la informacion para posteriormente analizarla y tomar una decision sobre cual de los arreglos nos proporciona el mejor desempeño.

Vamos empezando por las internas, las que siempre vamos a encontrar en Linux, especificamente hablando de Centos.

Antes de continuar vamos a ver que herramientas vamos a usar para monitorear, bueno yo estoy usando a dstat, ya que me permite capturar toda su informacion en un archivo csv para posteriormente analizar.

Estos son los parametros que uso:

dstat -c -C 0,1,total -d -i -g -m --noheaders --output=nombredearchivo.csv

Ahora en mi caso me interesa saber el desempeño de mi arreglo en especial donde van a estar operando mis maquinas virtuales ya que estoy trabajando sobre Xen y la particion se llama /vm -> /dev/md2, es donde voy a enfocarme.

Antes de arrancar la ejecucion de cada aplicacion, estoy ejecutando dstat con el nombre de cada programa que ejecuto como salida, para el final, cambiar los parametros de mi arreglo y volver a repetir los pasos, asi podre comparar manzanas con manzanas y saber cual me ofrece mejor desempeño.

Vamos procesos los voy a repetir porque si solo lo hacemos una vez tendemos a estar solo comparando el buffer del disco duro:
  • dd
  • hdparm
dd

Esta herramienta sencilla es lineal no hay nada de manera aleatoria, asi que vamos a ver como a vamos a ejecutar:

time dd if=/dev/zero of=/vm/bench/out.img bs=8k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=8k count=2048 && echo "borrando" time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=16k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=16k count=2048 && echo "borrando" time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=32k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=32k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=256k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=256k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=512k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=512k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=1024k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=1024k count=2048 && echo "borrando" && time rm -rf out.img && time dd if=/dev/zero of=/vm/bench/out.img bs=2048k count=2048 && echo "Leyendo" && time dd of=/dev/null if=/vm/bench/out.img bs=2048k count=2048 && echo "borrando" && time rm -rf out.img

hdparm

time hdparm -Tt /dev/md2 && time hdparm -Tt /dev/md2 && time hdparm -Tt /dev/md2

Las que siguen con aplicaciones que no se encuentran en el sistema base asi que necesitamos instalarlas.

Bonnie
Con esta aplicacion hemos hecho varias corrida con distintos parametros, como sigue:

time bonnie -s 100 -m mbx-xenserver &&
time bonnie -s 100 -m mbx-xenserver -y &&
time bonnie -s 1024 -m mbx-xenserver &&
time bonnie -s 1024 -m mbx-xenserver -y &&
time bonnie -s 2048 -m mbx-xenserver &&
time bonnie -s 2048 -m mbx-xenserver -y

Bonnie++
Una version de bonnie mejorada.

time bonnie++ -d ./ -u root && time bonnie++ -d ./ -u root -s 32 -n 128 -r 16 && time bonnie++ -d ./ -u root -s 256 -n 16 -r 128 && time bonnie++ -d ./ -u root -s 1024 -n 8 -r 512 -b

dbench
Emula un samba.

time dbench -c /usr/share/dbench/client.txt 40

Fio

Aqui tenemos que crear un archivo y correr en una ejecucion varias tareas distintas, muy practico.

bench.fio:

[global]
directory=/opt/bench/fio

[test1]
rw=rw
size=128m
nrfiles=16
sync=0
bsrange=4k-8k,16k-32k
zero_buffers
file_service_type=random
ioengine=sync
iomem=malloc

[test2]
rw=write
size=512m
nrfiles=2
sync=0
bsrange=16k-32k,64k-128k
file_service_type=roundrobin
ioengine=psync
iomem=shm

[test3]
rw=randread
size=8m
nrfiles=256
bsrange=4k-8k,32k-64k
sync=1
zero_buffers
file_service_type=random
ioengine=libaio

[test6]
rw=randrw
size=1024m
nrfiles=2
bsrange=8k-32k,64k-128k
refill_buffers
file_service_type=roundrobin

Para entender lean el man page, para ejecutarlo:

time fio bench.fio

tiobench

Un sistema parecido a fio.

time tiobench -size 512 --size 1024 --size 2048 --numruns 2 --block 4096 --block 8192 --threads 2

Como mencione anteriormente, estoy usando dstat para capturar informacion de como esta trabajando el equipo para posteriormente analizarla.

Por que estoy siempre incluyendo el comando "time"? Aparte de ver como se comporta tanto el CPU como el arreglo, me interesa saber que tan rapido se estan llevando a cabo cada tarea, cuando decida por cual arreglo irme, voy a tomar en cuenta estos 3 parametros:
  • Mas I/O del disco
  • Menor uso de CPU
  • Menor tiempo de ejecucion
Por ello siempre la incluyo, la salida del "dstat" es larga aqui no puedo ponerla, pero ustedes veran la salida.

miércoles, 20 de octubre de 2010

Centos 5: Respaldos con Bacula + MySQL 5.1.

Esta vez le toca el turno a el tema de los respaldos. Yo siempre he tratado de usar codigo libre para hacer lo que sea posible en un departamento de sistemas. Y como toda area de informatica, necesitamos respaldos.

Me vi un dia a la tarea de buscar que software podriamos usar para respaldas los servidores, encontre varias opciones:
  • amanda
  • rsync
  • tar
  • bacula
De todas ellas la que mas me lleno el ojo fue bacula, ya que existen clientes para una gama de sistemas operativos:
  • Windows
  • Linux
  • Mac
  • Unix
Lo cual lo hizo un contendiente vs symantec backup.

Utilizabamos veritas(que ya lo compro symantec creo yo) pero como todo software hecho para windows no tiene clientes para Linux/Unix y ademas que en el servidor de respaldos tenia que mapear todos los compartidos que ocupaba respaldar.

No es nada amigable, buscar otra alternativa era invertir una gran cantidad de dinero, licencias, etc. Con bacula me olvide de todo eso.

Otra cosa que los demas no tienen hablando del mundo de open source es no poder
hacer uso de una virtud que aparecio en windows 2000 en adelante llamada "Shadow Copy".

Esta funcion lo que hace es crear un respaldo de windows incluyendo los archivos abiertos, bacula puede hacer que las versiones que tienen esta utileria lo hagan y cuando terminan le envian el achivo a bacula, que gran cualidad de bacula.

En Linux/Unix no tenemos ese problema que ataca Redmont con esta funcion.

Otra gran caracteristica de Bacula es la gran gama de medios de almacenamiento que soporta, como todo inicia con Linux, pues ellos le dejaron la tarea a Linux y no se amarraron a tener que crear los latosos "Drivers" si no que le dejaron la tarea a Linux/Unix, a que me refieron con esto, cualquier medio de almacenamiento que soporte Linux/Unix sera bien recibido por Bacula como pueden ser:
  • Disco Duro- Externo e Interno, USB/Ata/Sata/Solido etc etc.
  • Quemadores de CD/DVD
  • Memorias USB
  • Unidades de Cinta - Internas/Externas
  • Floppies
En fin, si pueden almacenar informacion en Linux/Unix bacula la podra usar.

Y ademas que el demonio de almacenamiento(luego hablo de el) de bacula no necesita estar donde esta el director(luego hablo de el) podemos tener un servidor de bacula y otro de almacenamiento solamente, asi de flexible.

Modulos de Bacula

Bacula esta disenado inteligentemente, existen los siguientes modulos y cada uno tiene su funcion:

Director: El director es el administrador de todo llamado bacula-dir, medios de almacenamiento que son administrados por el demonio de almacenamiento llamado bacula-sd, comunicacion con los clientes, administrar la agenda de tareas, informarnos de errores, tareas hechas, o sea toda la operacion el la controla por ello el nombre de director.

Almacenamiento: Este modulo llamado tecnicamente bacula-sd se encarga de administrar todos los medios de almacenamiento, cuando el director necesita sacar o meter informacion se comunica con este modulo y el hace la tarea. Puede o no residir donde esta el director, depende totalmente del hosts donde esta para hacer uso de los medios de almacenamiento.

Consola: Llamado tecnicamente bconsole, este modulo es la interface que tenemos los administradores de bacula para poder interactuar con el director, los clientes, bacula-sd.

Clientes: Llamado bacula-fd, es el modulo que cada cliente debe tener instalado para poder ser respaldado, cuando el Director necesita respaldar o restaurar algun directorio o archivo se comunica con este modulo.

Lo anterior son los actores que nos vamos a encontrar a la hora de trabajar con bacula, algo que me gustaria notar es que cada modulo tiene su archivo de configuracion, estos son:
  • Director ---> bacula-dir.conf
  • Almacenamiento --> bacula-sd.conf
  • Clientes --> bacula-fd.conf
  • Consola --> bconsole.conf
Para entender un poco mas como opera bacula, vamos a hablar un poco de que son los pools y volumenes, porque mas adelante se los van a encontrar, ya cuando lleguen a donde los tienen que usar tendrar un mejor panorama de como configurarlos.

Pools y Volumenes

Bacula como mencione, almacena todo en una BD, de ahi siguen los pool, que vienen siendo
contenedores de volumenes, los volumenes son ya los medios donde se almacenan los archivos a respaldar. Entonces tenemos que:

1 Pool puede contener N numero de volumenes, un volumen fisicamente es ya el medio de almacenamiento, si estamos usando el mismo disco duro, y tengo un volumen llamado "FullFile-0001", en mi directorio donde guardo mis backups, tendre esto:

-rw-r----- 1 bacula bacula 20781361 Nov 3 18:51 FullFile-0001

Un archivo con ese nombre, si fuera una cinta, entonces tendria una cinta etiquetada con ese nombre, etc, etc. Espero les haya quedado claro eso.

Ahora bien, uno puede tener cuantos Pools desea, yo por ejemplo tengo 2 en este ejemplo, 1 para mis Full Backups y otro para mis Difrenciales(luego vamos a llegar a esto), y cada uno de ellos tienen sus volumenes, cuantos tengo, depende de como los configuren y la capacidad de sus medio de almacenamiento.

Aqui estan mis Pools:

*list pools
+--------+---------------+---------+---------+----------+-------------+
| PoolId | Name | NumVols | MaxVols | PoolType | LabelFormat |
+--------+---------------+---------+---------+----------+-------------+
| 1 | BajaOFullFile | 1 | 0 | Backup | FullFile- |
| 2 | BajaODiffFile | 1 | 0 | Backup | FileDiff- |
| 3 | Scratch | 0 | 0 | Backup | * |
+--------+---------------+---------+---------+----------+-------------+

El Scratch aun no he tenido la necesidad de usarlo.

Un punto importante, si observan la columna de nombre "Label Format", cuando bacula inicia un respaldo, y no tiene ningun "Volumen" disponible, hay una opcion de la configuracion que le indicamos que si no tiene de donde agarrar, el tiene la autoridad de crear uno nuevo, entonces cuando el lo crea, le agrega a este campo un numero consecutivo, vean:
  • FullFile-0001
  • FileDiff-0002
Si fuera necesario agregar otro volumen a mis "Full" backups, el agregaria:

FullFile-0002

Asi sucesivamente, interesante no.

Con esto dejo lo referente a Pools, y Volumenes

Tipo de Respaldos "Level"

Cuando respaldamos, tenemos otra seccion donde tenemos que decirle a el director cual sera nuestra forma de respaldar, aqui tenemos:
  • Full
  • Diferencial
  • Incremental
Full: Aqui no tenemos pierde, bacula agarra todos directorios y archivos indicados y los respalda.

Diferencial: Segun mis entedimientos, cualquier tipo de respaldo excepto Full, debe de existir un respaldo Full antes de llevarse a cabo, aqui entran todos los demas, como el diferencial, incremental, verificador. Ahora el diferencial, lo que hace es solo respaldar los archivos que han cambiado(fecha de apertura mas nueva) en base a el ultimo Full, por ejemplo, si mi Full de ayer tiene un archivo de nombre "Test.txt, y hoy cuando mi diferencial se ejecute ese archivo tiene la fecha de hoy, bacula lo respaldara. Si mi Full fue la semana pasada, bacula compara los archivos que han cambiado en base a el ultimo Full. Asi cuando restauremos un sistema completo, solo necesitaremos el ultimo Full + ultimo diferencial.

Incremental: Aqui a diferencia del diferencial, este respalda los archivos que han cambiado en base a el ultimo respaldo, sease Full o incremental, asi que si necesitaramos restaurar un sistema completo, necesitaremos el ultimo Full+ todos los incrementales despues de ese Full, con esto ya podran darse cuentad de la diferencia entre un Diferencial e Incremental.

Configuracion

Ahora viene la parte mas compleja, la configuracion.

Pero antes de entrar a esta parte que a la mayoria siempre le interesa, vamos a especificar los sistemas que vamos a respaldar:

A; Centos 5.5 192.168.50.130 --->Aqui se ejecuta el bacula server.
B; Centos 5.5 192.168.50.103 ---> Aqui ejecuto el servidor mysql.
C; Centos 5.5 192.168.50.4
D; Windows XP Pro 192.168.50.122
E; Windows 7 Ultimate Edition Cliente 192.168.50.121

Como podran ver les voy a mostrar una confiracion que se usa comumente en produccion.

El servidor sera Centos, asi que tambien tiene que respaldarse por ello lo incluyo. Como nota Centos por default no tiene a Bacula en sus paquetes, necesitamos compilarlo desde las fuentes.

La base de datos esta otro servidor.

Para ello tenemos este link, ya lo hice y funciona:

Compilar Bacula 5.0.2 en Centos 5.5

Yo lo hice con la ultima verion 5.0.3.

Algo que me gustaria marcar es que el link habla hacerca de wxconsole, php, esto va enfocado a un sistema con GUI, lo cual conmigo no aplica, ya que un servidor que yo levante raramente tendra un modo grafico al menos que sea Windows, pero no es mi caso.

Por ello yo no agregue paquetes que se estan enfocados a GUI:
  • php
  • qt
Mientras menos paquetes, menor probabilidad de ser atacado por bugs.

Otra cosa, Centos viene con MySQL 5.0 el cual ya hace tiempo dejo de ser actualizado al menos que sea por bugs, por ello yo baje el RPM directamente de Mysql:

Community Edition 5.1

Por seguridad cuando se instala bacula en Centos, el se encarga de configurar la BD en MySQL, en FreeBSD uno tiene que hacerlo, pero ninguno de los 2 sistemas le ponen password a el usuario bacula de la BD, por ello les recomiendo que lo hagan.

Ya tenemos un mejor panorama de lo que necesitamos, no voy a pasar por la instalacion de los paquetes o compilacion ya que los links son muy claros, si tienen dudas claro que les podre ayudar.

Todo lo que sigue es referente a la configuracion del servidor, a el final vamos a ver los clientes.

Director

Es el archivo mas complejo ya que aqui se juntan todos los modulos, clientes, base de datos, etc. No se asusten, voy a tratar de explicar cada una de las entradas hasta donde mi entendimiento me deje.

Este archivo esta divido en secciones, cuando instalan bacula la configuracion nos da por default un archivo de nombre bacula-dir.conf.sample, todos los archivos de bacula deben terminar en .conf.

Esta es la 1ra seccion:

NOTA: Aqui ya voy a mostrar la configuracion tal cual la tengo en uno de los servidores que respaldo.

Director { # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/usr/lib/bacula/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 20
Password = "mi-password" # Console password
Messages = Daemon
}

Detalles:
  • Name: una cadena de texto abierta, cada quien le pone como guste, asi lo van a conocer todos los clientes.
  • DIRport = Por default el director usa el puerto 9101, no lo cambien al menos que tengan alguna razon.
  • QueryFile = Ya esta hecho no cambiarlo.
  • WorkingDirectory = Directorio que bacula usa para sacar la chamba, logs, bsr, etc, usar el default.
  • PidDirectory = Los unixeros saben que esto, asi dejenlo.
  • Maximum Concurrent Jobs = Cuantos jobs al mismo tiempo, prueba y error les dira, cuando quieran respaldar mas de un cliente a la vez tiene que jugar con este valor hasta conseguir su objetivo.
  • Password = Cuando quieran comunicarse con el director este password necesitaran, cambienlo a su gusto.
  • Messages = A donde mandar los mensajes, por default a el mismo demonio.
Jobs de Respaldo

Los jobs es lo que bacula usa para configurar las parametros escenciales de cada cliente, ya muchos campos que aparecen los he mencionado, seguimos.

Tenemos 2 tipos aqui, un JobsDefs y Jobs, el 1ro es como una plantilla, la uso por que todos mis clientes tienen muchas opciones en comun, el 2do es ya la configuracion de cada uno de mis clientes, y si se dan cuenta en esta opcion hago un llamado a "JobsDefs".

JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Full
Storage = File
Messages = Standard
Pool = FullFile
}

Definicion.

Name = Entre comillas, nombre de mi plantilla.
Type = Tipo de jobs puede ser, Backup, Restore, Verify, Admin.
NOTA: Cuando vamos a respaldar:Backup, cuando vamos a recuperar datos:Restore, cuando deseamos comparar el contenido de nuestro respaldo vs los archivos reales:Verify, el otro nunca lo he usado.
Level = Ya hable de este.
Storage = Nuestro medio de almacenamiento.
Messages = Tipo de mensaje que enviara cuando termine el jobs ya sea bueno o malo, a correo o archivo. Dejar el que viene por default.
Pool = Ya hable de el.
Priority = Cada job tiene una prioridad, asi que a cada uno le asignamos uno, aqui nunca he tenido problemas, ya que yo ejecuto un cliente a la vez.

Ya tenemos nuestra platilla, ahora sigue definir los jobs, aqui es donde uso mi JobsDefs o mi platilla.

Jobs Para Cliente A
Job {
Name = "BackupXen"
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/xenserver.bsr"
Client = XENSERVER-FD
FileSet = "XENSERVER-FS"
Schedule = "XENSERVER-SCH"
Priority = 11
}

NOTA: Asi es estoy respaldando un linux donde tengo corriendo a Xen para virtualizar.

Definicion:
Name = "" enter comillas, ya saben libre el nombre, consejo que sea el nombre referente a el cliente que van a respaldar, el mio dice BackupXen , entonces eso me dice quien es rapidamente.
JobDefs = "" entre comillas, le hablo a mi plantilla, ya hable de esto anteriormente.
Write Bootstrap = "" entre comillas, es archivo que usa bacula para cada cliente, cuando va a restaurar.
Client = Ahora si, el nombre de mi cliente, existe una configuracion con este nombre, bacula la va a buscar, mas abajo la van a ver.
FileSet = "" entre comillas, igual que la anterior, es donde defininimos lo que vamos a respaldar.
Schedule = "" entre comillas, igual que la anterior, es donde indicamos la agenda a seguir automaticamente.
Priority = Ya le explique.

Jobs de Recuperacion

Asi como existen Jobs para los backups, tenemos que generar los contrarios o sea para recuperar nuestros datos, y aplica lo mismo, podemos tener una plantilla o mas plantillas segun sus gustos.

Tenemos esto:

JobDefs {
Name = "RestoreFiles"
Type = Restore
Storage = File
Pool = FullFile
Messages = Standard
}

Name = un nombre caracteristico.
Type = Restore, no hay de otra aqui.
Storage = Nuestro medio de almacenimiento de donde vamos a sacar los datos.
Pool = Ya se la saben.
Messages = Ya se la saben.

Job Restore Para Cliente A

Job {
Name = "RestoreXENSERVER"
JobDefs = "RestoreFiles"
Client = XENSERVER-FD
FileSet = "XENSERVER-FS"
Where = "/opt/restore"
}

El parametro "Where" lo que dice es para este cliente donde queremos que mande los archivos cuando se restauren. Asi que debe exister ese directorio en el cliente. Yo lo hago para cuando obtengo los datos no sobre escribir los datos actuales.

Hasta aqui ya hemos visto parte de la configuracion, espero ya tengan una idea mas clara de como opera bacula.

File Set

Ahora sigue la seccion donde vamos a indicarle que archivos y directorios deseamos respaldar para cada cliente, van encontrarse con nuevos parametros, algunos ya seran conocidos.

FileSet {
Name = "XENSERVER-FS"
Enable VSS = No
Include {
Options {
signature = MD5
compression = GZIP
}
File = "/etc"
File = "/opt/data"
}
}

NOTA: Poner mucho cuidado en los corchetes {} cuando abrirlos y cerrarlos.

Name = "", arriba en los Jobs definen uno para cada cliente, debe ser el mismo nombre que haya definieron, aqui ya es la configuracion de cada uno de los File Set's.
Include {
Options {
signature = dejar la entrada por default, MD5 es buen algoritmo.
compression = si es en disco, CD,DVD,USB usenla siempre, si es en cinta ponerla en No, ya que la cinta ya tiene compresion por HW, seria innecesario este parametro.
}
File = "" ahora si aqui definimos cada uno de los directorios o archivos a respaldar, no se pueden juntar, ejemplo, tengo un directorio en /var/db y otro en /usr/videos, no puedo hacer esto:
File = "/var/db" "/usr/videos", por cada uno una entrada.
}
}

Hasta aqui hemos trabajado sobre un cliente Linux, voy a mostrar el File Set de un cliente para explicar una funcion que tiene bacula para los clientes Windows, que aparecio apartir de Windows 2000.

Ya posteriormente mostrare todo el archivo completo.

FileSet {
Name = "WINDOWSXP-FS"
Enable VSS = Yes
Include {
Options {
signature = MD5
compression = GZIP
}
File = "C:/Documents and Settings/Administrator/My Documents/"
}
Exclude {
File = "C:/Documents and Settings/Administrator/My Documents/My Music"
}
}

El parametro es:

Enable VSS = yes

Este parametro lo que hace es que antes de empezar a enviar los respaldos, ejecute un "Shadow Copy" de ellos, una vez terminado que los envie.

Otra parte que agregue es:

Exclude, todo lo que aqui se agrege sera ignorado por bacula cuando respalde este cliente. O sea que cuando mande el cliente todos los datos de "My Documents" no mandara todo lo que este dentro de "My Music".

Definicion:
Name = "" Ya sabes el significado.
Enable VSS = Solo para clientes windows Yes / No
Include {
Options {
Aqui van las opciones que deseamos agregar, el manual tiene muchas.
signature = Este parametro no lo toquen nucan he tenido problemas con el.
compression = Deseamos compresion Si o No, Si no estan respaldando en cinta siempre usenlo, ya que cuando se respalda en disco duro, interno, externo, CD, DVD, memorias USB se comprime todo, ahorra espacio. Hacerlo en cinta no es recomendable ya que ya traen compresion por HW, no es recomendable.
}
File = "" Para cada folder o archivo que vayamos a respaldar aqui debemos ponerlo, por cada directorio debe a ver una entrada de estas, no podemos juntarlas asi:
File = /var /usr /etc

Si no que debemos darle a cada uno su entrada asi:
File = /var
File = /usr
File = /etc
}
Exclude {
File = "" aqui ponemos lo que no deseamos respaldar de lo incluido en "Include".
}

Schedule

Aqui vamos a configurar la agenda de bacula, ya que una vez que bacula empiece operaciones, si no existen problemas, el trabajara automaticamente, nomas que necesitamos decirle los horarios para ejecutar cada respaldo, y hay parametros que podemos cambiar si asi lo deseamos.

Schedule {
Name = "XENSERVER-SCH"
Run = mon-fri at 19:00
Run = Level = Differential Storage = File Pool = DiffFile tue-sat at 19:00
}

Definicion:
Name = "", ya saben debe llamarse tal cual lo declararon en el Jobs.
Run = Aque horas lo vamos a ejecutar.

Como podran ver tengo 2 Run, por que? No podemos mezclar, uno para los Full y otro para los diferenciales. Cuando solo pongo la hora, bacula considera los parametros del Job definido, ahora como en mi caso uso un Pool distinto para los diferenciales aqui lo defino como podran ver.

Otro paremetro que puede cambiar es "Storage", en otro servidor tengo una cinta y espacio en disco, tengo 3 Run's asi:

Name = "CATALOG-SCH"
Run = sun at 20:00
Run = Storage = File Pool = FullFile mon at 23:40
Run = Level = Differential Storage = File Pool = DiffFile tue-thu at 21:00

El parametro de la hora nos permite hacer muchas cosas, indicarle un solo dia, varios, cierto dia del mes, de la semana, etc, ejemplo:

tue-thu, que lo ejecute de martes a jueves a las 21:00.
sun, solo el domingo a las 20:00
mon,solo el lunes a las 23:40

Para mas detalles ver el manual.

Clientes

Ahora si viene la configuracion de cada cliente, esta es la informacion que usa el Director para comunicarse con cada cliente.

Client {
Name = XENSERVER-FD
Address = 192.168.50.104
FDPort = 9102
Catalog = MyCatalog
Password = "mi password" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
Maximum Concurrent Jobs = 3
}

Definicion:
Name = Tal cual lo definieron en el Jobs.
Address = Ip o nombre si tienen un hosts o dns funcional.
FDPort = Puerto, los clientes usan el 9102, si quieren otro lo pueden hacer.
Catalog = Nombre de la BD de bacula, yo no he tenido razon de cambiarlo.
Password = "", entre comillas ustedes lo deciden.
File Retention = Cuanto tiempo desean mantener la info en la BD de los archivos para este cliente. Pasando este tiempo bacula los purga para que la BD no crezca demasiado, si tenemos los datos en cinta, aunque los borre aun los podemos recuperar. Este parametro ustedes deben calcularlo bien.
Job Retention = Lo mismo, pero para este jobs, son cosas distintas.
AutoPrune = yes/no, indicarle si deseamos que el purge automaticamente o no para nosotros hacerlo, esto es basado en los parametros anteriores.
Maximum Concurrent Jobs = Ya tendremos la razon de este parametro en la seccion extra.

Storage

Le toca el turno a el medio de almacenamiento, como bacula esta secciona por modulos, aqui solo le indicamos a el Director como comunicarse con el programa que administra los medios de almacenamiento, la configuracion real esta en otro archivo, mas adelante los vamos a ver.

Storage {
Name = File
Address = 192.168.50.130 # N.B. Use a fully qualified name here
SDPort = 9103
Password = "password del sd daemon"
Device = FileStorage
Media Type = File
Maximum Concurrent Jobs = 10
}

Name = File
Address = IP o nombre.
SDPort = Usen el default, al menos que gusten cambiarlo.
Password = "", entre comillas, el que gusten.
Device = Nombre configurado en el archivo bacula-sd-conf
Media Type = Tipo de Medio de almacenamiento.
Maximum Concurrent Jobs = Ya lo mencione anteriormente.

Me gustaria comentar que no hay limite para los servicios de respaldo, podemos tener tantos queramos, por ejemplo si tuvieramos otro servidor donde desearamos enviar datos, solo le indicamos el IP y el password, ese servidor solo debera tener operando el bacula-sd que es nombre del demonio que se encarga delos medios de almacenamiento.

Catalogo

Catalog {
Name = MyCatalog
dbname = "bacula"; dbuser = "bacula"; dbpassword = "mipassword"
}

Sencillo, aqui configuramos los datos para que el director pueda meter o sacar informacion de la BD, muy simple no.

Lo mismo, no necesariamente tenemos que tener nuestro servidor de respaldo donde esta el director, podemos tenerlo en otro equipo, por ejemplo en un sistema de producion, mysql se ejecuta en otro servidor distinto a el de bacula-dir, y mi definicion del Catalogo es asi:

dbname = "bacula"; DB Address =192.168.50.3; dbuser = "bacula"; dbpassword = "passworddelusuario"

Mensajes
Messages {
Name = Standard
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
catalog = all
}

Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

Esta seccion no la cambien, bacula manda informacion de todo lo que hace via correo local y aparte en un archivo log.

En mi caso, yo hago uso de mi correo interno, para ello utlilizo el programa llamado "SSMTP", a sendmail lo desinstalo ya que es mucho para lo que necesito. Asi me llega todo a mi cuenta de correo, aqui tengo un ejemplo:

Messages {
Name = Standard
mailcommand = "/usr/sbin/bsmtp -h 192.168.50.7:25 -f \"\(Bacula\) %r\" -s \"Bacula BajaO: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h 192.168.50.7:25 -f \"\(Bacula\) %r\" -s \"Bacula BajaO: Necesito un Favor Para %j\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h 192.168.50.7:25 -f \"\(Bacula\) %r\" -s \"Bacula Mensaje Demonial\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

Asi de simple.

Aunque no tengamos un servidor de correo, bacula envia los datos a el servicio local de Linux, ademas que todos los mensajes los escribe en /var/lib/bacula/log en distribuciones RedHat y derivados, en FreeBSD van en /var/db/bacula/log, si algun mensaje se les va de la consola, tenemos este archivito "log".

Pools

Ahora viene la definicion de los Pools, que ya hable de ellos anteriormente, asi los tengo declarados:

Pool {
Name = FullFile
Maximum Volumes = 0
Pool Type = Backup
Use Volume Once = no
Maximum Volume Jobs = 8
Maximum Volume Files = 0
Maximum Volume Bytes = 0
Volume Use Duration = 0
Catalog Files = yes
AutoPrune = yes
Volume Retention = 120 days
Recycle Current Volume = no
Recycle = yes
Label Format = FullFile-
}

Definicion:
Name = Ya saben, algo que ustedes conozcan.
Pool Type = Yo solo uso "Backups"
Recycle = yes/no, aqui le indicamos a el director si nuestros volumenes podran reciclarse, asi podremos tener una rotacion, no tenemos cintas para toda la vida!!!
AutoPrune = yes/no, para que el director recicle informacion de la BD.
Volume Retention = Cuanto tiempo un Volumen podran mantenerse intacto, despues de este tiempo se podra reciclar.
Maximum Volume Bytes = Podremos especificar cuantos bytes por cada volumen, yo no lo necesito.
Maximum Volume Jobs = Cuantos Jobs por cada volumen, una vez llegando a esta cantidad el volumen se cierra.
Maximum Volume Files = Cuantos archivos por volumen, no lo utilizo.
Volume Use Duration = Tiempo que deseamos usar cada volumen.
Catalog Files = yes/no, si deseamos que bacula genere un listado de todos los archivos a respaldar, asi cuando recuperemos sea mas rapido, siempre usenlo, le agrega mas info a la BD pero vale la pena.
Recycle Current Volume = yes/no, nunca me he visto en la necesidad de ponerlo en "Yes".
Label Format = Ya hable al respecto, un parametro para todos nuestros volumenes a la hora de crearlos.

Como mencione por cada uno de mis tipo de respaldo tengo un Pool, o sea que uso 2, Full y Diferencial.

Ustedes pueden ya saber como configurar el otro.

Consola

Es la ultima parte de la configuracion, para monitorear el estatus del director los clientes tienen que configurarse en base a estos parametros.

Console {
Name = bacula-mon
Password = "monitor"
CommandACL = status, .status
}

Muy simple.

Definicion:

Name = Nombre que ustedes gusten.
Password = "", clave.
CommandACL = No modificarlo, al menos que sepan que hacen.

Como podran ver, bacula nos permite configurarlo de muchas maneras, aqui ya es cuestion de gustos y necesidades. Vamos a ver un archivo completo:

bacula-dir.conf Completo

###########################################################
### Director Definitions ###
###########################################################

Director { # define myself
Name = bacula-dir
DIRport = 9101 # where we listen for UA connections
QueryFile = "/usr/lib/bacula/query.sql"
WorkingDirectory = "/var/lib/bacula"
PidDirectory = "/var/run"
Maximum Concurrent Jobs = 20
Password = "mipassword" # Console password
Messages = Daemon
}

###########################################################
### Backup JobsDef##
###########################################################

JobDefs {
Name = "DefaultJob"
Type = Backup
Level = Full
Storage = File
Messages = Standard
Pool = FullFile
}

###########################################################
### Backup Job's Definitions ###
###########################################################

Job {
Name = "BackupXen"
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/xenserver.bsr"
Client = XENSERVER-FD
FileSet = "XENSERVER-FS"
Schedule = "XENSERVER-SCH"
Maximum Concurrent Jobs = 3
Priority = 11
}

Job {
Name = "BackupXP"
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/xp.bsr"
Client = WINDOWSXP-FD
FileSet = "WINDOWSXP-FS"
Schedule = "WINDOWSXP-SCH"
Maximum Concurrent Jobs = 3
Priority = 12
}

Job {
Name = "BackupWin7"
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/win7.bsr"
Client = WIN7-FD
FileSet = "WIN7-FS"
Schedule = "WIN7-SCH"
Priority = 13
}

# Backup the catalog database (after the nightly save)
Job {
Name = "BackupCatalog"
JobDefs = "DefaultJob"
Write Bootstrap = "/var/lib/bacula/catalog.bsr"
Client = CATALOG-FD
FileSet="CATALOG-FS"
Schedule = "CATALOG-SCH"
# This creates an ASCII copy of the catalog
# Arguments to make_catalog_backup.pl are:
# make_catalog_backup.pl
#RunBeforeJob = "/usr/lib/bacula/make_catalog_backup.pl MyCatalog"
# This deletes the copy of the catalog
#RunAfterJob = "/usr/lib/bacula/delete_catalog_backup"
Maximum Concurrent Jobs = 3
Priority = 14
}

Job {
Name = "BackupMySQL"
JobDefs = "DefaultJob"
RunScript {
RunsWhen = Before
FailJobOnError = No
Command = "/etc/bacula/backupdb.sh"
}
RunScript {
RunsWhen = After
FailJobOnError = No
Command = "/etc/bacula/deletedb.sh"
}

Write Bootstrap = "/var/lib/bacula/mysqlserver.bsr"
Client = MYSQLSERVER-FD
FileSet = "MYSQLSERVER-FS"
Schedule = "MYSQLSERVER-SCH"
Priority = 15
}

###########################################################
### Restore Jobs ###
###########################################################

### Template ###
JobDefs {
Name = "RestoreFiles"
Type = Restore
Storage = File
Pool = FullFile
Messages = Standard
}

Job {
Name = "RestoreXENSERVER"
JobDefs = "RestoreFiles"
Client = XENSERVER-FD
FileSet = "XENSERVER-FS"
Where = "/opt/restore"
}

Job {
Name = "RestoreWINXP"
JobDefs = "RestoreFiles"
Client = WINDOWSXP-FD
FileSet = "WINDOWSXP-FS"
Where = "C:/restore"
}

Job {
Name = "RestoreWIN7"
JobDefs = "RestoreFiles"
Client = WIN7-FD
FileSet = "WIN7-FS"
Where = "C:/restore"
}

Job {
Name = "RestoreCATALOG"
JobDefs = "RestoreFiles"
Client = CATALOG-FD
FileSet = "CATALOG-FS"
Where = "/opt/restore"
}

Job {
Name = "RestoreMYSQLSERVER"
JobDefs = "RestoreFiles"
Client = MYSQLSERVER-FD
FileSet = "MYSQLSERVER-FS"
Where = "/opt/restore"
}


###########################################################
### File Set Definitions ###
###########################################################

FileSet {
Name = "XENSERVER-FS"
Enable VSS = No
Include {
Options {
signature = MD5
compression = GZIP
}
File = "/etc"
File = "/opt/data"
}
}

### VM-DOS ###
FileSet {
Name = "WINDOWSXP-FS"
Enable VSS = Yes
Include {
Options {
signature = MD5
compression = GZIP
}
File = "C:/Documents and Settings/Administrator/My Documents/"
}
Exclude {
File = "C:/Documents and Settings/Administrator/My Documents/My Music"
}
}

### VM-TRES ###
FileSet {
Name = "WIN7-FS"
Enable VSS = Yes
Include {
Options {
signature = MD5
compression = GZIP
}
File = "C:/Users/Administrator/Pictures"
}
Exclude{

}
}

FileSet {
Name = "CATALOG-FS"
Enable VSS = No
Include {
Options {
signature = MD5
compression = GZIP
}
File = "/etc"
File = "/var/lib/bacula"
File = "/var/log"
File = "/opt/data"
}
}

### MySQL Server ###
FileSet {
Name = "MYSQLSERVER-FS"
Enable VSS = No
Include {
Options {
signature = MD5
compression = GZIP
}
File = "/etc"
File = "/opt/db"
File = "/opt/rpm"
File = "/opt/data"
}
}

###########################################################
### Schedule Definitions ###
###########################################################

Schedule {
Name = "XENSERVER-SCH"
Run = mon at 19:00
Run = Level = Differential Pool = DiffFile tue-sat at 19:00
}

schedule {
Name = "WINDOWSXP-SCH"
Run = mon at 19:30
Run = Differential Pool = DiffFile tue-sat at 19:15
}

Schedule {
Name = "WIN7-SCH"
Run = mon at 20:00
Run = Differential Pool = DiffFile tue-sat at 19:30
}

Schedule {
Name = "CATALOG-SCH"
Run = mon at 20:30
Run = Differential Pool = DiffFile tue-sat at 19:45
}

Schedule {
Name = "MYSQLSERVER-SCH"
Run = mon at 21:00
Run = Differential Pool = DiffFile tue-sat at 20:00
}

###########################################################
### Clients Definitions ###
###########################################################

Client {
Name = XENSERVER-FD
Address = 192.168.50.104
FDPort = 9102
Catalog = MyCatalog
Password = "mipassword"
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
Maximum Concurrent Jobs = 3
}

### WINDOWS XP ###
Client {
Name = WINDOWSXP-FD
Address = 192.168.50.122
FDPort = 9102
Catalog = MyCatalog
Password = "mipassword" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
Maximum Concurrent Jobs = 3
}

### WINDOWS 7 ###
Client {
Name = WIN7-FD
Address = 192.168.50.121
FDPort = 9102
Catalog = MyCatalog
Password = "mipassword" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
}

Client {
Name = CATALOG-FD
Address = 192.168.50.130
FDPort = 9102
Catalog = MyCatalog
Password = "mipassword" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
Maximum Concurrent Jobs = 3
}

Client {
Name = MYSQLSERVER-FD
Address = 192.168.50.3
FDPort = 9102
Catalog = MyCatalog
Password = "mipassword" # password for FileDaemon
File Retention = 30 days # 30 days
Job Retention = 6 months # six months
AutoPrune = yes # Prune expired Jobs/Files
Maximum Concurrent Jobs = 3
}

###########################################################
### Storage Definitions ###
###########################################################

Storage {
Name = File
Address = 192.168.50.130 # N.B. Use a fully qualified name here
SDPort = 9103
Password = "mipassword"
Device = FileStorage
Media Type = File
Maximum Concurrent Jobs = 10
}

###########################################################
### Catalog ###
###########################################################

Catalog {
Name = MyCatalog
# Uncomment the following line if you want the dbi driver
# dbdriver = "dbi:mysql"; dbaddress = 127.0.0.1; dbport =
# dbname = "bacula"; dbuser = "bacula"; dbpassword = "bacula"
dbname = "bacula"; DB Address =192.168.50.3; dbuser = "bacula"; dbpassword = "userpassword"
}

###########################################################
### Message Definitions ###
###########################################################

Messages {
Name = Standard

mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: %t %e of %c %l\" %r"
operatorcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula: Intervention needed for %j\" %r"
mail = root@localhost = all, !skipped
operator = root@localhost = mount
console = all, !skipped, !saved

append = "/var/lib/bacula/log" = all, !skipped
catalog = all
}

Messages {
Name = Daemon
mailcommand = "/usr/sbin/bsmtp -h localhost -f \"\(Bacula\) \<%r\>\" -s \"Bacula daemon message\" %r"
mail = root@localhost = all, !skipped
console = all, !skipped, !saved
append = "/var/lib/bacula/log" = all, !skipped
}

###########################################################
### Pools ###
###########################################################

### Full Files ###
Pool {
Name = FullFile
Maximum Volumes = 0
Pool Type = Backup
Use Volume Once = no
Maximum Volume Jobs = 8
Maximum Volume Files = 0
Maximum Volume Bytes = 0
Volume Use Duration = 0
Catalog Files = yes
AutoPrune = yes
Volume Retention = 120 days
Recycle Current Volume = no
Recycle = yes
Label Format = FullFile-
}

Pool {
Name = DiffFile
Pool Type = Backup
Use Volume Once = no
Maximum Volume Jobs = 24
Maximum Volume Files = 0
Maximum Volume Bytes = 0
Volume Use Duration = 0
Catalog Files = yes
Recycle = yes
AutoPrune = yes
Volume Retention = 120 days
Label Format = FileDiff-
}

# Scratch pool definition
Pool {
Name = Scratch
Pool Type = Backup
}

#
# Restricted console used by tray-monitor to get the status of the director
#
Console {
Name = bacula-mon
Password = "Monitor"
CommandACL = status, .status
}

Muy bien, ya tenemos el archivo de configuracion del director, ahora sigue configurar el
encargado de los medios de almacenamiento.

Bacula Storage Daemon

Storage { # definition of myself
Name = bacula-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}

Name = Nombre deseado.
SDPort = Puerto Especifico.
WorkingDirectory = Directorio temporal, no modificar.
Pid Directory = No modificar.
Maximum Concurrent Jobs = Nunca he sobre pasado este limite, asi que dejenlo como esta.

Director {
Name = bacula-dir
Password = "password-deseado"
}

Directores que tienen permitido accesar esta demonio.

Name = Nombre del director.
Password = Password que tiene usar el director si desea contactar a este demonio.

Director {
Name = bacula-mon
Password = "monitor-password"
Monitor = yes
}

Name = Nombre de la consola de bacula para estatus.
Password = Password para contactar el monitor.
Monitor = No cambiar si desean ser contactados por monitores.

Device {
Name = FileStorage
Media Type = File
Archive Device = /opt/backups
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

Name = Nombre de este medio de almacenamiento, el director asi lo conoce.
Media Type = Tipo de medio de almacenamiento.
Archive Device = Ubicacion fisica de este recurso, debe existir este directorio.
LabelMedia = Se permite etiquetar o no este medio, default si.
Random Access = No modificar.
AutomaticMount = No modificar.
RemovableMedia = Para almacenamiento en disco duro "No" para otros cambia.
AlwaysOpen = No modificar para disco duro.

Messages {
Name = Standard
director = bacula-dir = all
}

No modificar estos parametros.

Tiene mas datos el archivo de configuracion, pero es solo para manejar cintas, dvd's, etc. Aqui solo hemos manejado disco duro, asi que todo lo que necesitamos esta en la configuracion anterior.

Ya hay muchos parametros estan por demas explicitos, pero de todos modos los tratamos de explicarlos.

Ahora vamos a ver la configuracion total.

bacula-sd.conf

Storage { # definition of myself
Name = bacula-sd
SDPort = 9103 # Director's port
WorkingDirectory = "/var/lib/bacula"
Pid Directory = "/var/run"
Maximum Concurrent Jobs = 20
}

Director {
Name = bacula-dir
Password = "mi-password"
}

Director {
Name = bacula-mon
Password = "monitor-password"
Monitor = yes
}

Device {
Name = FileStorage
Media Type = File
Archive Device = /opt/backups
LabelMedia = yes; # lets Bacula label unlabeled media
Random Access = Yes;
AutomaticMount = yes; # when device opened, read it
RemovableMedia = no;
AlwaysOpen = no;
}

Messages {
Name = Standard
director = bacula-dir = all
}

Demonio FD

Este tambie es un archivo muy simple, asi es bacula. Vamos a seguir el mismo formato, vamos a mostrar la configuracion y tratar de explicar cada parametro mostrado, hay muchos que nunca se van a cambiar por ello los indico.

Director {
Name = bacula-dir
Password = "password-de-este-cliente"
}

Name = Nombre del director que tiene permitido accesar a este cliente.
Password = Clave que se solicita a el director que desea contactar este cliente.

Director {
Name = bacula-mon
Password = "monitor-password"
Monitor = yes
}

Name = Ya saben la razon de estos parametros.
Password = Clave del monitor.
Monitor = no modificar.

FileDaemon {
Name = uno-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}

Name = Nombre de este cliente, asi lo conocen los directores.
FDport = No modificarlo.
WorkingDirectory = No modificarlo.
Pid Directory = No modificarlo.
Maximum Concurrent Jobs = No modificarlo.

Messages {
Name = Standard
director = bacula-dir = all, !skipped, !restored
}

Ya saben este ultimo parametro. Ahora vamos a ver el archivo completo.

bacula-fd.conf
Director {
Name = bacula-dir
Password = "password-cliente"
}

Director {
Name = bacula-mon
Password = "password-monitor"
Monitor = yes
}

FileDaemon {
Name = uno-fd
FDport = 9102
WorkingDirectory = /var/lib/bacula
Pid Directory = /var/run
Maximum Concurrent Jobs = 20
}

Messages {
Name = Standard
director = bacula-dir = all, !skipped, !restored
}

Me gustaria comentar que los archivos de los clientes tambien es muy sencillo y aparte que Unix a Windows no cambian en nada, son los mismos parametros, lo que cambia es la ruta a directorios o archivos.

Consola de bacula

Por ultimo la consola para administrar a bacula. El mas simple de todos.

Director {
Name = bacula-dir
DIRport = 9101
address = 192.168.50.130
Password = "password-del-director"
}

Name = Nombre del director.
DIRport = No mover.
address = IP del director, si tienen dns y opera lo pueden usar.
Password = Password del director para contactarlo bacula-dir.conf.

bconsole.conf
Director {
Name = bacula-dir
DIRport = 9101
address = 192.168.50.130
Password = "passwod-del-director"
}

Revision de Sintaxis

Para el director, nuestra bd debe estar lista para trabajar.

Bien, hasta aqui ya tenemos los 4 archivos escenciales de bacula, tanto del lado del servidor como del cliente. Lo que sigue es verficar que no haya errores de sintaxis, para ello cada demonio de bacula tiene su forma de hacerlo, asi:

bacula-dir -t -c /etc/bacula/bacula-dir.conf
bacula-sd -t -c /etc/bacula/bacula-sd.conf
bacula-fd -t -c /etc/bacula/bacula-fd.conf
bconsole -t -c /etc/bacula/bconsole.conf

Si no retorna nada es que todo esta correctamente, de lo contrario nos indica la linea donde se produce el problema.

Si aparecen errores ya saben que deben repararlos antes de seguir.

sábado, 25 de septiembre de 2010

MySQL 5.1: Desempeño de MySQL con mysqlslap

Esta estamos trabajando con MySQL, necesito poner a operar un servidor con MySQL para la empresa, como ya vieron la base de datos es MySQL 5.1.

Para esto existen muchas herramientas para esto, pero esta vez nos vamos a enforcar sobre:

mysqlslap

Viene por default cuando instalas mysql, estoy trabajando sobre Centos 5.5 en una maquina virtual con Xen:

uname -a
Linux 2.6.18-194.11.3.el5xen #1 SMP Mon Aug 30 16:55:32 EDT 2010 x86_64 x86_64 x86_64 GNU/Linux

La version de MySQL es:

MySQL-client-community.x86_64 5.1.50-1.rhel5 installed
MySQL-devel-community.x86_64 5.1.50-1.rhel5 installed
MySQL-server-community.x86_64 5.1.50-1.rhel5 installed
MySQL-shared-compat.x86_64 5.1.50-1.rhel5 installed

Centos aun sigue trabajando sobre MySQL 5.0.x, muchas funciones que necesitamos de MySQL no las tiene la version 5.0 por ello decidimos irnos por la version que nos proporciona mysql.com.

Bien, vamos a empezar, que version estamos usando de mysqlslap:

mysqlslap Ver 1.0 Distrib 5.1.50, for unknown-linux-gnu (x86_64)

Ahora mysqlslap tiene la opcion de poner trabajar sobre las engines de mysql, he trabajado con otras herramientas para desempeño de mysql y muchas no tiene soporte para otras engines sino solo para myisam.

La engine o motor de MySQL que me interesa es InnoDB por varias funciones que MyISAM no trae , una de ella es "ROLL BACK", la version 5.5 de MySQL ya trae a InnoDB como motor principal asi que tenemos que ir adaptandonos a el cambio.

La bd con la que vamos a trabajar se llama: sbinno y la tabla se llama: sbtest con estos campos:

+-------+------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-------+------------------+------+-----+---------+----------------+
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| k | int(10) unsigned | NO | MUL | 0
| c | char(120) | NO
| pad | char(60) | NO
| vchar | varchar(30) | NO | | NULL
+-------+------------------+------+-----+---------+----------------+

Vamos empezando a correr las primeras pruebas, vamos empezando insertando datos a la tabla con mysqlslap:

[root@mysqlmaster ~]# mysqlslap --user=root --password=mipassword --engine=innodb --create-schema="sbinno" --query="INSERT INTO sbtest (k,c,pad,vchar) VALUES (1234567890,'Esta es la informacion que vamos a meter en el campo de nombre c de la tabla sbtest de la base de datos nombre sbinno','Aqui vamos a poner su direccion donde viven calle # colonia','Lugar donde trabajan aqui va')" --number-of-queries=10000

Vamos que estamos haciendo:

--engine=innodb especificamos el motor a usar.
--create-schema="sbinno" la bd que con la que deseamos trabajar.
--query= el comando sql que deseamos ejecutar.
--number-of-queries=10000 cuantes repeticiones deseamos del comando.

1er ejemplo:

mysqlslap --user=root --password=mipassword --engine=innodb --create-schema="sbinno" --query="INSERT INTO sbtest (k,c,pad,vchar) VALUES (1234567890,'bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla','bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla','bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla')" --number-of-queries=1000
Benchmark
Running for engine innodb
Average number of seconds to run all queries: 1.392 seconds
Minimum number of seconds to run all queries: 1.392 seconds
Maximum number of seconds to run all queries: 1.392 seconds
Number of clients running queries: 1
Average number of queries per client: 1000

Ya cada quien decide que datos agregarle.

Podemos ver los resultados el tiempo que le llevo agregar los 1000 registros.


miércoles, 22 de septiembre de 2010

Centos 5.5: Incrementar una particion logica LVM


NOTA: Antes de llevar a cabo este proceso, recordar que si algun servicio depende de este particion debemos apagar esos servicios para que no sea afectados, en mi caso Samba opera en esta particion, tuve que apagar todos los servicios de samba: smb, nmb, windbind.

Otro caso, cuando necesito hacer esto en el servidor de correo, tengo que apagar por ejemplo: postfix, dovecot, y revisar que nadie este dentro del directorio con el comando lsof ejemplo:

lsof | grep /home

sof | grep /home
imap       3794     user1  cwd       DIR      253,2      4096    6488065 /home/user1
imap       3794     user1  mem       REG      253,2    113664   17629545 /home/user1/Maildir/dovecot.index.cache
imap       3794     user1  mem       REG      253,2     23048   17629544 /home/user1/Maildir/dovecot.index.log
imap       3794     user1  mem       REG      253,2      1792    6490085 /home/user1/Maildir/dovecot.index
imap       3794     user1    7u      REG      253,2      1792    6490085 /home/user1/Maildir/dovecot.index
imap       3794     user1    8u      REG      253,2     23048   17629544 /home/user1/Maildir/dovecot.index.log
imap       3794     user1    9u      REG      253,2    113664   17629545 /home/user1/Maildir/dovecot.index.cache
imap       4225     user1  cwd       DIR      253,2      4096    6488065 /home/user1
imap       4225     user1  mem       REG      253,2     39836    6750287 /home/user1/Maildir/.Drafts/dovecot.index.log
imap       4225     user1  mem       REG      253,2       144   17825894 /home/user1/Maildir/.Drafts/dovecot.index
imap       4225     user1    7u      REG      253,2       144   17825894 /home/user1/Maildir/.Drafts/dovecot.index
imap       4225     user1    8u      REG      253,2     39836    6750287 /home/user1/Maildir/.Drafts/dovecot.index.log
imap       4842 user2  cwd       DIR      253,2      4096   14549015 /home/user2
imap       4842 user2  mem       REG      253,2    613376   14549783 /home/user2/Maildir/dovecot.index.cache
imap       4842 user2  mem       REG      253,2     88196   13763032 /home/user2/Maildir/dovecot.index.log
imap       4842 user2  mem       REG      253,2     12736    1900617 /home/user2/Maildir/dovecot.index
imap       4842 user2    7u      REG      253,2     12736    1900617 /home/user2/Maildir/dovecot.index
imap       4842 user2    8u      REG      253,2     88196   13763032 /home/user2/Maildir/dovecot.index.log
imap       4842 user2    9u      REG      253,2    613376   14549783 /home/user2/Maildir/dovecot.index.cache
imap       4849 user2  cwd       DIR      253,2      4096   14549015 /home/user2

Tengo que estar 100% seguro que nadie esta usando el directorio.

Vamos a ver:

1; Si sabemos que tenemos espacio fisico manos a la obra, revisamos cuanto espacio tenemos en nuestro grupo, ya que un Volumen Logico(LogicalVolume) pertenece a uno:

#vgdisplay
 --- Volume group ---
  VG Name               VolGroup00
  System ID
  Format                lvm2
  Metadata Areas        1
  Metadata Sequence No  8
  VG Access             read/write
  VG Status             resizable
  MAX LV                0
  Cur LV                7
  Open LV               6
  Max PV                0
  Cur PV                1
  Act PV                1
  VG Size               55.88 GB
  PE Size               32.00 MB
  Total PE              1788
  Alloc PE / Size       1256 / 39.25 GB
  Free  PE / Size       532 / 16.62 GB
  VG UUID               M9IZt3-dsAt-AdZw-yG4n-D46i-s6hM-Nxxdyb

Tenemos : 16GB dispnibles para poder repartir, vamos a agradar nuestro VolumenLogico de nombre: LogVol05 6GB mas.

Este es su espacio antes de llevar a cabo el proceso:

/dev/mapper/VolGroup00-LogVol05 15871      7771      7282  52% /opt

2; Vamos a darle 6GB mas.
lvextend -L+6G /dev/VolGroup00/LogVol05

3; Desmontamos la particion, verificando que nada este abierto en la particion:

umount /opt

4; Verificamos la particion:

e2fsck -f /dev/VolGroup00/LogVol05
e2fsck 1.39 (29-May-2006)
Pass 1: Checking inodes, blocks, and sizes
Pass 2: Checking directory structure
Pass 3: Checking directory connectivity
Pass 4: Checking reference counts
Pass 5: Checking group summary information
/dev/VolGroup00/LogVol05: 2854/4194304 files (73.2% non-contiguous), 2120610/4194304 blocks

5; Agrandamos la particion:

resize2fs /dev/VolGroup00/LogVol05
resize2fs 1.39 (29-May-2006)
Resizing the filesystem on /dev/VolGroup00/LogVol05 to 5767168 (4k) blocks.
The filesystem on /dev/VolGroup00/LogVol05 is now 5767168 blocks long.

6; Montamos la particion y revisamos el nuevo tamaño:

/dev/mapper/VolGroup00-LogVol05 21823      7771     12926  38% /opt

7; Levantar servicios que fueron apagados antes de iniciar este proceso y revisar su operacion, saludos!!!

martes, 21 de septiembre de 2010

Centos 5.x x64 : instalar super-smack 1.3

Ahi va, tenemos que tener:

MySQL-client-community.x86_64 5.1.50-1.rhel5 installed
MySQL-devel-community.x86_64 5.1.50-1.rhel5 installed
MySQL-server-community.x86_64 5.1.50-1.rhel5 installed
MySQL-shared-compat.x86_64 5.1.50-1.rhel5 installed

Y como super-smack no sabe hacerca de /usr/lib64 tenemos que indicarle, para esto ya tenemos el codigo y estamos en la carpeta de super-smack1.3:

./configure --with-mysql --with-mysql-lib=/usr/lib64/

Building with the following options:

MySQL Support..................... yes
PostgreSQL Support................ no
Oracle Support.................... no

If this is not what you intended, please re-run configure.

Thanks for using super-smack!

Esto sale despues de un chorizo mas grande. Tambien debemos tener libtool y sus allegados, texinfo.

Bien una vez ejecutado configure, vamos a ejecutar make, pero debemos hacer lo siguiente para arquitecturas de 64bits, abrir el archivo src/query.cc e irse a la linea aprox. 188 y modificar esa parte del codigo como sigue:

void Query_report::fd_send(int fd)
{
map >::iterator i =
type_reports.begin();
char buf[MAX_REPORT_LEN];
int len = 0, num_recs = 0;
char* p = (char*)buf + 1, *p_end = (char*)buf+sizeof(buf);

while(i != type_reports.end())
{
string s((*i).first);
int str_len = (*i).first.length();
if((long)p + str_len + 3 *sizeof(int) < (long)p_end )
{
*p++ = (char) str_len;
const char* q_type_name = s.c_str();
memcpy(p,q_type_name , str_len);
p += str_len;
memcpy(p, &((*i).second->num_queries), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->max_time), sizeof(int));
p += sizeof(int);
memcpy(p, &((*i).second->min_time), sizeof(int));
p += sizeof(int);
i++;
num_recs++;
}
else
die(0, "report buffer overflow -- too many query types");
}

len = (long)p - (long)buf;

Revisen bien que necesitan modificar.

Ahora si lo instalamos:
[root@mbx-mysqlmaster super-smack-1.3]# make install
Making install in src
make[1]: Entering directory `/usr/app/bench/super-smack-1.3/src'
make[2]: Entering directory `/usr/app/bench/super-smack-1.3/src'
/bin/sh ../mkinstalldirs /usr/local/bin
/usr/bin/install -c super-smack /usr/local/bin/super-smack
/usr/bin/install -c gen-data /usr/local/bin/gen-data
make[2]: Nothing to be done for `install-data-am'.
make[2]: Leaving directory `/usr/app/bench/super-smack-1.3/src'
make[1]: Leaving directory `/usr/app/bench/super-smack-1.3/src'
make[1]: Entering directory `/usr/app/bench/super-smack-1.3'
make[2]: Entering directory `/usr/app/bench/super-smack-1.3'
make[2]: Nothing to be done for `install-exec-am'.
/bin/sh ./mkinstalldirs /usr/share/smacks /var/smack-data
mkdir /usr/share/smacks
mkdir /var/smack-data
cp -rp ./smacks/* /usr/share/smacks
make[2]: Leaving directory `/usr/app/bench/super-smack-1.3'
make[1]: Leaving directory `/usr/app/bench/super-smack-1.3'

Ya solo necesito ver como hacerle para no se vaya a /usr/local/bin. Animo!!!

lunes, 20 de septiembre de 2010

FreeBSD 8: Actualizar reglas de spamassassin via proxy

Como puedo actualizar a spamassassin que esta atras de un web proxy como squid?

Necesitamos dar de alta una variable de sistema, como usamos chs, sa espera que la variable sea dada de alta como si fuera linux, ni modo asi es esto:

http_proxy = http://usuario:password@ip:puerto

Seria dar de alta la variable en .cshrc asi:

http_proxy "http://usuario:password@192.168.1.2:3128"

Listo.

martes, 14 de septiembre de 2010

Centos 5.x: MySQL Tools

Vamos viendo que herramientas podemos usar para saber el desempeño de MySQL, vamos empezando por: msqlreport.

Lo bajamos del site: http://hackmysql.com/mysqlreport

Descomprimimos y empezamos a trabajar sobre el:

#./mysqlreport
./mysqlreport
install_driver(mysql) failed: Can't locate DBD/mysql.pm in @INC (@INC contains: /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/site_perl/5.8.8 /usr/lib/perl5/site_perl /usr/lib64/perl5/vendor_perl/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/vendor_perl/5.8.8 /usr/lib/perl5/vendor_perl /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi /usr/lib/perl5/5.8.8 .) at (eval 7) line 3.
Perhaps the DBD::mysql perl module hasn't been fully installed,
or perhaps the capitalisation of 'mysql' isn't right.
Available drivers: DBM, ExampleP, File, Gofer, Proxy, Sponge.
at ./mysqlreport line 249

Bien, vamos a ver necesitamos instalar los siguientes paquetes antes de continuar:

yum install perl-DBD-mysql

Ahora ejecutamos ahora si el programa con los parametros del servidor:

./mysqlreport --user username --password mipassword

Use of uninitialized value in multiplication (*) at ./mysqlreport line 829.
Use of uninitialized value in formline at ./mysqlreport line 1227.
MySQL 5.1.50-community- uptime 0 6:19:10 Tue Sep 14 23:30:32 2010

__ Key _________________________________________________________________
Buffer used 28.00k of 384.00M %Used: 0.01
Current 71.85M %Usage: 18.71
Write hit 35.75%
Read hit 94.88%

__ Questions ___________________________________________________________
Total 3.05k 0.1/s
Com_ 1.64k 0.1/s %Total: 53.82
QC Hits 630 0.0/s 20.66
DMS 458 0.0/s 15.02
COM_QUIT 327 0.0/s 10.72
-Unknown 7 0.0/s 0.23
Slow 10 s 1 0.0/s 0.03 %DMS: 0.22 Log: OFF
DMS 458 0.0/s 15.02
SELECT 395 0.0/s 12.96 86.24
INSERT 33 0.0/s 1.08 7.21
DELETE 27 0.0/s 0.89 5.90
UPDATE 2 0.0/s 0.07 0.44
REPLACE 1 0.0/s 0.03 0.22
Com_ 1.64k 0.1/s 53.82
set_option 611 0.0/s 20.04
show_tables 232 0.0/s 7.61
change_db 192 0.0/s 6.30

Scan 719 0.0/s %SELECT: 182.03
Range 0 0/s 0.00
Full join 0 0/s 0.00
Range check 0 0/s 0.00
Full rng join 0 0/s 0.00
Sort scan 18 0.0/s
Sort range 0 0/s
Sort mrg pass 0 0/s

__ Query Cache _________________________________________________________
Memory usage 165.27k of 32.00M %Used: 0.50
Block Fragmnt 1.70%
Hits 630 0.0/s
Inserts 197 0.0/s
Insrt:Prune 197:1 0.0/s
Hit:Insert 3.20:1

__ Table Locks _________________________________________________________
Waited 0 0/s %Total: 0.00
Immediate 536 0.0/s

__ Tables ______________________________________________________________
Open 35 of 512 %Cache: 6.84
Opened 51 0.0/s

__ Connections _________________________________________________________
Max used 4 of 151 %Max: 2.65
Total 329 0.0/s

__ Created Temp ________________________________________________________
Disk table 143 0.0/s
Table 687 0.0/s Size: 16.0M
File 5 0.0/s

__ Threads _____________________________________________________________
Running 1 of 1
Cached 3 of 8 %Hit: 98.78
Created 4 0.0/s
Slow 0 0/s

__ Aborted _____________________________________________________________
Clients 0 0/s
Connects 10 0.0/s

__ Bytes _______________________________________________________________
Sent 1.80M 79.3/s
Received 245.42k 10.8/s

__ InnoDB Buffer Pool __________________________________________________
Usage 304.00k of 8.00M %Used: 3.71
Read hit 84.42%
Pages
Free 493 %Total: 96.29
Data 19 3.71 %Drty: 0.00
Misc 0 0.00
Latched 0.00
Reads 77 0.0/s
From file 12 0.0/s 15.58
Ahead Rnd 1 0.0/s
Ahead Sql 0 0/s
Writes 0 0/s
Flushes 0 0/s
Wait Free 0 0/s

__ InnoDB Lock _________________________________________________________
Waits 0 0/s
Current 0
Time acquiring
Total 0 ms
Average 0 ms
Max 0 ms

__ InnoDB Data, Pages, Rows ____________________________________________
Data
Reads 25 0.0/s
Writes 3 0.0/s
fsync 3 0.0/s
Pending
Reads 0
Writes 0
fsync 0

Pages
Created 0 0/s
Read 19 0.0/s
Written 0 0/s

Rows
Deleted 0 0/s
Inserted 0 0/s
Read 0 0/s
Updated 0 0/s

Le toca el turno a mysqltuner, lo bajamos de:

http://blog.mysqltuner.com/

Lo ponemos en modo script:

chmod +x mysqltuner.pl

./mysqltuner.pl

>> MySQLTuner 1.0.1 - Major Hayden
>> Bug reports, feature requests, and downloads at http://mysqltuner.com/
>> Run with '--help' for additional options and output filtering
Please enter your MySQL administrative login: root
Please enter your MySQL administrative password:

-------- General Statistics --------------------------------------------------
[--] Skipped version check for MySQLTuner script
[OK] Currently running supported MySQL version 5.1.50-community-log
[OK] Operating on 64-bit architecture

-------- Storage Engine Statistics -------------------------------------------
[--] Status: -Archive -BDB -Federated +InnoDB -ISAM -NDBCluster
[--] Data in MyISAM tables: 924B (Tables: 9)
[!!] InnoDB is enabled but isn't being used
[OK] Total fragmented tables: 0

-------- Performance Metrics -------------------------------------------------
[--] Up for: 15m 18s (28 q [0.031 qps], 15 conn, TX: 26K, RX: 1K)
[--] Reads / Writes: 100% / 0%
[--] Total buffers: 1.4G global + 12.4M per thread (151 max threads)
[!!] Maximum possible memory usage: 3.3G (167% of installed RAM)
[!!] Slow queries: 10% (3/28)
[OK] Highest usage of available connections: 0% (1/151)
[OK] Key buffer size / total MyISAM indexes: 384.0M/120.0K
[!!] Query cache efficiency: 0.0% (0 cached / 14 selects)
[OK] Query cache prunes per day: 0
[OK] Sorts requiring temporary tables: 0% (0 temp sorts / 1 sorts)
[OK] Temporary tables created on disk: 0% (0 on disk / 8 total)
[OK] Thread cache hit rate: 93% (1 created / 15 connections)
[OK] Table cache hit rate: 82% (32 open / 39 opened)
[OK] Open file limit used: 5% (68/1K)
[OK] Table locks acquired immediately: 100% (18 immediate / 18 locks)
[!!] Connections aborted: 13%

-------- Recommendations -----------------------------------------------------
General recommendations:
Add skip-innodb to MySQL configuration to disable InnoDB
MySQL started within last 24 hours - recommendations may be inaccurate
Reduce your overall MySQL memory footprint for system stability
Your applications are not closing MySQL connections properly
Variables to adjust:
*** MySQL's maximum memory usage is dangerously high ***
*** Add RAM before increasing MySQL buffer variables ***
query_cache_limit (> 1M, or use smaller result sets)

Ahora le toca a innotop este lo bajamos de:

http://code.google.com/p/innotop/downloads/list

Descomprimimos y vemos que necesitamos:

perl Makefile.PL
Checking if your kit is complete...
Looks good
Warning: prerequisite Term::ReadKey 2.1 not found.
Writing Makefile for innotop

Necesitamos instalar:

yum install perl-TermReadKey

Ahora si lo instalamos:

make install
cp innotop blib/script/innotop
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/innotop
Manifying blib/man1/innotop.1
Installing /usr/share/man/man1/innotop.1
Installing /usr/bin/innotop
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/innotop/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod

Probando:

innotop --u root --password mi-password

When Load QPS Slow QCacheHit KCacheHit BpsIn BpsOut
Total 0.00 0.12 0 42.86% 100.00% 5.27 82.19

Cmd ID State User Host DB Time Query
Daemon 1 Waiting on empty q event_sc localhost 14:31

Listo.

Ahora le toca el turno a mysqlsla, este lo bajamos de:

http://hackmysql.com/mysqlsla

Lo mismo, descomprimimos y a instalar, leer el INSTALL ee.

perl Makefile.PL
Checking if your kit is complete...
Looks good

make
cp lib/mysqlsla.pm blib/lib/mysqlsla.pm
cp bin/mysqlsla blib/script/mysqlsla
/usr/bin/perl "-MExtUtils::MY" -e "MY->fixin(shift)" blib/script/mysqlsla
Manifying blib/man3/mysqlsla.3pm

make install
Installing /usr/lib/perl5/site_perl/5.8.8/mysqlsla.pm
Installing /usr/share/man/man3/mysqlsla.3pm
Installing /usr/bin/mysqlsla
Writing /usr/lib64/perl5/site_perl/5.8.8/x86_64-linux-thread-multi/auto/mysqlsla/.packlist
Appending installation info to /usr/lib64/perl5/5.8.8/x86_64-linux-thread-multi/perllocal.pod

Probamos:

mysqlsla --log-type slow
Report for slow logs:
0 queries total, 0 unique
Sorted by 't_sum'
Grand Totals: Time 0 s, Lock 0 s, Rows sent 0, Rows Examined 0

Aun no tenemos nada listo, pero ahi esta corriendo.

Otro mas mytop y mtop.

super-smack.

Debemos copear el archivo /usr/share/smack/select-key.smack ahi mismo con el nombre select-key-mysql.smack.

Editarlo a nuestros parametros.

Y por ejemplo ejecutarlo asi:

super-smack -d mysql select-key-mysql.smack 10 1000

Query Barrel Report for client smacker1
connect: max=203ms min=0ms avg= 43ms from 10 clients
Query_type num_queries max_time min_time q_per_s
select_index 20000 0 0 38950.44

Aqui genera una tabla myisam.

Le toca el turno a sysbench, Centos 5.5 tiene la 0.4.10, del sitio podemos descargar la 0.4.12, es lo que vamos hacer e instalar.

Leyendo el INSTALL del src dice que debemos hacer esto:

1; Desempaquetar el archivo .tar.gz.
2; Entrar a el directorio creado.
3; Ejecutar:
./configure
4; Ejecutar
make ---->Pero antes de instalar libtool,autocof,gcc,gcc-c++ con yum.
5; make install

Listo ya tenemos a sysbench operable.

Vamos a generar una tabla de nombre sbtest como dice el manual con




lunes, 13 de septiembre de 2010

FreeBSD 8.x: Modulo coretemp

Tengo problemas con un servidor supermicro 1U que tiene un Xeon dual core CPU: Intel(R) Xeon(R) CPU E3110 @ 3.00GHz (2999.68-MHz K8-class CPU).

Este servidor tiene la funcion de spam filter. Sus uptimes no han sido revasados:

bsdsar
Time % User % Sys % Nice % Intrpt % Idle
00:00 0 0 0 0 100
01:00 0 0 0 0 100
02:00 0 0 0 0 100
03:00 0 0 0 0 100
04:00 0 0 0 0 100
05:00 0 0 0 0 100
06:00 0 1 0 0 99
07:00 0 0 0 0 100
08:00 0 0 0 0 100
08:45 0 0 0 0 100
08:50 0 0 0 0 100
08:55 0 0 0 0 100
09:00 0 0 0 0 100
09:45 0 0 0 0 100
09:50 0 0 0 0 100
09:55 0 0 0 0 100
10:00 0 0 0 0 100
10:45 0 0 0 0 100
10:50 0 0 0 0 100
10:55 0 0 0 0 100
11:00 0 0 0 0 100
11:45 0 0 0 0 100
11:50 0 0 0 0 100
11:55 0 0 0 0 100
12:00 0 0 0 0 100
12:45 0 0 0 0 100
12:50 0 0 0 0 100
12:55 0 0 0 0 100
13:00 0 0 0 0 99
13:45 3 4 0 0 94
13:50 3 3 0 0 94
13:55 2 4 0 0 94
14:00 3 3 0 0 94

Por alguna razon turbia se me congela cada 2 o 3 semanas, no es nuevo pero quiero pensar que algo hace que se caliente y le pase esto, la desventaja es que no lo tengo en mi oficina, sino en las oficinas centrales que solo visito 1 vez a la semana.

Solo una vez me toco estar presente cuando se congelo, cuando entre a el cuarto de servidores los abanicos estaban trabajando al maximo parecia que iba a despejar, el teclado no respondia, asi que no tuve otra manera mas sana de resetearlo que de botonazo, lo que nunca se debe hacer.

Bien en cuanto lo hice, los abanicos empezaron a trabajar de manera normal, se reinicio el servidor y el raid-1 no sufrio dano alguno.

Los servidores cada vez son mas inteligentes y tienen mas electronica integrada, ellos mismos balancean la velocidad de los abanicos de acuerdo a la temperatura del nucleo, la gran desventaja que siempre hacen las aplicaciones encargadas o para windows o para linux redhat.

Los otros como el caso de FreeBSD no tiene esas comodidades, por ello los programadores tienen que hacer utilerias que hagan estas tareas.

Para esto alguien en el foro de freebsd comento del modulo coretemp:

man coretemp
CORETEMP(4) FreeBSD Kernel Interfaces Manual CORETEMP(4)

NAME
coretemp -- device driver for Intel Core on-die digital thermal sensor

SYNOPSIS
To compile this driver into the kernel, place the following line in your
kernel configuration file:

device coretemp

Alternatively, to load the driver as a module at boot time, place the
following line in loader.conf(5):

coretemp_load="YES"

DESCRIPTION
The coretemp driver provides support for the on-die digital thermal sen-
sor present in Intel Core and newer CPUs.

The coretemp driver reports each core's temperature through a sysctl node
in the corresponding CPU device's sysctl tree, named
dev.cpu.%d.temperature.

SEE ALSO
sysctl(8)

HISTORY
The coretemp driver first appeared in FreeBSD 7.0.

AUTHORS
The coretemp driver was written by Rui Paulo as part
of a Google Summer of Code project. This manual page was written by
Dag-Erling Smorgrav .

FreeBSD 8.0 August 23, 2007 FreeBSD 8.0

Preguntando me comentaron que aplica a los chips nuevos, en mi caso parece que Xeon es parte de ellos, aqui un ejemplo de mi salida:

sysctl -a | grep temperature
dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 40.0C

Ahora necesito un script que me mande cada 5 minutos un correo con la temperatura actual, asi podre saber si en realidad la temperatura del cpu este llegando a un nivel que provoca esto, tengo que dar con el problema, este es el script con cron:

#crontab -e
*/5 * * * * /sbin/sysctl -a | grep temperature | mail -s "Temperatura Actual" root

Esto es lo que me llega:

Subject: Temperatura Actual

dev.cpu.0.temperature: 41.0C
dev.cpu.1.temperature: 40.0C

No soy un experto en scripts, pero ya vere como hacerle para que cuando llegue a cierta temperatura me mande un aviso de "Peligro" y prevenir que se congele el equipo.

Para activar este modulo tenemos 2 opciones o lo incluimos en el kernel o lo cargamos como modulo, yo prefiero lo 1ro.

device coretemp

Hacen todos los pasos para compilar el kernel, instalarlo y arrancarlo.

O si prefieren lo segundo, abren el /boot/loader.conf y agregan esta linea:

coretemp_load="YES"

Esto es para que cada que reinicien se cargue el modulo, si lo quieren cargar en tiempo real ya saben besederos:

kldload coretemp

Listo.

Si existen mas maneras de llevar a cabo esto me avisan!!!