rsync + openvpn og max 10 Mbit

Jeg har siddet og stirret på min forbindelse med openvpn og kopieringen af nogle backup filer til en extern lokation. Stirret fordi jeg kun kunne presse max 10 Mbit igennem, og jeg mente at dette var i underkanten af forventet hastighed på to gigabit forbindelser, ganske vidst med et par lag imellem, men alligevel.

I princippet bare en remote mountet disk, som jeg rsync’er over på, uden brug af ssh eller andre ting til at komplicere det, efter lidt søgning fandt jeg http://www.unix.com/shell-programming-scripting/196157-scp-rsync-multiple-files-parallel-remote-host.html, men der skulle lige hugges en tå og rættes en hæl, det blev til:

#!/usr/local/bin/ksh93

cnt=1
CCMD=`ls -1 /usr/local/backup`
 
for BackupFile in $CCMD
do
        echo "attempting to copy file: " $BackupFile
        /usr/local/bin/rsync --progress --modify-window=1 -ruivtO /usr/local/backup/$BackupFile /remotedisk/disk1/ &	

        cnt=$(( $cnt + 1 ))
        if [[ cnt -eq 20 ]] then
           wait
           cnt=1
        fi

done
wait
exit

 

Det er ikke perfekt, jeg ville gerne kører 4-8 paralellt, hele tiden, mens der her startes et antal samtidigt, og man så venter på de alle afsluttes før næste batch starter en bunke. i princippet kan jeg være uheldig og ende på 10 Mbit et stykke tid, men pyt, det virker til mit formål, ganske fint oven i købet. Nu med mellem 45 og 55 Mbit (det meste af tiden) :)

2 Comments

  1. Hasse

    August 16, 2013 at 7:51 am

    Har du læst det her? https://community.openvpn.net/openvpn/wiki/Gigabit_Networks_Linux

    Men min erfaring er at selv om man konfigurerer openvpn alt hvad man kan. Så er det stadig en del langsommere(i hvert fald på linux) end ipsec (med support for processorer med aes-ni). Afhængig af hvor tung en krypteringsalgoritme man vælger kunne jeg få det op på mellem 700-900 Mbit på et 10 Gbit link

  2. Peter Makholm

    August 16, 2013 at 3:02 pm

    Hvis du ikke er bange for lidt Perl, så kan du måske bruge noget ala dette:


    #!/usr/bin/perl

    use strict;
    use warnings;

    use Parallel::ForkManager;

    my $pm = Parallel::ForkManager->new(8);
    for my $file (glob "/usr/local/backup/*") {
    my $pid = $pm->start and next;

    print "Attempting to copy $file\n";
    system("/usr/local/bin/rsync --progress --modify-window=1 -ruivtO /usr/local/backup/$file /remotedisk/disk1/");

    $pm->finish;
    }

    $pm->wait_all_children;

    (Se også https://gist.github.com/pmakholm/6250172)

    Det vil netop sørger for at der hele tiden kører 8 processer.

Leave a Reply