GNU/Linux >> Znalost Linux >  >> Debian

Nastavení synchronizace souborů Unison mezi dvěma servery v Debianu 8 (Jessie)

Tento tutoriál ukazuje, jak nastavit synchronizaci souborů mezi dvěma servery Debian 8 pomocí Unison. Unison je nástroj pro synchronizaci souborů podobný rsync, velký rozdíl je v tom, že sleduje/synchronizuje změny v obou směrech, tj. soubory změněné na serveru1 budou replikovány na server2 a naopak.

1 předběžná poznámka

V tomto tutoriálu budu používat následující dva servery Debian:

  • server1.example.com s IP adresou 192.168.1.101
  • server2.example.com s IP adresou 192.168.1.102

Chci synchronizovat adresář /var/www mezi dvěma servery. V tomto tutoriálu spustím Unison jako uživatel root, aby měl Unison dostatečná oprávnění k synchronizaci uživatelských a skupinových oprávnění.

Všechny příkazy v tomto kurzu jsou spouštěny jako uživatel root. Přihlaste se k oběma serverům v prostředí jako root a začněte krokem 2 „Instalace Unison ".

."

2 Instalace Unison

server1/server2:

Unison musí být nainstalován na server1 a server2; protože se připojujeme ze serveru1 na server2 pomocí SSH, potřebujeme také balíčky SSH a nainstaluji nano editor pro úpravy souborů do shellu. Toho lze dosáhnout následovně:

apt-get -y install unison openssh-server ssh nano

3 Vytvoření páru soukromých/veřejných klíčů na serveru1

server1:

Nyní vytvoříme pár soukromý/veřejný klíč na server1.example.com:

ssh-keygen -t dsa

[email protected]:~# ssh-keygen -t dsa
Generování páru veřejného/soukromého dsa dsa.
Zadejte soubor , do kterého se klíč uloží (/root/.ssh/id_dsa): <-- ENTER
Vytvořený adresář '/root/.ssh'.
Zadejte heslo (prázdné pro žádné heslo): <-- ENTER
Zadejte znovu stejné heslo: <-- ENTER
Vaše identifikace byla uložena do /root/.ssh/id_dsa.
Váš veřejný klíč byl uložen do /root/.ssh/id_dsa.pub.
Otisk klíče je:
ba:82 :e1:a1:42:9b:d4:c8:99:c8:bd:8b:7d:4d:d4:66 [e-mail chráněný]
Náhodný obrázek klíče je:
+--- [DSA 1024]----+
| |
| |
| . |
| . E |
|+ * . S |
|.Ooo o |
|ooo+. + |
|oo=... o |
|.. oo.. |
+-----------------+
[e-mail chráněn]:~#

Je důležité, abyste nezadávali přístupovou frázi, jinak nebude zrcadlení fungovat bez lidské interakce, takže jednoduše stiskněte ENTER!

Dále zkopírujeme náš veřejný klíč na server2.example.com:

ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
# ssh-copy-id -i $HOME/.ssh/id_dsa.pub [email protected]
The authenticity of host '192.168.1.102 (192.168.1.102)' can't be established.
ECDSA key fingerprint is 51:7f:b4:ed:bd:e3:fc:16:2f:55:5c:e1:2c:d7:3d:a9.
Are you sure you want to continue connecting (yes/no)? <-- yes (you will see this only if this is the first time you connect to server2)
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]'s password: <-- server2 root password
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '[email protected]'"
and check to make sure that only the key(s) you wanted were added.

Nyní zkontrolujte na serveru2, zda byl veřejný klíč serveru1 správně přenesen:

server2:

cat $HOME/.ssh/authorized_keys
[email protected]:/home/administrator# cat $HOME/.ssh/authorized_keys
ssh-dss AAAAB3NzaC1kc3MAAACBAKHLdAztIr8muZIlQYuE/4f75kmgTwWqJRZJ1dTqHDnHWsy48emDU8v85hxAPg43k9aF7/zAwpA0MNNNk5T9Tx/DyUkK/KcyVP2f4p8tvovrkUvoxsZACkTUmFqKdq2x6/AGfjsCRmkpLhZuad7r5rKEXHRh8KYGHqD1Id8wcpy5AAAAFQCww3OekKcKMshMAwBK3XQmmYEGUwAAAIEAgjztlwh8OFYxwQve/RrhI2sceCXwS/yjQyH7q0zdWB9Fr4s/16T2PLBT+7M3vb+JlPDO3JRqgaYbel1kS2F2iKrY0EX0FI3/9fVDfWoz3mhCscPLriqy5AcsHitxQNfiZgA5wDiSjWpk1v+FbIC+VuqbKdQuE4MBKj19N9YALIUAAACABQ4NDsa2UBc8jsxvghjoLhUWF7HChaCksXQcL6i98VNRcemtPC6wpIri75iR4Uhv1666bDOBAdmIBX9Qf7A/+czPKPaj4CGI1hVy1pgYMa3btnEvoSnH/ONtjpOz9q+3up1OOOn+5fud7xjJn+Fq8WoGROgarBpCbQU3w2GUUnM= [email protected]

