domingo, 29 de julio de 2012

Pfsense 2: Uptimes de clientes.

Como andan 2 equipos operando, vamos viendo sus uptimes:

Figura 1: Equipo 1.
Figura 2: Equipo 2.
Asi andan 2 de mis equipos, el 1ro ya tiene mas de 3 meses que no se reinicia, el 2do hace poco tuve que apagarlo por mantenimiento a las lineas electricas, pero ya lleva 2 meses sin parar que bueno solo que esta semana le toca actualizaese, saludos!!!

Pfsense 2:Squig logs y limites de la version nano.

Ya despues de haber tenido operando algunos equipos de pfsense v 2.x Nano, nos encontramos con unos detalles como estos:


pid 9466 (squid), uid 62 inumber 12 on /var: filesystem full
pid 9466 (squid), uid 62: exited on signal 6
pid 30806 (squid), uid 62 inumber 11 on /var: filesystem full
pid 30806 (squid), uid 62 inumber 12 on /var: filesystem full
pid 30806 (squid), uid 62: exited on signal 6
pid 31495 (squid), uid 62 inumber 11 on /var: filesystem full
pid 31495 (squid), uid 62 inumber 12 on /var: filesystem full
pid 31495 (squid), uid 62: exited on signal 6
pid 32215 (squid), uid 62 inumber 11 on /var: filesystem full
pid 32215 (squid), uid 62 inumber 12 on /var: filesystem full
pid 32215 (squid), uid 62: exited on signal 6
pid 32977 (squid), uid 62 inumber 11 on /var: filesystem full
pid 32977 (squid), uid 62 inumber 12 on /var: filesystem full
pid 32977 (squid), uid 62: exited on signal 6
pid 33551 (squid), uid 62 inumber 11 on /var: filesystem full
pid 33551 (squid), uid 62 inumber 12 on /var: filesystem full
pid 33551 (squid), uid 62: exited on signal 6
pid 58670 (squid), uid 62 inumber 11 on /var: filesystem full
pid 58670 (squid), uid 62 inumber 12 on /var: filesystem full
pid 58670 (squid), uid 62: exited on signal 6
pid 62870 (squid), uid 62 inumber 11 on /var: filesystem full
pid 62870 (squid), uid 62 inumber 12 on /var: filesystem full
pid 62870 (squid), uid 62: exited on signal 6
pid 10023 (squid), uid 62 inumber 11 on /var: filesystem full
pid 10023 (squid), uid 62 inumber 12 on /var: filesystem full
pid 10023 (squid), uid 62: exited on signal 6
pid 13814 (squid), uid 62 inumber 11 on /var: filesystem full
pid 13814 (squid), uid 62 inumber 12 on /var: filesystem full
pid 13814 (squid), uid 62: exited on signal 6
pid 14288 (squid), uid 62 inumber 11 on /var: filesystem full

Ahi caray, bueno el unico que puede provocar esto es squid, yo anteriormente tenia la idea de mantener 1 mes de logs(access.log) por si algo ocurria, pero al paso del tiempo lo que mas importaba era que Sarg lograra mostrar reportes de acceso, y lo ha esto haciendo sin problemas:

Figura 1: Reportes de Squid via Sarg.
Entonces, cual es la finalidad de mantener tantos logs?

Analizando un poco esto y entendiendo que la version Nano tiene limites por su tipo de arquitectura, algunos de ellos son:

a) /var es una particion en memoria, cada que se reinicia el sistema se crea de 0(dirian los gueros, from scratch) y ya tiene una tamaño definido cuando se compila, para cambiarlo deberiamos meternos a el codigo y hacer el cambio pero tomando en cuenta que todos los equipos tipo empotrados tienen distintas caracteristicas y una de ellos es la memoria.

Entonces si hacemos esto y creamos un /var de 128MB y nuestro equipo carece de memoria entonces ya tenemos problemas, por eso los desarrolladores optaron por ser realistas y decidieron darle un valor que con 256MB pueden correr un sistema sin tanto problema.

Figura 2: Tamaño de particiones.
La figura 2 muestra las particiones que son de tipo memoria y sus tamanos por default. Apartir de este momento vamos a cambiar la manera de rotar los logs, ya que teniamos un script que lo hacia.

Como podran ver tambien /tmp es tipo de memoria y se crea la momento de arrancar el sistema.

Nuestro script era este:


