Maksymalizacja wydajności i przepustowości rsync - bezpośrednio połączone gigabitowe serwery

27

Mam dwa serwery Dell R515 z systemem CentOS 6.5, z jednym z NIC Broadcom bezpośrednio połączonymi. Używam bezpośredniego linku, aby co noc przesyłać kopie zapasowe z głównego serwera w parze do pomocniczego przy użyciu rsync przez ssh. Monitorując ruch, widzę przepustowość ~ 2 MB / s, czyli o wiele mniej niż oczekiwałbym od portu gigabitowego. Ustawiłem MTU na 9000 po obu stronach, ale to nic nie zmieniło.

Czy istnieje zalecany zestaw ustawień i optymalizacji, które doprowadziłyby mnie do maksymalnej dostępnej przepustowości? Co więcej, ponieważ używam rsync przez ssh (lub potencjalnie po prostu NFS) do kopiowania milionów plików (~ 6 TB małych plików - ogromny sklep pocztowy Zimbra), optymalizacje, których szukam, mogą wymagać bardziej szczegółowej specyfikacji dla mojego konkretnego przypadku użycia .

Używam ext4 po obu stronach, jeśli to ma znaczenie

Dzięki

EDYCJA: Użyłem następujących rsyncopcji z prawie podobnymi wynikami:

rsync -rtvu --delete source_folder/ destination_folder/

rsync -avHK --delete --backup --backup-dir=$BACKUPDIR source_folder/ destination_folder/

Obecnie patrzę na ten sam poziom niskiej wydajności, gdy korzystam cpz eksportu NFS, przez to samo bezpośrednie łącze kablowe.

EDYCJA 2: po zakończeniu synchronizacji mogłem uruchomić iperfi stwierdziłem, że wydajność wynosiła około 990 Mb / s, spowolnienie było spowodowane faktycznym zestawem danych w użyciu.

dyasny
źródło
1
Powinieneś dodać rsync do swoich tagów. Czy sprawdziłeś czas dla części aukcyjnej rsync? Niska przepustowość może być spowodowana małymi plikami. Czy możesz opublikować swoje polecenie rsync, aby sprawdzić opcje?
kranteg
@kranteg zobacz edycję
dyasny,
2
Sprawdź łączność za pomocą iperf.
ewwhite
tak, iperf pokazuje 991mbit / s, chyba zestaw danych był tak wolny
dyasny
Nie możesz mieć dobrego throuphput z rsync i zestawem danych z małymi plikami. Zdecydowanie powinieneś spróbować smoły.
kranteg

Odpowiedzi:

24

Największą barierą są prawdopodobnie liczba plików i narzut związany z szyfrowaniem SSH. Przy takim przelewie nie zobaczysz prędkości drutu.

Opcje do poprawy obejmują:

  • Korzystanie z rsync + SSH z mniej kosztownym algorytmem szyfrowania (np. -e "ssh -c arcfour")
  • Całkowite wyeliminowanie szyfrowania w transporcie SSH za pomocą czegoś takiego jak HPN-SSH .
  • Przelewy blokowe. Migawki, dd, ZFS snapshot wyślij / odbierz , etc.
  • Jeśli jest to jednorazowy lub rzadki transfer, za pomocą tarnetcat ( nc), mbuffer lub jakiejś kombinacji.
  • Sprawdź tuned-admustawienia CentOS .
  • Usuwanie atime z montowań systemu plików. Sprawdzanie innych opcji montowania systemu plików.
  • Bufory wysyłania / odbierania karty sieciowej.
  • Dostrajanie rsyncpolecenia. Czy -Wmiałaby sens tutaj opcja całych plików? Czy kompresja jest włączona?
  • Zoptymalizuj podsystem pamięci masowej pod kątem rodzaju transferów (dyski SSD, liczba wrzecion, pamięć podręczna kontrolera RAID).