4 Spuštění Unison

server1:

Nyní můžeme poprvé spustit Unison, abychom synchronizovali adresář /var/www na obou serverech. Na serveru 1 spusťte:

unison /var/www ssh://192.168.1.102//var/www

Výstup bude podobný tomuto – možná budete muset odpovědět na několik otázek, protože je to poprvé, co je Unison spuštěn:

[email protected]:/var/www# unison /var/www ssh://192.168.1.102//var/www
Contacting server...
Connected [//server1//var/www -> //server2//var/www]
Looking for changes
Warning: No archive files were found for these roots, whose canonical names are:
/var/www
//server2//var/www
This can happen either
because this is the first time you have synchronized these roots,
or because you have upgraded Unison to a new version with a different
archive format.
Update detection may take a while on this run if the replicas are
large.
Unison will assume that the 'last synchronized state' of both replicas
was completely empty. This means that any files that are different
will be reported as conflicts, and any files that exist only on one
replica will be judged as new and propagated to the other replica.
If the two replicas are identical, then no changes will be reported.
If you see this message repeatedly, it may be because one of your machines
is getting its address from DHCP, which is causing its host name to change
between synchronizations. See the documentation for the UNISONLOCALHOSTNAME
environment variable for advice on how to correct this.
Donations to the Unison project are gratefully accepted:
http://www.cis.upenn.edu/~bcpierce/unison
Press return to continue.[<spc>] <-- Press Enter
Waiting for changes from server
Reconciling changes
local server2
dir ----> example.com [f] <-- Press Enter
dir ----> example.de [f] <-- Press Enter
Proceed with propagating updates? [] <-- Enter "y"
Propagating updates

UNISON 2.40.102 started propagating changes at 10:17:17.94 on 25 Sep 2015
[BGN] Copying example.com from /var/www to //server2//var/www
[BGN] Copying example.de from /var/www to //server2//var/www
Shortcut: copied /var/www/example.de/web/index.html from local file /var/www/.unison.example.com.d3783bddaaf59b9ba4d2ed0433f9db63.unison.tmp/web/index.html
[END] Copying example.de
[END] Copying example.com
UNISON 2.40.102 finished propagating changes at 10:17:17.94 on 25 Sep 2015

Saving synchronizer state
Synchronization complete at 10:17:17 (2 items transferred, 0 skipped, 0 failed)

Nyní zkontrolujte adresář /var/www na server1 a serveru2 a měli byste zjistit, že jsou nyní synchronizovány.

Samozřejmě nechceme Unison spouštět interaktivně, proto můžeme vytvořit soubor předvoleb (/root/.unison/default.prf), který obsahuje všechna nastavení, která bychom jinak museli zadat na příkazovém řádku:

nano /root/.unison/default.prf
# Roots of the synchronization
root = /var/www
root = ssh://192.168.1.102//var/www

# Paths to synchronize
#path = current
#path = common
#path = .netscape/bookmarks.html

# Some regexps specifying names and paths to ignore
#ignore = Path stats    ## ignores /var/www/stats
#ignore = Path stats/*  ## ignores /var/www/stats/*
#ignore = Path */stats  ## ignores /var/www/somedir/stats, but not /var/www/a/b/c/stats
#ignore = Name *stats   ## ignores all files/directories that end with "stats"
#ignore = Name stats*   ## ignores all files/directories that begin with "stats"
#ignore = Name *.tmp    ## ignores all files with the extension .tmp

#          When set to true, this flag causes the user interface to skip
#          asking for confirmations on non-conflicting changes. (More
#          precisely, when the user interface is done setting the
#          propagation direction for one entry and is about to move to the
#          next, it will skip over all non-conflicting entries and go
#          directly to the next conflict.)
auto=true

#          When this is set to true, the user interface will ask no
#          questions at all. Non-conflicting changes will be propagated;
#          conflicts will be skipped.
batch=true

#          !When this is set to true, Unison will request an extra
#          confirmation if it appears that the entire replica has been
#          deleted, before propagating the change. If the batch flag is
#          also set, synchronization will be aborted. When the path
#          preference is used, the same confirmation will be requested for
#          top-level paths. (At the moment, this flag only affects the
#          text user interface.) See also the mountpoint preference.
confirmbigdel=true

#          When this preference is set to true, Unison will use the
#          modification time and length of a file as a `pseudo inode
#          number' when scanning replicas for updates, instead of reading
#          the full contents of every file. Under Windows, this may cause
#          Unison to miss propagating an update if the modification time
#          and length of the file are both unchanged by the update.
#          However, Unison will never overwrite such an update with a
#          change from the other replica, since it always does a safe
#          check for updates just before propagating a change. Thus, it is
#          reasonable to use this switch under Windows most of the time
#          and occasionally run Unison once with fastcheck set to false,
#          if you are worried that Unison may have overlooked an update.
#          The default value of the preference is auto, which causes
#          Unison to use fast checking on Unix replicas (where it is safe)
#          and slow checking on Windows replicas. For backward
#          compatibility, yes, no, and default can be used in place of
#          true, false, and auto. See the section "Fast Checking" for more
#          information.
fastcheck=true

#          When this flag is set to true, the group attributes of the
#          files are synchronized. Whether the group names or the group
#          identifiers are synchronizeddepends on the preference numerids.
group=true

#          When this flag is set to true, the owner attributes of the
#          files are synchronized. Whether the owner names or the owner
#          identifiers are synchronizeddepends on the preference
#          extttnumerids.
owner=true

#          Including the preference -prefer root causes Unison always to
#          resolve conflicts in favor of root, rather than asking for
#          guidance from the user. (The syntax of root is the same as for
#          the root preference, plus the special values newer and older.)
#          This preference is overridden by the preferpartial preference.
#          This preference should be used only if you are sure you know
#          what you are doing!
prefer=newer

#          When this preference is set to true, the textual user interface
#          will print nothing at all, except in the case of errors.
#          Setting silent to true automatically sets the batch preference
#          to true.
silent=true

#          When this flag is set to true, file modification times (but not
#          directory modtimes) are propagated.
times=true

Komentáře by měly způsobit, že soubor bude srozumitelný, s výjimkou direktiv pro cestu. Pokud nezadáte žádné direktivy cesty, budou synchronizovány adresáře v kořenových direktivách. Pokud zadáte direktivy path, pak jsou cesty relativní ke kořenové cestě (např. root =/var/www a path =current se převede na /var/www/current) a synchronizovány budou pouze tyto podadresáře, nikoli celý zadaný adresář. v kořenové direktivě.

Více o dostupných možnostech se můžete dozvědět na manuálové stránce Unison:

man unison

Nyní, když jsme vložili všechna nastavení do souboru předvoleb (zejména direktivy root (a volitelně cestu), můžeme spustit Unison bez jakýchkoli argumentů:

unison

5 Vytvoření úlohy Cron pro Unison

server1:

Chceme synchronizaci automatizovat, proto pro ni vytváříme cron job na server1.example.com:

crontab -e
*/5 * * * * /usr/bin/unison &> /dev/null

Toto by spustilo Unison každých 5 minut; upravte jej podle svých potřeb (viz

man 5 crontab

). Zde používám úplnou cestu k unisonu (/usr/bin/unison), abych se ujistil, že cron ví, kde najít unisono. Vaše unisono umístění se může lišit. Spustit

which unison

abyste zjistili, kde je ten váš.

6 Test Unison

Nyní otestuji obousměrnou synchronizaci Unisonu, abych zjistil, zda nastavení plně funguje.

Spuštěním následujícího příkazu na server1 vytvořte testovací soubor s obsahem "Test 1":

Server1

echo "Test 1" > /var/www/test.txt

Nyní počkejte alespoň 5 minut (protože jsme vytvořili cronjob, který se spouští jednou za 5 minut). Poté spusťte na server2:

cat /var/www/test.txt

pro zobrazení obsahu souboru test.txt na obrazovce. Výstup by měl být podobný tomuto snímku obrazovky.

Nyní spusťte tento příkaz na serveru2, který aktualizuje obsah našeho testovacího souboru na "Test 2":

Server2

echo "Test 2" > /var/www/test.txt

A počkejte alespoň 5 minut. Poté spusťte příkaz cat na server1:

Server1

cat /var/www/test.txt

Výstup by měl být takový, jak je znázorněno na snímku obrazovky.

  • Unison:http://www.cis.upenn.edu/~bcpierce/unison/
  • Debian:http://www.debian.org/

Debian
  1. Úložiště s vysokou dostupností s GlusterFS 3.0.x na Debian Squeeze – Automatická replikace souborů přes dva úložné servery

  2. Vysoce dostupné úložiště s GlusterFS 3.2.x na Debian Wheezy – automatická replikace souborů (zrcadlení) na dvou serverech úložiště

  3. Nastavení replikace Master-Master s MySQL na Debian 8 (Jessie)

  1. Instalace Webminu v Debianu 8 (Jessie)

  2. Debian – použití dvou displejů v Debianu?

  3. Obousměrná synchronizace velkého stromu souborů v reálném čase mezi dvěma vzdálenými linuxovými servery

  1. Jak upgradovat Debian 8 Jessie na Debian 9 Stretch

  2. Úložiště s vysokou dostupností s GlusterFS na Debianu 8 – zrcadlení mezi dvěma úložnými servery

  3. Úložiště s vysokou dostupností s GlusterFS na Debianu Lenny – Automatická replikace souborů přes dva úložné servery