#1tomamos la variable para marcar nuestro log como el dia del mes
dia=`date '+%d'`
#2 nos movemos a el folder de logs de squid
cd /var/squid/logs/
#3 mandamos el contenido de access.log a el archivo nuevo de nombre $date.log
/bin/cat ./access.log > ./$dia.log
#4 vaciamos el contenido de access.log
/bin/echo -n '' > ./access.log
#5 confirmamos los permisos del archivo access.log
/usr/sbin/chown proxy:proxy ./access.log
#6 reconfiguramos squid
/usr/local/sbin/squid -k reconfigure
#7 comprimimos el archivo de log creado.
/usr/bin/gzip ./$dia.log

Este lo vamos a cambiar por este:


#1 nos movemos a el folder de logs de squid
cd /var/squid/logs/
#2 respaldamos el di de hoy solamente
/bin/cat ./access.log > ./access.bak
#3 vaciamos el contenido de access.log
/bin/echo -n '' > ./access.log
#4 confirmamos los permisos del archivo access.log
/usr/sbin/chown proxy:proxy ./access.log
#5 reconfiguramos squid
/usr/local/sbin/squid -k reconfigure
#6 comprimimos el archivo de log creado.
/usr/bin/gzip ./access.bak

Ya solo vamos a guardar 1 dia solamente, se va a ejecutar a la misma hora, y no vamos a tener tantos logs, de todos modos hasta el momento como mencione, sarg ha estado funcionando sin problemas, ya no es necesario tener tanta informacion inutil.

Solo vamos a tener:

  • access.log
  • access.bak
  • cache.log
Ya por ultimo seria cuestion de ver como controlar los reportes de sarg ya que tarde o temprano tambien van a llenar el disco, pero esa es otra historia, saludos!!!



sábado, 28 de julio de 2012

Windows: Respaldando SQL Server 2008 R2.

Esta vez vamos a tocar los respaldos de sql server, yo estoy trabajando sobre la version 2008 R2. Muy pocas veces me he metido con esta BD, pero como nos llego deseo conocer de ella, los respaldos de cualquier BD son de las tareas aparte de importantes de alta prioridad.

No quiero decir que las demas tareas de sistemas no lo sean pero estas tienen prioridad, todo lo que hagan debe tener su valor de prioridad.

SQL server tiene opcion de crear batches y ahi dentro uno armar su klabacero, quiero mencionar que el script que use lo tome de una persona, ahorita que lo vean ahi viene su nombre, yo solo lo adapte a mis necesidades.

Un detalle que le encontre a el script es que cuando se ejecuta el script diferencial(ahorita entramos en detalles) con la BD master truena con ella pero continua con las demas.

Cuando vi esto en el log rapidamiente me fui a googlear y por ahi localice docs de Redmont que nos dice que la BD master solo permite backups FULL, si no creen traten con "Server Management Studio" y traten de hacerlo, no los deja. 

Desconozco si en las versiones anteriores es diferente, pero no hay problema por que es una BD que pocas veces se modifica, si su caso es diferente entonces van a tener que crear un batch que la respalde diario.

Tipos de Respaldos, estoy trabajando sobre 2 solamente:

Full: Crea un respaldo completo.
Diferencial: Crea un respaldo con los datos que cambiaron en base a el ultimo respaldo.

Configuracion de Directorio de Respaldos:

A mi no me gusta usar el directorio que usa SQL Server, yo prefiero usar uno especifico para respaldos, yo en esta ocacion voy a crear un folder en el disco C: llamado Backups, quedaria asi la ruta:

C:\Backups

Agenda de Respaldos:

Vamos a usar el mismo Task Scheduler de Windows, en esta version si cambia pero la interface, los parametros continuan, vamos a confiurar asi mis respaldos:

Full: Lun, Miercoles, Viernes, Sabado.
Diferenciales: Martes, Miercoles, Jueves

Como mi servidor de produccion esta dentro de un dominio bajo Linux con samba+Ldap entonces mi autentificacion es atraves de Windows, es importante saber el nombre del equipo donde esta operando, en mi caso se llama:

WIN-U4I7H5GMO2U

Es la version SQL 2008 R2 Express mi instancia asi se llama:

sqlexpress

Esto pronto van a ver donde se va a usar.

Parece que ya tenemos la info que necesitamos, vamos a empezar por ver los scripts de respaldo, empezando por el Full.

Full Script: sql-bak-full.sql.

Contenido:

-- SQL Server backup routine to backup all databases
-- Jed S. Walker, 2011/10/03
-- to automate via job scheduler
--  sqlcmd -S theSQLserver\theWeather -i C:\SQLSERVERBACKUP\scripts\backup_db_all.sql -o C:\SQLSERVERBACKUP\backup_db_all.log
--Customize by: pmoreno at bajaopensolutions dot com 2012-07-25


