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.598 ]
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
diMail - envia e-mail com um front do dialog
Organize seu /var/log/messages
Nenhum comentário foi encontrado.
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Meu Fork do Plugin de Integração do CVS para o KDevelop
Compartilhando a tela do Computador no Celular via Deskreen
Como Configurar um Túnel SSH Reverso para Acessar Sua Máquina Local a Partir de uma Máquina Remota
Configuração para desligamento automatizado de Computadores em um Ambiente Comercial
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Cups: Mapear/listar todas as impressoras de outro Servidor CUPS de forma rápida e fácil
Criando uma VPC na AWS via CLI
Tem como instalar o gerenciador AMD Adrenalin no Ubuntu 24.04? (11)