rsync via NFS - velocidade inconsistente

2

Estou transferindo cerca de 9 TB para minha LAN gigabit. Para fazer isso o mais rápido possível (espero), montei o destino via NFS na fonte e executei o rsync nele.

Aqui estão minhas opções de montagem: x.x.x.x:/mnt on /mnt type nfs (rw,noatime,nodiratime,vers=3,rsize=1048576,wsize=1048576,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,mountaddr=x.x.x.x,mountvers=3,mountport=56548,mountproto=udp,local_lock=none,addr=x.x.x.x)

Aqui está o meu comando rsync: rsync -avWH --progress ./ /mnt/

Olhando para o nload, o que eu vejo, para um único arquivo, é a velocidade que chega a 900MBps, em seguida, para números no intervalo de KBps, então faça o backup. Aqui está um gráfico do nload, onde você pode ver que a transferência parece parar, midfile. Os arquivos são todos tipicamente 5-6GB de tamanho. MTU é 9000; switch é um cisco 3750x com muita velocidade de backplane. Estes são esxi 6.7 convidados em 2 anfitriões diferentes. Não há outros convidados que disputam recursos de rede.

Esta imagem é um arquivo enviado

Basicamente, espero que haja uma configuração errada ou algo que eu possa alterar para manter a velocidade de transferência um pouco consistente.

A utilização da CPU na fonte é de aproximadamente 10%, no destino é aproximadamente 10%. O estranho é que no destino, iotop mostra 99% i / o (às vezes) do nfsd, a fonte mostra 60-80% de E / S do rsync. Estas são 7200RPM unidades vermelhas WD. w

    
por driz 19.06.2018 / 03:11

2 respostas

2

Infelizmente, a pior coisa que você pode fazer é usar rsync no NFS. (Ou para qualquer sistema de arquivos remoto instalado no sistema local.) Isso desativa quase todos os aprimoramentos de eficiência para os quais rsync é conhecido.

Para esse tanto de dados, uma das maneiras mais rápidas de transferi-lo entre os sistemas pode ser despejá-lo através de uma conexão sem criptografia sem considerar o que já estava no sistema de destino.

Depois de ter pelo menos uma cópia parcial, a melhor opção é usar rsync entre os dois hosts. Isso permite que rsync execute um processo em cada host para considerar e comparar as diferenças. (O rsync ignorará completamente os arquivos que possuem o mesmo tamanho e data de modificação. Para outros arquivos, os componentes cliente e servidor realizarão uma soma de verificação contínua para determinar quais blocos ainda precisam ser transferidos.)

  1. Despejo rápido. Este exemplo não usa autenticação ou criptografia. Entretanto, aplica-se a compactação, que você pode remover omitindo os dois -z flags:

    Execute isso na máquina de destino para iniciar um servidor de escuta:

    cd /path/to/destination && nc -l 50505 | pax -zrv -pe
    

    Execute isso na máquina de origem para iniciar o cliente de envio:

    cd /path/to/source && pax -wz . | nc destination_server 50505
    

    Algumas versões de nc -l podem exigir que a porta seja especificada com um sinalizador, ou seja, nc -l -p 50505 . A versão do OpenBSD no Debian ( nc.openbsd , linkado por /etc/alternatives to /bin/nc ) não.

  2. Transferência mais lenta. Este exemplo usa rsync over ssh , que fornece autenticação e criptografia. Não perca a barra final ( / ) no caminho de origem. Omita o sinal -z se não quiser a compressão:

    rsync -avzP /path/to/source/ destination_server:/path/to/destination
    

Você pode precisar configurar certificados SSH para permitir o login no destination_server como root. Adicione o -H flag se você precisar manipular hard links.

    
por 19.06.2018 / 16:56
2

É muito melhor usar o rsync diretamente entre dois hosts, se possível. Lembre-se, o rsync é construído para otimizar o IO da rede ao custo de maior IO do disco; Ao usar o rsync em um sistema de arquivos NFS, o IO do disco é convertido em I / O de rede, o que é uma solução muito abaixo do ideal. Além disso, se o rsync achar que tanto a origem quanto o destino é local, ele desligará as otimizações e transferirá os arquivos completos toda vez, em vez de usar o algoritmo diferencial que apenas envia as diferenças.

Digamos que você tenha um arquivo de 5 GB que difere apenas em 1% dos dados entre a origem e o destino.

  • Ao transferir entre hosts, o rsync verificará os arquivos de origem e de destino e transferirá apenas a diferença; no destino, o arquivo é recriado usando o arquivo antigo e os novos dados da origem e, em seguida, o arquivo antigo é substituído.
  • Ao transferir localmente, não faz sentido a soma de verificação de cada arquivo, o que significa que você teria que ler 2 x 5 GB e escrever 1 x 5 GB para o arquivo de exemplo. Ao alternar para o modo de arquivo inteiro, o rsync só precisa ler 1 x 5 GB e gravar 1 x 5 GB. Nos discos locais, faz todo o sentido, quando se é NFS, a largura de banda da rede passa pelo telhado.

Se você puder usar o rsync diretamente no host que serve o sistema de arquivos NFS, faça isso, você verá uma grande melhoria no desempenho.

    
por 19.06.2018 / 11:17

Tags