PRINT '=>Setup base variables'
DECLARE @today VARchar(20)
DECLARE @dbname nvarchar(255)
DECLARE @backupname nvarchar(255)
DECLARE @backuploc nvarchar(255)
SET @backuploc = 'C:\Backups\'  
PRINT @backuploc
--SET @today = CONVERT(CHAR(8), GETDATE(), 112)
SET @today = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20), GETDATE(), 126),'-',''),':',''),'.','')
PRINT @today


---- backup all online databases
-- first get all databases to be backed up
DECLARE @dbList TABLE
( dbid INT,
  dbname NVARCHAR(256)
)
INSERT  INTO @dbList ( dbid, dbname )
SELECT  dbid, name
FROM    master.dbo.sysdatabases
WHERE   ( name NOT IN ( 'tempdb' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
ORDER BY dbid


------ Starting backup, one by one
DECLARE @maxid int;
DECLARE @curid int;
SELECT @curid = MIN(dbid)-1, @maxid = MAX(dbid) from @dbList;


PRINT '=> Perform backups'
WHILE @curid != @maxid
  BEGIN
    SELECT  TOP(1)
            @curid = dbid,
            @dbname = dbname
    FROM    @dbList
    WHERE   dbid > @curid;
    PRINT 'Debug: curid= ' + str(@curid) + ' maxid=' + str(@maxid)
    SET @backupname = @backuploc + @dbname + '_' + @today + '.bakF'
    PRINT N'=> Backup: ' + @dbname + ' to ' + @backupname
    BACKUP DATABASE @dbname TO DISK = @backupname with NOFORMAT, NOREWIND, INIT, SKIP, CHECKSUM, STOP_ON_ERROR
  END


PRINT ''
PRINT '=>Done with backups'


NOTA: Ahi viene el autor original.

Marque en Bold una instruccion esa indica que la BD tempdb no nos interesa, segun la doc de Sql Server no es critica esa BD.

Este script lo almaceno en el mismo directorio donde se van los respaldos C:\Backups.

Ahora viene el Diferencial:

Diff Script: sql-bak-diff.sql.
Contenido:


-- SQL Server backup routine to backup all databases Differential
-- Jed S. Walker, 2011/10/03
-- to automate via job scheduler
--   sqlcmd -S theSQLserver\theWeather -i C:\SQLSERVERBACKUP\scripts\backup_db_all.sql -o C:\SQLSERVERBACKUP\backup_db_all.log
-- Customize by pmoreno at bajaopensolutions dot com 2012-07-25




PRINT '=>Setup base variables'
DECLARE @today VARchar(20)
DECLARE @dbname nvarchar(255)
DECLARE @backupname nvarchar(255)
DECLARE @backuploc nvarchar(255)
SET @backuploc = 'C:\Backups\'  
PRINT @backuploc
--SET @today = CONVERT(CHAR(8), GETDATE(), 112)
SET @today = REPLACE(REPLACE(REPLACE(CONVERT(VARCHAR(20), GETDATE(), 126),'-',''),':',''),'.','')
PRINT @today


---- backup all online databases
-- first get all databases to be backed up
DECLARE @dbList TABLE
( dbid INT,
  dbname NVARCHAR(256)
)
INSERT  INTO @dbList ( dbid, dbname )
SELECT  dbid, name
FROM    master.dbo.sysdatabases
WHERE   ( name NOT IN ( 'tempdb','master' ) )
AND DATABASEPROPERTYEX(name, 'Status') = 'ONLINE'
ORDER BY dbid


------ Starting backup, one by one
DECLARE @maxid int;
DECLARE @curid int;
SELECT @curid = MIN(dbid)-1, @maxid = MAX(dbid) from @dbList;


PRINT '=> Perform backups'
WHILE @curid != @maxid
  BEGIN
    SELECT  TOP(1)
            @curid = dbid,
            @dbname = dbname
    FROM    @dbList
    WHERE   dbid > @curid;
    PRINT 'Debug: curid= ' + str(@curid) + ' maxid=' + str(@maxid)
    SET @backupname = @backuploc + @dbname + '_' + @today + '.bakD'
    PRINT N'=> Backup: ' + @dbname + ' to ' + @backupname
    BACKUP DATABASE @dbname TO DISK = @backupname with DIFFERENTIAL, NOFORMAT, NOREWIND, INIT, SKIP, CHECKSUM, STOP_ON_ERROR
  END


PRINT ''
PRINT '=>Done with backups'

Ahora en bold les muestro como estoy agregando la BD master por lo que les mencione arriba hacerca de esta BD, no deseo crear respaldos diferenciales a ella por eso la marco en esa instruccion.

Ya tenemos nuestros sctripts sigue los batches que los van a ejecutar, estos son mas sencillos, aqui estan:

Batch Full: sql-backup-full.bat
Contenido:

sqlcmd -S WIN-U4I7H5GMO2U\sqlexpress -E  -i C:\Backups\sql-bak-full.sql -o C:\Backups\backupF.log

-S Nombre de instancia.
-E Usar conexion segura.
-i archivo de entrada
-o Archivo de salida (logs).

Batch Diff: sql-backup-diff.bat
Contenido:


sqlcmd -S WIN-U4I7H5GMO2U\sqlexpress -E  -i C:\Backups\sql-bak-diff.sql -o C:\Backups\backupD.log

Ahi pueden notar las diferencias, si las notan verdad?

Si desean probarlos antes de continuar es muy facil, solo abren su consola cmd en modo Administrador(es windows :-(...) se van a el directorio donde estan sus bacthes y scripts, en mi caso esta en el mismo lugar todos C:\Backups.

Ya dentro, solo ejecutan:

C:\Backups\sql-backup-full.bat

C:\Backups\sql-backup-diff.bat

Si no hay errores no van a recibir nada de salida, todo se va ir a los logs indicados en con el parametro -o.

Ahora vamos a llevar a cabo la programacion de la ejecucion de estos scripts, para esto abrimos nuestro Task Scheduler, esto es mas grafico y facil de hacer, vamos viendo los pasos:

Figura 1: Abrir el Task Scheduler.
Dentro del TS(Task Scheduler) creamos una tarea nueva.

Figura 2: Ingresamos datos basicos.
Vamos usar solo las pestañas: General, Triggers, Actions, las demas no.


Figura 3: Indicamos cuando deseamos la ejecucion.
Para que se vea la ejecucion estoy indicando el dia de hoy a las 6:11PM sabado, ustedes ya que lo vayan a llevar a produccion lo configuran a su manera.

Figura 4: Indicamos aqui la ruta del batch.
Sigan el wizard para indicarle donde esta el batch.

Figura 5: Configuracion Final.
Ya terminamos ahora es cuestion de esperar y ver si se lleva a cabo la tarae cuando se indica. Ya paso la hora indicada vamos a ver nuestro directorio a ver si se ejecuto:

Figura 6: Respaldos creados.
Como podran ver parece que funciono, ya solo es cuestion de terminar el Diff, si ya les funciono el Full, el diff ya es pan comido.

Ya solo quedaria probarlos, pero esa es otra historia que sigue despues de hacer creado sus respaldos.

Saludos.

lunes, 23 de julio de 2012

Windows 2008: SQL Server herramientas de desempeno SQLIO.

Como veran tambien le meto maquinas a servidores windows, tengo que montar un sql-server 2008 y no queda mas que correrlo sobre windows 2008 R2.

Como es un servidor de bd, me gustaria saber como esta mi sistema de archivos, y mas que va a ser virtual con Xen 4.1.

Existen varias herramientas que nos ayudan a darle carrilla a el disco duro, una de ellas es sqlio, se baja directamente de Microsoft:

sqlio-link.

Esta herramienta funciona de la consola, no es una version GUI, asi que pierdanle el miedo a la consola, con MS-DOS asi se hacian las cosas.

Todo esto lo estamos haciendo en base a la pagina:

sqlio-tutorial-link

Mi VM donde estoy probando eso tiene las siguientes caracteristicas:

OS: Windows 2008 R2 x64
RAM: 2048
Espacio disponible: 6GB.
Cores=2.

Empezamos:


a) abrir el notepad como administrador
b) abrir el archivo de nombre param que se localiza donde esta instalado el sqlio: c:\Program Files (x86)\sqlio\
c) Editarlo y incrementar el tamano mas que lo se tiene en RAM, en mi caso lo deje en 3072 quedaria asi:

c:\testfile.dat 2 0x0 3072

d) Salvar archivo.
e) Crear el archivo para las pruebas, no se preocupen por los resultados, aqui deseamos crear el archivo para las pruebas siguientes, entonces en la consola se van a el directorio donde quedo instalado el sqlio y ejecutan lo siguiente:

sqlio -kW -s10 -fsequential -t8 -o8 -b8 -LS -Fparam.txt timeout /T 10

Esto va a tardar ya que estamos creando el archivo, al final vamos a tener nuestro archivo del tamano deseado:

Figura 1: Creando archivo con sqlio.
Una vez terminado tenemos lo siguiente en nuestro disco "C", no es necesario que sea el C puede ser cualquier directorio y es altamente recomendable que sea el disco donde vayan a instalar SQL Server.

Figura 2: Archivo creado para pruebas.
f) Listo.

Ya tenemos nuestro archivo para ahora si llevar a cabo nuestras pruebas que van a masacrar el disco, esto le va a poner mano dura a el disco duro, recomendacion no lo hagan con el sistema de produccion, mucho menos durante las hors laborales, debe ser cuando el servidor no se este usando y en dado caso agendarlo y avisar con tiempo a los departamento afectados.

Ahora vamos a crear un batch donde vamos a meter los siguientes comandos repetidos solo vamos a cambiar uno de ellos pero vamos a ejecutar la misma tarea repetidamente asi que un batch se presta bien.

