quinta-feira, 5 de janeiro de 2012

Ajuste automático de numero sequencial de canais de MQ

Em primeiro lugar o MQ é um produto muito estável. normalmente a causa do problema não será o MQ, poderá ser maquina, rede, usuario... mas o MQ é um santo ^^

No meu caso costumo utilizar o MQ 5.3 que apesar de ser muito bom não tem nativamente alguns recursos que poderiam ajudar em momentos difíceis.

Se você tem muitos canais de MQ estabelecidos sabe que será trabalhoso restabelecer todos caso alguma desgraça aconteça, ainda mais se for envolver terceiros no processo.

Esse script resolve o caso. ele pega o numero sequencial que a outra ponta espera e sincroniza os canais sozinhos. faz o que um bom analista faria só que muito mais rápido, só depende dos tempos de retryng do mq =)


Obs:
Diretorio: /var/mqm/qmgrs/QMGR/errors

tail -f AMQERR01.LOG |
awk -v teste=0 '{
if ( /AMQ9526:/ )
{
c = $8
channel = substr(c,2,(length(c)-3))
teste = 1
}
if (teste) {
if ( /amqrmtra/ || /amqrfpta/ ) {
system("echo \"STOP CHL("channel")\" > reset")
system("echo \"RESET CHL("channel") SEQNUM("seqnum")\" >> reset")
system("echo \"START CHL("channel")\" >> reset")
system("echo \"END\" >> reset")
system("cat reset | runmqsc QMGR > reset.log")
system("cat reset.log")
teste = 0}
else{if ( $1 ~ /number./ ) {seqnum = $7}}
}
}'
exit






segunda-feira, 2 de janeiro de 2012

Contingencia com 2 links de Internet

Esse script é bem legal, a principio ele resolve o problema do acesso a internet com 2 links.
Lembrando que não faz balanceamento. seria um modelo active\standby. estamos falando de contingencia qualquer um dos 2 links pode segurar a onda sem depender do outro. lembre-se de contratar os provedores diferentes com terminações diferentes para lugares diferentes.

Exemplo:
LinkA - Fibra - Leste
LinkB - Antena - Sul

Se você só precisa que seus usuários acessem a internet o script já resolve tudo!
mas se precisar ser acessado (website,servidor de email, etc...) existem as opções:
1. Usar 2 servidores de DNS primários um em cada link, que resolvem o nome de acordo com o link que estão alocados.
2. Utilizar um provedor que venda link duplo com terminações distintas.
3. Se tornar um AS com BGP



LINKA = ip do link primario de internet
LINKB = ip do link reserva de internet
RTA=roteador do link primário
RTB=roteador do link secundario
LAN = rede local
mailserver=seu servidor de email
emaildosuporte=email da equipe de suporte

#!/bin/bash
N=`iptables -t nat -nL --line-numbers | grep SNAT| grep LAN | awk {'print $1'}`
DATA=`date`
STATUS=`cat /tmp/internet.status`
echo $N
echo $STATUS
echo $DATA
ping -w 5 -c 1 -I LINKA www.google.com
if [ $? -eq 0 ];then
echo "tudo ok nada a fazer"
if [ $STATUS -eq 1 ];then
echo "LINKA Reativando"
iptables -t nat -R POSTROUTING $N -s LAN -d 0/0 -j SNAT --to LINKA
route delete default gw RTB
route add default gw RTA
echo -n "SUBIU " >> /tmp/caiu.log
echo $DATA >> /tmp/caiu.log
echo 0 > /tmp/internet.status
else
echo "nada a fazer"
fi
else
echo "nao ok virando para LINKB"
iptables -t nat -R POSTROUTING $N -s LAN -d 0/0 -j SNAT --to LINKB
route delete default gw RTA
route add default gw RTB
echo -n "CAIU " >> /tmp/caiu.log
echo $DATA >> /tmp/caiu.log
echo 1 > /tmp/internet.status
(:
echo 'HELO mailserver';sleep 1
echo 'mail From: emaildosuporte';sleep 1
echo 'rcpt To: emaildosuporte';sleep 1
echo 'data';sleep 1
echo 'subject: ' "Atençao Problemas no Link A";sleep 1
echo 'Sender: emaildosuporte';sleep 1
echo 'To: emaildosuporte';sleep 1
echo '';sleep 1
echo "O Link A está fora! "
echo '.';sleep 1
echo 'quit' ;) | nc mailserver 25
fi
#

sexta-feira, 30 de dezembro de 2011

Limpeza de Logs DB2 7

Quem trabalha com DB2 sabe... mesmo que exista gigas de espaço em disco uma hora a limpeza será necessária.

Esse script pode ser usado diariamente, um pré requisito para que funcione é que um backup tenha sido feito na data de execução (pode ser adaptado)

Não esqueça se substituir BASE pela sua base de dados, e assuma os riscos de estar usando algo que viu em um blog ^^


#!/bin/bash
# Limpesa de logs do DB2 com base no Backup
# Remove, Clear, db2 logs need backup online in day
#

BASE=BASE
SQLOGDIR=`db2 "get db cfg for $BASE" | grep "Path to log files" | cut -f2 -d"="`
cd $SQLOGDIR
pwd
LOGS=`ls -ltr *.LOG | awk {'print $8'}`
DATA=`date +"%Y%m%d"`
STOP=`db2 "LIST HISTORY BACKUP ALL FOR $BASE" | grep $DATA| grep LOG| awk {'print $6'}`
echo $STOP
test $STOP
if [ $? -ne 0 ];then
echo "Backup not found"
############## MAIL #################
(:
echo 'HELO mailserver';sleep 1
echo 'mail From: emaildosuporte';sleep 1
echo 'rcpt To: emaildosuporte';sleep 1
echo 'data';sleep 1
echo 'subject: ' "Servico Limpesa de LOG $BASE";sleep 1
echo 'Sender: emaildosuporte';sleep 1
echo 'To: emaildosuporte';sleep 1
echo '';sleep 1
echo "Atencao problemas ao localizar Ticket do backup"
echo '.';sleep 1
echo 'quit' ;) | netcat mailserver 25
####################################
exit 99
fi
echo $?
for i in `echo $LOGS`
do
[ "$i" = "$STOP" ]
if [ $? -eq 0 ];then
break
else
rm -f $i
fi
done