Backup de vários servidores, diferenciado a rotina pela aplicação
Publicado por Alexandre Gonçalves Monteiro da Silva (última atualização em 28/08/2011)
[ Hits: 7.423 ]
Homepage: https://www.vivaolinux.com.br/~alexandre_gms
Ninjas, certa vez me pediram um script para realizar Backup para mais de 100 servidores. Neste servidores haviam aplicações Weblogic instaladas e estas seguiam uma estrutura de diretórios diferenciado das demais. Nas aplicações era necessário somente captar os arquivos de configuração, arquivos binários e libs. A necessidade é compactar todas estas pastas/arquivos, renomeá-las para o nome do servidor seguido com a data do dia e inseri-los no DataServer1 e DataServer2, por exemplo: application_server1_2008-20-02.tgz.
Até aí tudo bem, já tinha a lógica para bolar o código, porém verifiquei que somente o servidor CENTRALSERVER possuía chave publica para as demais máquinas, ou seja, não era possível executar o comando scp (sem utilização de senha) diretamente do script para as máquinas DataServer 1 e 2. Fui obrigado a centralizar todos os BKP na CENTRALSERVER e em seguida enviá-los às DataServer´s. Segue a estrutura final do script com as condições corretas:
1) Compactar a pasta /usr/application/phase1 dentro do próprio Server
2) Enviar os arquivos compactados para a maquina de CENTRALSERVER em /tmp/app_bkp
3) Enviar estes arquivos para as maquinas DataServer1 e DataServer2 em /opt/BKP_SYSTEM
4) Se os arquivos forem enviados corretamente, serão removidos da maquina CENTRALSERVERS e do Server de aplicação
5) Na execução deste script, um log será gerado com todas as informações dos comandos realizados
Para constar que o Backup foi realizado corretamente, decidi criar um log com todas as informações que o script executa juntamente com o horário em que as mesmas foram realizadas.
Segue o código, ele já foi bastante útil, pois tive que restaurar alguns backup´s que usuários deletaram ou modificaram "distraidamente"! :-)
Bons backups para todos!!
#!/bin/bash # Script para fazer Backup da pasta /usr/application/phase1 dos servidores listados no #arquivo servers # Passos do script: # # 1) Compactar a pasta /usr/application/phase1 dentro do proprio Server # 2) Enviar os arquivos compactados para a maquina de CENTRALSERVER #em /tmp/app_bkp # 3) Enviar estes arquivos para as maquinas DataServer1 e DataServer2 #em /opt/BKP_SYSTEM # 4) Se os arquivos forem enviados corretamente, serao removidos da maquina #CENTRALSERVERS e do Server # 5) Na execucao deste script, um log serah gerado com todas as informacoes dos #comandos realizados # Created by: Alexandre Monteiro - email: alexandregms2@gmail.com servers=`cat servers` data=`date +%d/%m/%y` data_file=`date +%d-%m-%y` hour=`date +%H:%M` log="log_transfer" echo -e " ########## INICIO DO BKP em $data - $hour ########## " >> $log VERIFY_FOLDER() { for c in $servers do if [ ! -z "$c" ]; then ssh $c 'test -d /tmp/app_bkp/ARQUIVOS' if [ $? -eq 0 ]; then echo "Ja existe o diretorio /tmp/app_bkp/ARQUIVOS em $c" else ssh $c 'mkdir -p /tmp/app_bkp/ARQUIVOS' if [ $? -eq 0 ]; then echo "Diretorio /tmp/app_bkp/ARQUIVOS criado em $c" fi fi fi done } VERIFY_FOLDER COPY_FOLDER() { for i in $servers do if [ ! -z "$i" ]; then # Condicao para verificar se as maquinas sao de WEBLOGIC if [ $i = SSWL01 ] || [ $i = SSWL02 ] || [ $i = SPWL01 ] || [ $i = SPWL02 ]; then ssh $i 'tar -cvzf /tmp/app_bkp/'$i'_'$data_file'.tgz /usr/application/phase1 --exclude log* --exclude tmp* --exclude=/usr/application/phase1/.*' if [ $? -eq 0 ]; then echo "Compactacao realizada com sucesso em $i - $data - $hour" >> $log fi else ssh $i 'tar -cvzf /tmp/app_bkp/'$i'_'$data_file'.tgz /usr/application --exclude log* --exclude out* --exclude=/usr/application/.* --exclude=/usr/application/old*' if [ $? -eq 0 ]; then echo "Compactacao realizada com sucesso em $i - $data - $hour" >> $log fi fi fi done } COPY_FOLDER TRANSFER_FILES() { for j in $servers do if [ ! -z "$j" ]; then scp $j:/tmp/app_bkp/$j*.tgz /tmp/ if [ $? -eq 0 ]; then echo "Arquivo '$j'_$data_file.tgz enviado com sucesso para maquina CENTRAL_SERVER em $data as $hour" >> $log else echo "Arquivo '$j'_$data_file.tgz NAO foi enviado para maquina CENTRAL_SERVER em $data as $hour" >> $log fi else echo "A transferencia nao foi realizada, a variavel esta vazia em $data as $hour" >> $log fi done } TRANSFER_FILES SEND_MACHINES() { # Copiar arquivos para DataServer1 scp /tmp/*.tgz DataServer1:/opt/BKP_SYSTEM if [ $? -eq 0 ]; then echo "Arquivos copiados com sucesso para DataServer1 - $data - $hour" >> $log else echo "Arquivos nao copiados para DataServer1 - $data - $hour" >> $log fi # Copiar arquivos para DataServer2 scp /tmp/*.tgz DataServer2:/opt/BKP_SYSTEM if [ $? -eq 0 ]; then echo "Arquivos copiados com sucesso para DataServer2 - $data - $hour" >> $log else echo "Arquivos nao copiados para DataServer2 - $data - $hour" >> $log fi } SEND_MACHINES DEL_FILE() { servers=`cat servers` for k in $servers do if [ ! -z "$k" ]; then ssh $k 'rm -f /tmp/app_bkp/'$k'_'$data_file'.tgz' if [ $? -eq 0 ]; then echo "Remocao do arquivo compactado (*.tgz) realizada com sucesso em $k - $data - $hour" >> $log rm '/tmp/'$k'_'$data_file'.tgz' else echo "A remocao do arquivo compactado (*.tgz) nao foi realizada em $k - $data - $hour" >> $log fi else echo "Remocao nao realizada, pois a variavel esta vazia - $data - $hour" >> $log fi done } DEL_FILE
gera saída com substituindo coluna por outra (substr)
Acompanhamento de log squid com hora real
Criando Autoridades Certificadoras e Certificados de Testes no Linux
Nenhum comentário foi encontrado.
Como agendar um backup automático do PostgreSQL no Cron evitando o problema de senha
Como preparar o Vim/Neovim para corrigir ortografia em português
Dark Web e Malwares na internet, quanto custa?
Configuração básica do Conky para mostrar informações sobre a sua máquina no Desktop
Como verificar o hash de um arquivo baixado da Internet e como criar um hash
Debian 12 - IPTABLES - removendo NFTABLES
OverWatch 2 - Abrindo portas do jogo no Iptables.
Como instalar o adaptador wifi USB Intelbras ACtion A1200 no Linux Mint
Como normalizar seus arquivos MP3 para que fiquem no mesmo volume
Adaptado Bluetooth USB que funciona no Linux (27)
Erro nas atualizações do Void Linux (0)
[C/C++] BRT - Bulk Renaming Tool
[Shell Script] Criação de Usuarios , Grupo e instalação do servidor de arquivos samba
[Shell Script] Tire screenshots com Scrot facilmente com Zscrot
[Shell Script] DioPSI - Script multidistro para instalar programas
[Shell Script] ARS Vídeos - Cortador de vídeos e webcam shooter