Abran el notepad(como administrador) y agreguen estos comandos:

Pueden ser tantos ustedes crean convenientes, la idea es probar distintos valores y saber donde nuestro sistema de archivos le favorece:

sqlio -kW -t2 -s60 -o1 -frandom -b8 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b8 -BH -LS
C:\TestFile.dat
 

sqlio -kW -t2 -s60 -o1 -frandom -b16 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b16 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b32 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -frandom -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -frandom -b64 -BH -LS
C:\TestFile.dat

Que se llame: frandon-w.bat

Y ahora otro que lleve esto:

sqlio -kW -t2 -s60 -o1 -fsequential -b8 -BH -LS C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b8 -BH -LS 
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -fsequential -b8 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -fsequential -b8 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o4 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o8 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o16 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o64 -fsequential -b16 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o128 -fsequential -b16 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60  -o1 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o2 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o4 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o8 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o16 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o32 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o64 -fsequential -b32 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o128 -fsequential -b32 -BH -LS
C:\TestFile.dat

sqlio -kW -t2 -s60 -o1 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60 -o2 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o4 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o8 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o16 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o32 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o64 -fsequential -b64 -BH -LS
C:\TestFile.dat
sqlio -kW -t2 -s60  -o128 -fsequential -b64 -BH -LS
C:\TestFile.dat

Este que se llame: fseq-w.bat

k=Probar lectura(R)/Escritura(W).
t=Hilos.
o=Peticiones al mismo tiempo.
s= Tiempo de prueba.
b=Tamano de los paquetes deseados multiplos de 2.
f= tipo de accesos secuencial(sequential) o aleatorio(random)

Ya en un servidor debemos jugar con mas valores, ustedes empiecen a crear sus pruebas, como mas hilos (t4,t8)

Le ventaja de este batch es que podemos sacar los resultados a un archivo de texto cuando se ejecute y vamos a hacerlo asi:

trandon-w.bat > trandom.txt

Y el resultado lo podemos analizar con detalle ya que termine.

Figura 3. Resultados de SQLIO.
 Como podran ver los datos mas importantes son:

IOS= Entradas/Saludos x segundo.
MB/s = Megabytes x  Segundo.

Revisen su archivo y vean donde esos datos son altos de sus sistema de archivos, en mi caso es bajo por que es mi maquina de oficina y aqui tengo Ubuntu GUI, virtualbox, etx ejecutandose.

Pero en otra equipo tengo valores mas altos, ejecuten las demas pruebas  tendran un panorama de como anda su sistema de archivos, empezar a buscar donde ajustar, mas memoria, otro disco, mas cores, ajustar Windows 2008, en fin esto es solo para checar el pulso del sistema de archivos, voy a seguir agregando mas herramientas y luego ver como darle ajustes a el servidor, saludos!!!

domingo, 22 de julio de 2012

Centos 5.x: Herramientas de desempeño de disco y elevadores

Ahora vamos a ver como esta eso de los famosos elevadores, cuando esta armando maquinas virtuales algo muy importante es que tu sistema de archivos sea lo mas rapido posible para poder soportar la carga que las  vm(Virtual Machine=Maquinas Virtuales) le van a dar.

Aqui no voy a meterme con las vm, ya que estamos hablando solo del host donde se van a montar la vm, lo que voy a tocar son correrle ciertas utlilerias a mi disco y usando los 4 elevadores que son los que controlan los accesos a nuestros discos duros para saber si estamos con el elevador correcto.

Va a ver mucha info hacerca de los elevadores, pero vamos viendo como se comportan cada uno, tampoco voy a cambiar sus parametros, asi como los carga les vamos a correr las siguientes herramientas:

  • bonnie
  • bonnie++
  • dd
  • hdparm

Para empezar y ademas vamos a ver si los parametros extras que podemos agregarle a nuestras particiones cuando las montamos afecta el desempeno como:

  • noatime
  • nodiratime
  • data=writeback (peligrosa)

Estas tareas son muy tediosas, asi que si lo repiten haganlo cuando tengan tiempo.

Otra cosa, como en mi caso voy a trabajar con Xen voy a ver si si host tiene mejor desempeno con 2 cores, que con 1, xen dice que el host requiere solo 1 core, pero vamos a ver que dicen las pruebas.

Nuestras particiones son estas:


