GNU/Linux >> Belajar Linux >  >> Debian

Menyiapkan Sinkronisasi File Unison antara dua Server di Debian 8 (Jessie)

Tutorial ini menunjukkan cara mengatur sinkronisasi file antara dua server Debian 8 dengan Unison. Unison adalah alat sinkronisasi file yang mirip dengan rsync, perbedaan besar adalah melacak/mensinkronkan perubahan di kedua arah, yaitu, file yang diubah di server1 akan direplikasi ke server2 dan sebaliknya.

1 Catatan Awal

Dalam tutorial ini saya akan menggunakan dua server Debian berikut:

  • server1.example.com dengan alamat IP 192.168.1.101
  • server2.example.com dengan alamat IP 192.168.1.102

Saya ingin menyinkronkan direktori /var/www antara dua server. Saya akan menjalankan Unison sebagai pengguna root dalam tutorial ini sehingga Unison memiliki izin yang cukup untuk menyinkronkan izin pengguna dan grup.

Semua perintah dalam tutorial ini dijalankan sebagai pengguna root. Masuk ke kedua server di shell sebagai root dan mulai dengan langkah 2 "Menginstal Unison ".

2 Menginstal Bersamaan

server1/server2:

Unison harus diinstal pada server1 dan server2; karena kita terhubung dari server1 ke server2 menggunakan SSH, kita juga membutuhkan paket SSH dan saya akan menginstal editor nano untuk mengedit file di shell. Ini dapat dicapai sebagai berikut:

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

3 Membuat Pasangan Kunci Pribadi/Publik Di server1

server1:

Sekarang kita membuat pasangan kunci privat/publik di server1.example.com:

ssh-keygen -t dsa

[email protected]:~# ssh-keygen -t dsa
Membuat pasangan kunci dsa publik/pribadi.
Masukkan file di mana untuk menyimpan kunci (/root/.ssh/id_dsa): <-- ENTER
Created directory '/root/.ssh'.
Masukkan passphrase (kosongkan untuk tanpa passphrase): <-- ENTER
Masukkan passphrase yang sama lagi: <-- ENTER
identifikasi telah disimpan di /root/.ssh/id_dsa.
Kunci publik Anda telah disimpan di /root/.ssh/id_dsa.pub.
Sidik jari kunci adalah:
ba:82 :e1:a1:42:9b:d4:c8:99:c8:bd:8b:7d:4d:d4:66 [dilindungi email]
Gambar kunci acak adalah:
+--- [DSA 1024]----+
| |
| |
| . |
| . E |
|+ * . S |
|.Ooo o |
|ooo+. + |
|oo=... o |
|.. oo.. |
+-----------------+
[dilindungi email]:~#

Penting agar Anda tidak memasukkan frasa sandi jika tidak, pencerminan tidak akan berfungsi tanpa interaksi manusia, jadi cukup tekan ENTER!

Selanjutnya, kita salin kunci publik kita ke 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.

Sekarang periksa server2 apakah kunci publik server1 telah ditransfer dengan benar:

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 Menjalankan Bersamaan

server1:

Kita sekarang dapat menjalankan Unison untuk pertama kalinya untuk menyinkronkan direktori /var/www di kedua server. Di server1 jalankan:

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

Outputnya akan mirip dengan ini - Anda mungkin harus menjawab beberapa pertanyaan karena ini adalah pertama kalinya Unison dijalankan:

[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)

Periksa direktori /var/www di server1 dan server2 sekarang, dan Anda akan menemukan bahwa direktori tersebut sinkron sekarang.

Tentu saja, kita tidak ingin menjalankan Unison secara interaktif, oleh karena itu kita dapat membuat file preferensi (/root/.unison/default.prf) yang berisi semua pengaturan yang seharusnya kita tentukan pada baris perintah:

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

Komentar harus membuat file menjelaskan sendiri, kecuali untuk arahan jalur. Jika Anda tidak menentukan arahan jalur, maka direktori di arahan root akan disinkronkan. Jika Anda menentukan arahan jalur, maka jalur tersebut relatif terhadap jalur root (mis. root =/var/www dan path =current diterjemahkan ke /var/www/current), dan hanya subdirektori ini yang akan disinkronkan, bukan seluruh direktori yang ditentukan dalam arahan root.

Anda dapat mengetahui lebih lanjut tentang opsi yang tersedia dengan melihat halaman manual Unison:

man unison

Sekarang kita telah meletakkan semua pengaturan dalam file preferensi (terutama arahan root (dan opsional path), kita dapat menjalankan Unison tanpa argumen apa pun:

unison

5 Membuat Pekerjaan Cron untuk Unison

server1:

Kami ingin mengotomatiskan sinkronisasi, itulah sebabnya kami membuat tugas cron untuknya di server1.example.com:

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

Ini akan menjalankan Unison setiap 5 menit; sesuaikan dengan kebutuhan Anda (lihat

man 5 crontab

). Saya menggunakan path lengkap ke unison di sini (/ usr/bin/unison) hanya untuk memastikan bahwa cron tahu di mana menemukan unison. Lokasi serempak Anda mungkin berbeda. Jalankan

which unison

untuk mencari tahu di mana milik Anda.

6 Tes Serempak

Sekarang saya akan menguji sinkronisasi 2 arah dari Unison untuk melihat apakah pengaturan berfungsi sepenuhnya.

Jalankan perintah berikut di server1 untuk membuat file uji dengan konten "Tes 1":

Server1

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

Sekarang tunggu setidaknya 5 Menit (karena kami membuat cronjob yang berjalan setiap 5 menit sekali). Kemudian jalankan di server2:

cat /var/www/test.txt

untuk menampilkan konten file test.txt di layar. Outputnya harus mirip dengan tangkapan layar ini.

Sekarang jalankan perintah ini di server2 yang memperbarui konten file pengujian kami menjadi "Test 2":

Server2

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

Dan tunggu minimal 5 menit. Kemudian jalankan perintah cat di server1:

Server1

cat /var/www/test.txt

Outputnya harus seperti yang ditunjukkan pada tangkapan layar.

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

Debian
  1. Penyimpanan Ketersediaan Tinggi Dengan GlusterFS Di Debian Lenny - Replikasi File Otomatis Di Dua Server Penyimpanan

  2. Penyimpanan Ketersediaan Tinggi Dengan GlusterFS 3.0.x Pada Debian Squeeze - Replikasi File Otomatis Di Dua Server Penyimpanan

  3. Menginstal Webmin di Debian 8 (Jessie)

  1. Bagaimana cara mengupgrade Debian 8 Jessie ke Debian 9 Stretch

  2. Penyimpanan Ketersediaan Tinggi Dengan GlusterFS 3.2.x Pada Debian Wheezy - Replikasi File Otomatis (Cermin) Di Dua Server Penyimpanan

  3. Sinkronisasi real-time dua arah dari pohon file besar antara dua server linux yang jauh

  1. Penyimpanan Ketersediaan Tinggi dengan GlusterFS di Debian 8 - Mencerminkan di dua server penyimpanan

  2. Menyiapkan Replikasi Master-Master dengan MySQL di Debian 8 (Jessie)

  3. Debian 8 Jessie Dirilis – Apa yang Baru?