
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 é transferido pela rede.
É possível limitar o rendimento máximo permitido de um processo a 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 do cliente; isto é, eu 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 ao fazê-lo.)
Alguns antecedentes
Talvez alguns antecedentes sejam necessários. Recuando, tive o problema de não ter espaço local suficiente para criar o backup propriamente dito. Entre no SSHFS! O backup é salvo no que aparentemente é uma unidade local, para que nenhum bit de backup fique no próprio servidor da web.
Por que isso é importante? Porque isso pareceria invalidar o uso do venerável rsync --bwlimit
. rsync
não está realmente fazendo a transferência nempodeisso porque não consigo nem poupar espaço para salvar o arquivo de backup.
Posso ouvir você perguntar: "Então espere, por que você precisa fazer 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, eu uso o Plesk para iniciar os backups porque o Plesk adiciona todo tipo de magia extra ao backup que torna muito seguro consumi-lo durante um procedimento de restauração.
rosto triste
Responder1
Uma opção que acabei de descobrir é usartrickle
.
trickle
é um modelador de largura de banda de espaço de usuário leve e portátil. Ele pode ser executado em modo colaborativo (em conjunto comtrickled
) ou em modo autônomo.
trickle
funciona aproveitando o pré-carregamento do carregador Unix. Essencialmente, ele fornece ao aplicativo uma nova versão da funcionalidade necessária para enviar e receber dados através de soquetes. Em seguida, limita o tráfego com base no atraso do envio e recebimento de dados por meio de um soquete.trickle
é executado inteiramente no espaço do usuário e não requer privilégios de root.
Para usuários do Ubuntu, instale-o executando
sudo apt install trickle
E como exemplo, execute maven build
limitando a taxa de download de 20kB/s e 111kB/s para upload:
trickle -sd 20 -u 111 mvn build
Responder2
Você pode usar iptables
para marcar um pacote (--pid-owner ...) e depois usar tc
para moldar o tráfego. Além disso, "--sid-owner" pode ser usado para incluir threads e filhos desse processo.
http://www.frozentux.net/iptables-tutorial/iptables-tutorial.html#OWNERMATCH
Corresponder --pid-proprietário
Núcleo2,3, 2,4, 2,5 e 2,6
Exemplo iptables -A OUTPUT -m proprietário --pid-proprietário 78
Explicação Essa correspondência é usada para combinar pacotes com base no ID do processo (PID) responsável por eles. Essa correspondência é um pouco mais difícil de usar, mas um exemplo seria apenas permitir que o PID 94 envie pacotes da porta HTTP (se o processo HTTP não for encadeado, é claro). Alternativamente, poderíamos escrever um pequeno script que pegue o PID de uma saída ps para um daemon específico e então adicione uma regra para ele. Por exemplo, você poderia ter uma regra conforme mostrado no exemplo Pid-owner.txt
Responder3
Se você puder gravar em um pipe (ou stdout), poderá instalar o pv
comando (pipe viewer). Ele 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
-L RATE, --rate-limit RATE
Limit the transfer to a maximum of RATE bytes per second. A
suffix of "k", "m", "g", or "t" can be added to denote kilobytes
(*1024), megabytes, and so on.
Responder4
Como você está transferindo os dados? (rsync sobre ssh? scp? sftp? alguma outra coisa?)
rsync permitirá limitar a largura de banda (veja a opção --bwlimit=KBPS). rsync -e ssh --bwlimit ..
Como alternativa, você pode configurar um qdisc ou equivalente para limitar a taxa sofisticada, mas suspeito que, no seu caso, isso seria um exagero. A documentação sobre isso está disponível emO COMO FAZER Roteamento Avançado e Controle de Tráfego do Linux