mount
/dev/mapper/VolGroup00-ROOT on / type ext3 (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
/dev/mapper/VolGroup00-VAR on /var type ext3 (rw)
/dev/mapper/VolGroup00-TMP on /tmp type ext3 (rw)
/dev/mapper/VolGroup00-OPT on /opt type ext3 (rw)
/dev/mapper/VolGroup00-USR on /usr type ext3 (rw)
/dev/sda1 on /boot type ext3 (rw)


Como podran ver es la instalacion comun, utilizando el elevador por defecto: cfq.


Entonces vamos a empezar con esta configuracion:


Core = 1
Memoria: 1024MB=1GB
DDR3 1333 No ECC.

Hemos deshablitado servicios que no necesito, solo los necesarios para que Xen funcione.

Vamos a atacar la particion donde tengo mis vm's /opt, vamos a empezar.

NOTA: Que su equipo no este en produccion y sobre todo que no esta ejecutando ningun servicio como apache, mysql, etc.

==Caso A==

Bonnie: Bonnie por default creo un archivo de 100MB lo cual no es conveniente ya que dice el manual que no estamos en realidad atacando el disco si no la memoria, por ello vamos a ejecutar el comando asi:

bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun

-d = directorio temporal donde crear el archivo
-s = Tamaño del archivo, regla doble de memoria.
-m= Nombre de la maquina.

Vamos a ejecutar la tarea 3 veces continuas para sacar un promedio.

Ejecucion
(1)

Bonnie 1.5: File '/opt/bonnie//Bonnie.3091', size: 2147483648, volumes: 1
Writing with putc()...
[root@localhost opt]# bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /                                                                                                                    opt/bonnie -s 2048 -m Xen4.1-Tun && bonnie -d /opt/bonnie -s 2048 -m Xen4.1-Tun                                                                                                                     


Bonnie 1.5: File '/opt/bonnie/Bonnie.3093', size: 2147483648, volumes: 1
Writing with putc()...         done:  63964 kiB/s  85.9 %CPU
Rewriting...                   done:  35605 kiB/s   2.2 %CPU
Writing intelligently...       done:  78111 kiB/s  23.5 %CPU
Reading with getc()...         done:  53584 kiB/s  60.3 %CPU
Reading intelligently...       done:  81520 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.161ms, eff 3.964ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63964 85.9 78111 23.5 35605  2.2 53584 60.3 81520  0.4  240.4  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1


(2)



Bonnie 1.5: File '/opt/bonnie/Bonnie.3106', size: 2147483648, volumes: 1
Writing with putc()...         done:  65973 kiB/s  88.3 %CPU
Rewriting...                   done:  34359 kiB/s   2.2 %CPU
Writing intelligently...       done:  76424 kiB/s  24.4 %CPU
Reading with getc()...         done:  39146 kiB/s  71.7 %CPU
Reading intelligently...       done:  81498 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.095ms, eff 3.898ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 65973 88.3 76424 24.4 34359  2.2 39146 71.7 81498  0.5  244.2  0.0

(3)

Bonnie 1.5: File '/opt/bonnie/Bonnie.3123', size: 2147483648, volumes: 1
Writing with putc()...         done:  66193 kiB/s  88.4 %CPU
Rewriting...                   done:  36434 kiB/s   2.2 %CPU
Writing intelligently...       done:  77621 kiB/s  23.3 %CPU
Reading with getc()...         done:  57385 kiB/s  63.7 %CPU
Reading intelligently...       done:  75734 kiB/s   0.4 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.239ms, eff 4.027ms

              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 66193 88.4 77621 23.3 36434  2.2 57385 63.7 75734  0.4  235.9  0.0

Promedios
Writing:(63964+65973+66193)/3=65376=66MB/s
Writing Intelligently:(78111+76424+77621)/3=77385=77MB/s
Rewriting:(35605+34359+36434)/3=35466=36MB/s
Reading with getc:(53584+39146+57385)/3=50038=50MB/s
Reading Intelligently:(81520+81498+75734)3=79584=80MB/s

Bonnie++: Es una version mejorada de bonnie, tiene mas parametros, vamos a usar estos:

bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon1.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon2.html &&
bonnie++ -d /opt/bonnie -s 2048 -n Xen4.1 -r 1024 -x 3 -u root  | bon_csv2html > bon3.html

NOTA: Vamos a mandar la salida a HTML.

-d = igual que bonnie
-s = Tamaño del archivo a crear
-n = bonnie -m
-r  = ram que tenemos, se supone que el detecta, pero mejor se lo digo.
-x =  cuantas pasadas van a ejecutar
-u = usuario que lo va a ejecutar.

Resultados
Figura 1: Corrida 1.
Figuar 2: Corrida 2.
Figura 3: Corrida 3.
Ya tenemos los datos de buscabamos, viendolos podran notar que son algo parecidos a los de bonnie. 

dd: Herramienta basica, genera archivos en forma secuencial pero tambien nos da informacion de como es el desempeño de nuestro disco duro.

Parametros:
dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096 && dd if=/dev/zero of=/opt/Test.img bs=1M count=4096

Vamos a crear 1 archivo de 4GB de nombre Test.img dentro de la particion /opt, asi de simple.

Ejecucion
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 52.9619 seconds, 81.1 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.7946 seconds, 88.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.0801 seconds, 91.2 MB/s

hdparm: Otra herramiento basica, con esta podemos probar el cache de nuestro disco duro, y deben correr tambien la tarea mas de una vez, parametros:

-t=lecturas del disco.
-T=lectura de cache.

Ejecucion
/dev/sda:
 Timing cached reads:   11752 MB in  1.99 seconds = 5892.22 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.24 MB/sec

/dev/sda:
 Timing cached reads:   11892 MB in  1.99 seconds = 5962.68 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.23 MB/sec

/dev/sda:
 Timing cached reads:   11828 MB in  1.99 seconds = 5930.86 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.09 MB/sec

Notaran que cuando ejecuta la lecturas del cache, su led de disco no prende, es por que esta trabajando directamente el cache del disco duro.

Ya tenemos los primeros numeros, ahora viene la misma corrida pero vamos a empezar a modificar nuestra configuracion, vamos empezando por agregar los siguientes parametros a nuestros montajes:

/dev/VolGroup00/ROOT    /               ext3    defaults,noatime        1 1
/dev/VolGroup00/VAR     /var            ext3    defaults,noatime     1 2
/dev/VolGroup00/TMP     /tmp            ext3    defaults        1 2
/dev/VolGroup00/OPT     /opt            ext3    defaults,noatime     1 2
/dev/VolGroup00/USR     /usr            ext3    defaults,noatime        1 2

Reiniciamos y repetimos los mismos comandos...

Solo estamos agregando el parametro "noatime", que segun el libro si no lo especificamos seria "atime", que dice que por cada acceso a los inodos actualiza el tiempo de acceso, y segun los expertos mas vale que no lo haga y mas en sistemas que tienen constante acceso a el disco, yo hasta la fecha no he encontrado algun software que haga uso de esta informarcion por ello siempre la deshabilito con "noatime".

Empezamos de nuevo:

===Caso B===
Bonnie:

Bonnie 1.5: File '/opt/bonnie/Bonnie.3063', size: 2147483648, volumes: 1
Writing with putc()...         done:  71408 kiB/s  93.7 %CPU
Rewriting...                   done:  38015 kiB/s   1.9 %CPU
Writing intelligently...       done:  90543 kiB/s  25.0 %CPU
Reading with getc()...         done:  64227 kiB/s  71.3 %CPU
Reading intelligently...       done:  90323 kiB/s   0.3 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 4.007ms, eff 3.830ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 71408 93.7 90543 25.0 38015  1.9 64227 71.3 90323  0.3  249.6  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3078', size: 2147483648, volumes: 1
Writing with putc()...         done:  63999 kiB/s  88.4 %CPU
Rewriting...                   done:  38327 kiB/s   2.3 %CPU
Writing intelligently...       done:  90461 kiB/s  27.3 %CPU
Reading with getc()...         done:  60798 kiB/s  67.7 %CPU
Reading intelligently...       done:  88156 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.922ms, eff 3.740ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 63999 88.4 90461 27.3 38327  2.3 60798 67.7 88156  0.5  255.0  0.0
Bonnie 1.5: File '/opt/bonnie/Bonnie.3092', size: 2147483648, volumes: 1
Writing with putc()...         done:  67461 kiB/s  90.3 %CPU
Rewriting...                   done:  38401 kiB/s   1.9 %CPU
Writing intelligently...       done:  87783 kiB/s  26.4 %CPU
Reading with getc()...         done:  67832 kiB/s  74.8 %CPU
Reading intelligently...       done:  82805 kiB/s   0.5 %CPU
Seeker 1...Seeker 2...Seeker 3...start 'em...done...done...done...
Estimated seek time: raw 3.751ms, eff 3.557ms


              ---Sequential Output (nosync)--- ---Sequential Input-- --Rnd Seek-
              -Per Char- --Block--- -Rewrite-- -Per Char- --Block--- --04k (03)-
Machine    MB kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU kiB/s %CPU   /sec %CPU
Xen4.1 1*2048 67461 90.3 87783 26.4 38401  1.9 67832 74.8 82805  0.5  266.6  0.0


Comparen los valos con el caso A, hemos ganado desempeño el algunos puntos se incremento nuestro desempeño con este cambio. Ahora vamos a ver la siguiente prueba.

Bonnie++: Resultados.

Figura 4: Corrida 1.
Figura 5: Corrida 2.
Figura 6: Corrida 3.
dd: Resultados.


4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 51.8139 seconds, 82.9 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 48.2685 seconds, 89.0 MB/s
4096+0 records in
4096+0 records out
4294967296 bytes (4.3 GB) copied, 47.1664 seconds, 91.1 MB/s

hdparm: Lo muestro pero esto ya es mas cuestion del disco duro.


/dev/sda:
 Timing cached reads:   11772 MB in  1.99 seconds = 5902.72 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.22 MB/sec


/dev/sda:
 Timing cached reads:   11976 MB in  1.99 seconds = 6005.53 MB/sec
 Timing buffered disk reads:  320 MB in  3.01 seconds = 106.33 MB/sec


/dev/sda:
 Timing cached reads:   11824 MB in  1.99 seconds = 5928.42 MB/sec
 Timing buffered disk reads:  322 MB in  3.01 seconds = 107.05 MB/sec


Ya pueden hacer comparaciones.

Ahora viene la opcion de agregarle el 2do core...


miércoles, 18 de julio de 2012

Windows 7: Instalar SUA 3.3.5

Buenos dias.

Bien, tambien le meto mano a los equipos windows, ya que la mayoria de aqui lo usan.

El software de instituciones como imss, sat, etc en Mexico a veces estan bien mal hechos, no tiene documentos claros, usan versiones de librerias ya obsoletas ye llenas de bugs.

Ayer me comento alguien que le acabamos de entregar la laptop con windows 7, que necesita poner una aplicacion del SAT pero dice la doc que solo en Windows XP se ejecuta... como ven aun no se actualizan y es una institucion que maneja todo lo relacionado a IVA, lo que mueve a el pais.

A veces uno tiene que quebrarse el cerebro para ver como instalar ciertas actualizaciones, eso si si tratan de hacerlas continuamente para adaptarse a las reglas de nuestro gobierno que bueno.

He tenido dias negros donde mi cabeza duele por no poder llevar a cabo alguna actualizacion, tal es el caso del sua/idse.

Ahora me toco un caso con el sua, me di cuenta que uno de mis clientes, estaba ejecutando VirtualPC en su windows 7, y le pregunto para que lo usaba?

Me comento que una persona que le instalo el sistema contpaq trato de instalar SUA en windows 7 y no logro hacerlo trabajar.

Me llamo la atencion el caso, aca donde trabajo usamos el sua, pero aun no llegamos a migrar las maquinas que lo usan a windows 7(ya estamos migrando) y como mencione a veces me he visto en dias negros.

Entonces rapidamente me intereso el caso y en una chance prendi mi maquina virtual de windows 7 y empece a leer en la pagina de imss-sua info al respecto, claro que ellos nomas dicen, para win7 bajen este y listo, nos dan la version 3.3.5 la ultima, pero no funciona.

Ya metido en Internet algo por ahi comento que paso por un caso parecido y tuvo que bajar la instalacion por primera vez.

La version 3.3.5 mide +/- 4MB, la version por 1ra vez +/-50MB(3.3.2)  si hay diferencias correcto?

Entonces el comento que instalo 1ro la version de 50MB, la cual se va a el folder:

c:\cobranza\sua

De ahi metio la 3.3.5 y esta ultima se va a el folder  c:\sua.

Hasta eso, no se quien esta a cargo de este programa pero que basura de decisiones en cada version apuntan la instalacion dondes se les incha la oreja.

c:\, c"\Prog..", c:\cobranza.

Viva Mexico!!!

El truco fue que una vez instalada la 3.3.2 en c:\cobranza\, borre el ejecutable, y cuando la version 3.3.5 me pregunta donde deseo hacer la instalacion, le apunto ese mismo folder para que remplace.

Ya termina y no debemos ejecutar en windows 7 que ya nos acostumbraron a ejecutar todo como "Administrator" si no, normalito.

Y listo, ya solo validen que se la version 3.3.5:

Figura 1: SUA 3.3.5 en Windows 7.
Ya solo le pedi que ejecutara el calculo en su maquina virtual con XP  y luego lo hiciera con windows 7 y compara los numeros...

Si conincidio, listo.

Consejo, me ha tocado ver casos como este donde muchos por no meterse a los problemas y atacarlos bien, optan por irse por el camino facil:

reinstalare el OS, office, o cambiar el aparato.

Si en realidad les gusta esta labor, ensuciece las manos, investiguen, la Internet es un paraiso de informacion.

Saludos!!!