Como limitar o disco i / o durante o backup?

14

Eu tenho um cron que basicamente faz um simples "tar zcf" no meio da noite.

O servidor tem:

  • 8 núcleos - CPU Intel (R) Xeon (R) E5606 @ 2.13GHz
  • 25 GB de RAM
  • Ubuntu 12.04.2 LTS
  • Hardware RAID 1 (lógica LSI Logic / Symbios MegaRAID SAS SMC2108) com dois discos rígidos de 2.728TB

Como você pode ver no host de tela de monitoramento:

link

Durante quase todo o tempo do tar, a E / S do disco vai para > 90% e faz com que todos os outros aplicativos (mysql, apache) diminuam muito.

2 perguntas:

  • É normal ter E / S de disco tão alto durante o backup?
  • Existe uma maneira de limitar a E / S do disco para que outro aplicativo continue funcionando corretamente?

Obrigado!

    
por acemtp 27.05.2013 / 10:54

4 respostas

11

Além da abordagem geral com ionice , há um bom dispositivo mapeador de destino (ioband) que permite o controle preciso da largura de banda para um dispositivo de bloco (DM). Infelizmente não faz parte do kernel padrão.

Além disso, você provavelmente pode acelerar o tar

  1. Lendo os nomes dos arquivos no cache de disco: find /source/path -printf ""
  2. Lendo os inodes no cache de disco: find /source/path -perm 777 -printf ""
  3. Fazer o tar ler e escrever blocos maiores de e para o disco, por exemplo, usando um pipe com mbuffer ou buffer (com pelo menos 100 MiB de RAM): tar ... | mbuffer -m 256M -P 100 -p 1 ...
por 27.05.2013 / 12:13
13

Espera-se ver alta E / S durante os backups, porque eles geralmente são feitos em grandes árvores de arquivos com arquivos grandes. Você pode usar ionice para priorizar tarefas de E / S no Linux com classes e níveis. IIRC, classe 2, nível 7 é o nível mais baixo, sem sofrer de falta de energia, o que o tornará praticamente invisível para outras cargas e usuários de E / S. Veja man ionice para uso e detalhes.

    
por 27.05.2013 / 10:58
1

Eu recomendaria o uso de tar e o rsync (como mencionado por Dogsbody). Eu uso o BackupPC para fazer backup de arquivos nos meus sistemas Windows e Linux e ele suporta o uso de tar, bem como o rsync, e cuida automaticamente do link físico para você, além de fornecer uma interface web agradável.

link

    
por 05.06.2013 / 03:44
0

Como outros responderam, sim, isso é normal, e ionice é uma boa maneira genérica de não afetar o sistema.

Uma série de vezes eu vi pessoas tar as coisas quando elas não precisam. Se qualquer porcentagem dos dados que você está copiando não tiver sido alterada desde a última cópia, sugiro dar uma chance a rsync .

Isso reduzirá o IO copiando somente os arquivos que foram alterados desde a última cópia. você não poderá reduzir o IO em mais da metade, pois todos os dados ainda precisarão ser lidos, mas você reduzirá significativamente a quantidade de dados gravados (o que, dependendo do hardware, também pode ser uma operação mais lenta). / p>

Se você quiser cópias / backups separados toda vez que for executado, a opção mais poderosa é –link-dest, que permite vincular arquivos inalterados a um backup anterior. Isso economiza grandes quantidades de espaço no servidor de backup. por exemplo. Eu backup de uma máquina (Fred), Fred tem um HD de 20GB e eu fazer backup / copiar todo o disco excluindo / proc e / dev. Agora tenho um diretório de 20 GB no meu servidor de backup. No dia seguinte, faço o backup de Fred novamente e o link-dest para o backup de ontem. O Rsync compara os arquivos remotos com a cópia local e, se exatamente o mesmo não se incomodará em transferi-los, mas vinculará o novo arquivo ao arquivo de ontem. Todos os arquivos que foram alterados são copiados para um novo (ou copiado parcialmente usando o backup de ontem, se possível). Se apenas 100MB de arquivos foram alterados desde ontem, agora eu tenho dois diretórios, ambos com 20GB de arquivos, mas ocupando apenas 20.1GB de espaço no servidor de backup!

Espero que isso ajude e ainda responda sua pergunta.

    
por 29.05.2013 / 11:14