Eu tenho um servidor CentOS 5.7 que fará backup de seus arquivos todas as noites. Estou preocupado que os visitantes dos vários sites hospedados pelo servidor tenham um desempenho degradado enquanto o backup está sendo transferido pela rede.
É possível limitar a taxa de transferência máxima permitida de um processo para uma interface de rede? Gostaria de limitar a transferência de arquivos baseada em SSH a apenas metade da minha largura de banda disponível. Isso pode estar no lado do servidor ou cliente; ou seja, ficaria feliz em fazer isso no cliente que inicia a conexão ou no servidor que recebe a conexão.
(Infelizmente, não posso adicionar uma interface para dedicar aos backups. Eu poderia aumentar minha taxa de transferência disponível, mas isso significaria apenas que a transferência de rede seria concluída mais rapidamente, mas ainda assim maximizaria a capacidade total da conexão enquanto o fazia.)
Alguns antecedentes
Talvez alguns antecedentes estejam em ordem. Recuando, tive um problema em não ter espaço local suficiente para criar o próprio backup. Digite SSHFS! O backup é salvo no que é ostensivamente uma unidade local, para que nenhum bit de backup esteja no próprio servidor web.
Por que isso é importante? Porque isso parece invalidar o uso do venerável rsync --bwlimit
. rsync
na verdade, não está fazendo a transferência nem pode , porque não posso poupar espaço para salvar o arquivo de backup.
Ouço você perguntar: "Então, espere, por que você precisa criar um arquivo de backup? Por que não apenas rsync
os arquivos e pastas de origem?" Porque uma coisa chata chamada "Plesk" está na mistura! Este é o meu host voltado para o cliente, que usa o Plesk por conveniência. Como tal, uso o Plesk para iniciar os backups porque o Plesk adiciona todo tipo de magia extra ao backup, o que torna muito seguro consumi-lo durante um procedimento de restauração.
rosto triste
fonte
ionice
para limitar as gravações que um processo pode fazer. Como estou escrevendo em um sistema de arquivos SSHFS, posso reduzir a classe do processo de backup para 3 para que ele ceda completamente a qualquer outro processo que queira gravar. Dessa forma, obtenho o efeito desejado, que nunca degradará a experiência de um visitante do site por causa da largura de banda monótona do backup.Respostas:
Você pode usar
iptables
para marcar um pacote (--pid-owner ...) e depois usartc
para modelar o tráfego. Também "--sid-owner" pode ser usado para incluir threads e filhos desse processo.http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
fonte
--pid-owner processid
Corresponde se o pacote foi criado por um processo com o ID de processo fornecido ". Você pode usar o seguinteiptables -A OUTPUT -m owner --pid-owner 78
exemplo dado não parece completo (como apenas corresponde aos pacotes, não diz como "marcá-los") etc
não é explicado.-j MARK --set-mark 1
. Para mais detalhes veja: wiki.archlinux.org/index.php/...Uma opção que eu acabei de descobrir é usar o trickle .
fonte
trickle
link que você forneceu leva a um 404.sudo apt-get install trickle
Se você pode gravar em um canal (ou stdout), pode instalar o
pv
comando (visualizador de canal). Foi originalmente escrito para exibir o progresso dos dados transferidos através de um pipe.tar cvf - /files/to/backup | pv -L 512k > /your/file/on/sshfs
fonte
ssh my-remote-server bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
.ssh my-remote-server ionice -c3 bash -c "'find / -xdev|cpio -o|gzip -c1'"|pv --rate-limit 1M > my-remote-root.cpio.gz
Eu uso o rsync com a opção --bwlimit = KBPS pelo mesmo motivo.
Nossa Ethernet de 1 Gbit é facilmente capaz de inundar nosso antigo RAID SCSI320 DAS e, essencialmente, o DOS é algumas de nossas caixas de produção mais antigas que dependem dele para suas lojas NFS.
fonte
Como você está transferindo os dados? (rsync sobre ssh? scp? sftp? outra coisa?)
O rsync permitirá que você limite a largura de banda (consulte a opção --bwlimit = KBPS). rsync -e ssh --bwlimit ..
Como alternativa, você pode configurar um qdisc ou equivalente para limitar a taxa de fantasia, mas suspeito que, no seu caso, isso seria um exagero grave. A documentação sobre isso está disponível no HOWTO Linux Advanced Routing and Traffic Control
fonte