Synchronizacja plików w czasie rzeczywistym


22

Czy jest dostępne narzędzie do synchronizacji plików między dwoma lub więcej serwerami Linux bezpośrednio po zapisaniu pliku na dysku? rsyncKomenda nie pasuje mi na tym, bo jeśli ja ustawić rsyncw cron, minimalny czas można ustawić to 1 minuta, ale muszę go na podstawie czasu rzeczywistego.


2
Czy potrzebujesz synchronizacji z jednego serwera do odczytu i zapisu na jednym lub kilku serwerach tylko do odczytu, czy potrzebujesz synchronizacji dwukierunkowej (z propagacją w obu kierunkach), czy n-kierunkowej? Jeśli chcesz dwukierunkowy, w jaki sposób rozwiązujesz konflikty?
Gilles „SO- przestań być zły”

Odpowiedzi:


18

Sam go nie używałem, ale ostatnio o nim czytałem. Istnieje demon o nazwie lsyncd, który, jak przypuszczam, robi dokładnie to, czego potrzebujesz.

Przeczytaj więcej na ten temat TUTAJ


2
IMHO, to powinna być zaakceptowana odpowiedź. lsyncdużywa inotifyi powinien być najszybszy na poziomie fs. Więcej na github.com/axkibe/lsyncd . Z tej strony: Lsyncd obserwuje interfejs monitorowania zdarzeń lokalnych drzew katalogów (inotify lub fsevents). Agreguje i łączy zdarzenia przez kilka sekund, a następnie spawnuje jeden (lub więcej) procesów w celu synchronizacji zmian. Domyślnie jest to rsync. Lsyncd jest zatem lekkim rozwiązaniem do tworzenia kopii lustrzanych na żywo, które jest stosunkowo łatwe do zainstalowania, nie wymaga nowych systemów plików ani blokuje urządzeń i nie wpływa na wydajność lokalnego systemu plików.
SACHIN GARG

5

Narzędzia Inotify

Zapewnij interfejs inotifyskładający się z:

inotifywait

To polecenie po prostu blokuje zdarzenia inotify, dzięki czemu jest odpowiednie do użycia w skryptach powłoki. Może oglądać dowolny zestaw plików i katalogów oraz rekurencyjnie oglądać całe drzewa katalogów.

inotifywatch

To polecenie zbiera statystyki użytkowania systemu plików i zlicza dane wyjściowe każdego zdarzenia inotify.


4

Synchronizacja plików w czasie rzeczywistym między wieloma serwerami w trybie wielu master

Istnieje dobre narzędzie lsyncddo synchronizacji plików między wieloma serwerami w czasie rzeczywistym. Tutaj próbowałem z dwoma serwerami.

Hosty: Serwer 1 i Serwer 2

Używany system operacyjny: CentOS 7

Zainstaluj poniższe pakiety na obu serwerach.

# yum install -y epel-release
# yum -y install lua lua-devel pkgconfig gcc asciidoc lsyncd

wygeneruj klucz ssh na obu serwerach i dodaj do authorized_keyspliku. [dodaj klucz publiczny serwera 1 do serwera 2 authorized_keysi klucz publiczny serwera 2 do authorized_keyspliku serwera 1 ]

Konfiguracja serwera 1

Otwórz /etc/lsyncd.confi skomentuj domyślną konfigurację za pomocą --na początku linii i dodaj poniższą konfigurację do pliku.

settings {
  logfile = "/var/log/lsyncd/lsyncd.log",
  delay = 1
}
sync {
  default.rsync,
  source="/home/test/public_html/",
  target="server2:/home/test/public_html/",
  rsync = {
    compress = true,
    acls = true,
    verbose = true,
    owner = true,
    group = true,
    perms = true,
    rsh = "/usr/bin/ssh -p 22 -o StrictHostKeyChecking=no"
  }
}

Zmień docelowy adres IP w targetparametrze.

Możesz zmienić delayparametr zgodnie ze swoimi wymaganiami. Tutaj ustawia się 1 sekundę.

Teraz utwórz katalog dziennika.

# mkdir -p /var/log/lsyncd

Włącz lsyncdusługę, aby uruchamiała się automatycznie.

# systemctl enable lsyncd.service

Uruchom usługę.

# systemctl start lsyncd.service

Konfiguracja Server2

Wykonaj tę samą konfigurację, co serwer 1 i zmień targetadres IP.

Teraz synchronizacja jest ustawiona.

Możesz sprawdzić aktywność z tailf /var/log/lsyncd/lsyncd.log

Dzięki MelBurslan za jego sugestię.


Parametr opóźnienia w funkcji ustawień jest nieprawidłowy. Zamiast tego należy użyć zmiennej maxDelays . Wdrożyłem to narzędzie. Jest naprawdę potężny.
Hasanuzzaman Sattar

3

Synchronizacja może być opcją. Jest niezwykle szybki, transfer jest szyfrowany, a klienci mają wiele platform. Używa „inotify” do natychmiastowej synchronizacji zmienionych plików.


2

Trzeba do tego podejść przy pomocy klastrowego rozwiązania typu systemu plików - prosta synchronizacja między dwoma komputerami nie da odpowiedzi w czasie rzeczywistym.


W rzeczywistości te serwery są w AWS. Dlatego nie możemy uzyskać środowiska klastrowego! Czy nie ma innego sposobu?
Sourav,

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.