Como reduzir o tempo de espera do IO durante um backup do rsync?

2

Eu tenho a seguinte situação: Há um conjunto de máquinas na rede (NAS e outros "servidores"). Existe uma máquina adicional para fins de backup. Ele coleta os dados de todas as 4 máquinas regularmente usando o rsync e cria backups incrementais. Os backups são do tipo pull e todos os scripts são executados com ionice -c idle nice -19 . Para supervisionar a estabilidade de todo o sistema, um sistema de monitoramento (munin) é instalado em todas as máquinas Linux. Munin analisa intervalos de 10 min em diferentes variáveis e estados do sistema e envia e-mails em caso de problemas / avisos.

Todas as noites, no final de um backup (especialmente após um longo backup da maior máquina), munin reclama de altas latências de disco. Eu já forcei os limites que são aceitos, mas ainda assim a espera de IO no final desse backup é de 10seg ou mais. Isso parece bastante alto na minha opinião.

O script de backup é escrito por mim mesmo. Eu precisava de uma abordagem semelhante à do programa rsnapshot, mas com pequenas modificações. Assim eu criei eu mesmo (com muito menos funcionalidade). Na verdade, rsync s as máquinas remotas para uma pasta temporária além dos outros backups e, em seguida, gira / remove os backups antigos de acordo. De acordo com a minha pesquisa até agora o problema acontece ao escrever o novo backup (principalmente hardlinking) ou durante a rotação / remoção dos backups. Eu não posso dizer exatamente onde está o problema, já que a granularidade de munin é de apenas 10 minutos.

O destino dos backups está localizado em uma cadeia de camadas de abstração: As partições físicas são coletadas em uma matriz RAID5 grande (mdadm). O dispositivo md é usado como um PV do LVM. Dentro do VG há uma grande partição (além de outras não criptografadas) que é criptografada usando LUKS e dentro dela reside um segundo LVM e permite a atribuição de armazenamento para diferentes partições.

Qualquer pesquisa na rede levou principalmente a problemas com a conexão de rede e a latência introduzidas nessa camada. Embora meu backup seja feito por meio da rede, o problema aqui é o desempenho local no servidor de backup.

O que eu fiz até agora:

  • Reduza a taxa de páginas sujas para que o disco grave os dados anteriormente para evitar atrasos.
  • Como a maioria dos dados é constante entre as execuções, um --bwlimit não ajuda, pois os links físicos são criados localmente. Correto?
  • Eu pensei que se as partições desalinhadas ou os tamanhos de fragmentos RAID não correspondentes levassem a esse tipo de problema. Embora eu não saiba como verificar.
  • O script inteiro é executado a partir de cron . Eu adicionei o ionice / nice , mas não houve grande diferença.
  • Eu instalei atop na máquina para examinar os outros processos. Eu não vejo nada anormal lá (exceto por uma CPU 100% iowait durante a maior parte do tempo durante as fases finais dos backups).

Agora, gostaria de fazer algumas perguntas:

  • Alguém pode me dizer qual é o problema?
  • Poderia ser apenas um problema da medição? Quer dizer, não há outra carga na máquina de backup. Será que, como nenhum outro processo está sendo executado, o processo rsync interrompe qualquer ação do io? Portanto, se houver outro processo, ele será exibido primeiro, mas como não há nenhum, o disco é usado em uma taxa alta e, para esse processo rsync , a latência de gravação é tão alta (o que é aceitável).
  • Eu não tenho mais ideia de onde procurar por problemas. Você pode me dar conselhos sobre como rastrear o problema ainda mais?

Para deixar minha declaração clara: Estou ciente de que fazer um backup colocará bastante carga no sistema (especialmente nos discos) quando se trata de gravar os arquivos / criar os links.

Se precisar de mais informações, diga-me o que você precisa.

    
por Christian Wolf 21.08.2017 / 12:03

0 respostas