ewwhite
źródło
Zrzuciłem SSH dla NFS, widząc prawie takie same wyniki. Plany oparte na blokach są tym, co planuję, przejdź na kopie zapasowe migawek LVM i dodaj kopie zapasowe do drugiego serwera, na którym będę uruchamiał ZFS dla dedupe. atime jest wyłączony po obu stronach. Nie stosuje się kompresji. Jak zoptymalizować subskrypcje magazynu dla tego rodzaju transferu? Źródło ma dwa dyski RAID10 ponad 12x 10k SAS, jeden na dyskach lokalnych, a drugi MD1220. Serwer kopii zapasowych ma tę samą liczbę dysków, ale z dużymi dyskami SATA i używa RAID5. Kontrolery H800 i H700 z pełną pamięcią podręczną po obu stronach. 2 MB / s (z iftop) ~
dyasny,
~ sprawia, że ​​myślę, że networking jest tutaj wąskim gardłem.
dyasny,
@dyasny Przetestuj swoją sieć, iperfaby się upewnić.
ewwhite
1
Upewnij się, że struktura katalogu docelowego została utworzona przez, rsynca nie przez cp. Widziałem, że dużo dłużej rsynctrwa aktualizacja zdalnego katalogu utworzonego przez : 88 GB zaktualizowane z sumowaniem kontrolnym w 1h26m zamiast 3h! Sposób utworzenia początkowego układu dysku ma kluczowe znaczenie dla uzyskania dobrej wydajności aktualizacji. Czas procesora jest taki sam; czas rzeczywisty może się podwoić. (Ta sama aktualizacja bez sumowania działa w 13 minut z dysku SSD do Seagate o pojemności 200 GB). cp
Ian D. Allen
3

Jak zapewne wiesz, kopiowanie wielu małych plików (np. Skrzynek pocztowych w formacie MailDir lub podobnym) zdecydowanie nie jest najlepszą opcją korzystania z interfejsów o dużej przepustowości. SSH prawdopodobnie nie jest najlepszym protokołem transportowym do tego. Spróbowałbym użyć tar do utworzenia tarballa na hoście źródłowym przed wysłaniem go do drugiego hosta.

tar c /var/mail | ssh root@secondary-host 'tar x -C /var/backups'

Jeśli potrzebujesz przyrostowej kopii zapasowej, możesz wypróbować -gopcje tar. Jeśli nadal musisz zmaksymalizować throuput, spróbuj użyć netcat zamiast ssh.

alxgomz
źródło
Zmieniłem
Próbowałeś używać smoły? Pierwszym krokiem może być utworzenie lokalnego tarballa na głównym serwerze, a następnie przesłanie go przez drut. (lub przetestuj swoją sieć za pomocą iperf jak @ewwhite suggeted)
alxgomz 20.04.2014
Zrobiłbym to, gdybym miał do dyspozycji lokalną przestrzeń. Jest to dość ogromne, nawet przy w pełni zaludnionym pudełku DAS
dyasny
spróbuj go potokiem netcata lub ssh (nie jest to jako skuteczny chociaż)
alxgomz
Będę przełączania zablokować kopii zapasowych opartych na później, a ja zamierzam rury ddpoprzez ncwtedy. ale w tej chwili mam dwa ogromne kopie zapasowe, dlatego muszę zostać przeniesiony z głównego hosta, abym mógł tam stworzyć system LVM
dyasny
1

Spróbuj drażnić czynniki, które się do tego przyczyniły:

  • Procesor (np. Dd / dev / zero przesyłany przez sprzężenie zwrotne)
  • dysk I / O (np. dd dużego pliku przesłanego do cat> / dev / null [przesyłane w celu zapobiegania zwarciom])
  • fizyczna sieć I / O (np. dd podłączona do innej maszyny)
  • itp.

i testowanie ich niezależnie.

Miałem złe doświadczenia ze sterownikami Broadcom, więc moją pierwszą sugestią jest przetestowanie użytecznej przepustowości sieci za pomocą: dd if=/dev/zero bs=1m count=10k | rsh backup_host cat \> /dev/null

Scott Leadley
źródło
Lub iperf ...
ewwhite