GNU/Linux >> Belajar Linux >  >> Linux

Siapkan Lsyncd secara lokal dan melalui SSH untuk menyinkronkan direktori

Artikel ini menjelaskan cara menyiapkan Lsyncd alat baik secara lokal maupun melalui SSH untuk menjaga agar direktori tetap sinkron.

Lsinkron singkatan dari Live Syncing Mirror Daemon, dan ini adalah alat yang digunakan dalam sistem Linux untuk menjaga agar direktori tetap sinkron. Direktori ini dapat ditemukan secara lokal, di dalam mesin yang sama, atau dari jarak jauh, pada mesin yang berbeda. Untuk sinkronisasi jarak jauh, artikel ini berfokus pada penggunaan SSH untuk mencapainya.

Keuntungan menggunakan Lsyncd adalah bahwa ini adalah solusi gratis dan ringan yang tidak akan mempengaruhi kinerja sistem file. Ini memonitor file secara berkala untuk setiap perubahan dan kemudian menggunakan rsync untuk melakukan sinkronisasi.

Persyaratan

Untuk Lsinkron agar berfungsi dengan baik, Anda harus memiliki rsync terpasang.

CATATAN: Disarankan untuk menjalankan perintah berikut sebagai sudo

Untuk menginstal rsync di sistem CentOS, Fedora, atau Red Hat gunakan:

yum install rsync

Untuk sistem Ubuntu atau Debian gunakan:

apt-get update
apt-get install rsync

Instal Lsyncd

Untuk menginstal lsyncd pada sistem CentOS, Fedora, atau Red Hat, perlu mengaktifkan repositori EPEL sebelum menginstal lsyncd . Perintah berikut digunakan untuk menyelesaikan instalasi:

yum install epel-release
yum install lsyncd

Untuk sistem Ubuntu atau Debian, lsyncd alat disertakan dalam repositori default, jadi perintah berikut sudah cukup untuk instalasi:

sudo apt-get update
sudo apt-get install lsyncd

Untuk mengonfirmasi bahwa instalasi berhasil dan memverifikasi versi yang diinstal, gunakan perintah berikut:

lsyncd -version

File konfigurasi Lsyncd

File konfigurasi default untuk Lsyncd dibuat secara otomatis di /etc/lsyncd.conf saat penginstalan selesai.

File ini berisi semua parameter yang digunakan untuk melakukan sinkronisasi antar direktori, baik secara lokal maupun jarak jauh.

Misalnya file konfigurasi, Anda dapat meninjau konten di /usr/share/doc/lsyncd*/examples/ (* mengacu pada versi Lsyncd yang diinstal).

cd /usr/share/doc/lsyncd-2.2.2/examples/
ls -lh
total 40
-rw-r--r--. 1 root root 715 Feb 16 2017 lalarm.lua
-rw-r--r--. 1 root root 1055 Feb 16 2017 lbash.lua
-rw-r--r--. 1 root root 534 Feb 16 2017 lecho.lua
-rw-r--r--. 1 root root 3376 Feb 16 2017 lftp.lua
-rw-r--r--. 1 root root 2278 Feb 16 2017 lgforce.lua
-rw-r--r--. 1 root root 2737 Feb 16 2017 limagemagic.lua
-rw-r--r--. 1 root root 2770 Feb 16 2017 lpostcmd.lua
-rw-r--r--. 1 root root 211 Feb 16 2017 lrsync.lua
-rw-r--r--. 1 root root 204 Feb 16 2017 lrsyncssh.lua
-rw-r--r--. 1 root root 4047 Feb 16 2017 lsayirc.lua

Untuk keperluan artikel ini, file konfigurasi yang dapat menjadi contoh yang berguna adalah lrsync.lua untuk sinkronisasi lokal, dan lrsyncssh.lua untuk sinkronisasi jarak jauh.

File konfigurasi akan memiliki struktur berikut:

cat /usr/share/doc/lsyncd-2.2.2/examples/lrsync.lua
[...]
-- User configuration file for lsyncd.
-- Simple example for default rsync.
settings {
    statusFile = "/tmp/lsyncd.stat",
    statusInterval = 1,
}

sync{
    default.rsync,
    source="src",
    target="trg"
}

Seperti disebutkan sebelumnya, Lscynd menggunakan rsync alat untuk melakukan sinkronisasi, sehingga Anda dapat menggunakan rsync flag untuk mempersonalisasi proses dengan menambahkan rsync parameter ke sync pernyataan:

[...]
sync {
    default.rsync,
    source="src",
    target="trg",
    rsync = {
        archive = false,
        compress = true,
        links = false,
        owner = false,
        perms = false,
        verbose = true
    }
}
[...]

Juga, penting untuk mempertimbangkan bahwa Lsyncd mengagregasi peristiwa untuk default 20 detik sebelum memverifikasi jika ada perubahan yang telah dilakukan. Waktu ini dapat dimodifikasi dengan menggunakan delay parameter di sync bagian dari file konfigurasi:

sync {
    default.rsync,
    source = "src",
    target = "trg",
    delay = 5,
}

Sinkronkan direktori lokal

Untuk menyinkronkan konten direktori lokal /path/source_dir ke direktori lokal /path/destination_dir kita perlu melakukan beberapa perubahan pada file konfigurasi dan disarankan untuk membuat file log dan file status untuk melacak kemajuan tugas, meskipun ini merupakan langkah opsional:

mkdir /var/log/lsyncd
touch /var/log/lsyncd/lsyncd.{log,status}

Langkah selanjutnya adalah memodifikasi file konfigurasi di /etc/lsyncd.conf untuk menentukan direktori sumber dan target dan, jika dibuat, lokasi file log dan status. Konfigurasinya adalah sebagai berikut:

-- User configuration file for lsyncd.
-- Simple example for default rsync, but executing moves through on the target.
-- For more examples, see /usr/share/doc/lsyncd*/examples/
settings {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

sync {
    default.rsync,
    source = "/path/source_dir",
    target = "/path/destination_dir"
}

Untuk mengaktifkan konfigurasi baru ini, mulai layanan dengan perintah berikut:

systemctl start lsyncd

Setelah mengikuti petunjuk di atas, Lsyncd akan mulai menyinkronkan konten dari /path/source_dir ke /path/destination_dir .

PERINGATAN :Hanya aman untuk mengaktifkan Lsyncd untuk memulai saat boot jika Anda yakin bahwa direktori tujuan tidak pernah diubah oleh Lsyncd lainnya. Jika tidak, jangan aktifkan Lsyncd saat boot dan pastikan MOTD berisi baris untuk menunjukkan bahwa Lsyncd telah diinstal dan sedang digunakan. Misalnya:

Saat reboot, lakukan langkah-langkah berikut:

rsync periksa apakah Anda berada dalam situasi "jarak jauh/server":

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Mulai Lsyncd dengan:

systemctl start lsyncd.service

Perlu menyinkronkan beberapa direktori lokal?

Untuk menyinkronkan lebih dari satu pasang direktori, Anda dapat menambahkan lebih banyak sync pernyataan dalam file konfigurasi:

[...]
sync{
default.rsync,
    source = "/path/source_1",
    target = "/path/target_1"
}

sync{
    default.rsync,
    source = "/path/source_2",
    target = "/path/target_2"
}
[...]

Sinkronkan direktori jarak jauh melalui SSH

Untuk menyelesaikan sinkronisasi jarak jauh menggunakan Lsyncd, server sumber harus memiliki akses SSH tanpa kata sandi ke server target. Ini dilakukan dengan membuat kunci SSH di sumber server.

Buat kunci untuk akses tanpa kata sandi SSH

Gunakan perintah berikut di server sumber untuk membuat kunci:

ssh-keygen -t rsa

Anda akan diminta untuk memasukkan file tempat Anda ingin menyimpan kunci; kecuali Anda memiliki konfigurasi khusus, biarkan kosong untuk menggunakan lokasi default. Setelah ini, prompt lain akan meminta kata sandi; kosongkan ini karena Anda memerlukan login lengkap tanpa kata sandi.

Sekarang setelah kunci dibuat, salin kunci ke tujuan server. Untuk menyalinnya ke authorized_keys file di server tujuan, gunakan instruksi berikut di sumber server tempat kunci telah dibuat:

sudo su
ssh-copy-id DESTINATION_SERVER_IP

Untuk menguji apakah koneksi tanpa kata sandi tercapai, masuk ke tujuan server dari sumber satu:

ssh DESTINATION_SERVER_IP

Jika Anda dapat masuk tanpa diminta kata sandi, prosesnya telah berhasil.

Sekarang setelah Anda masuk, buat direktori pada host jarak jauh yang akan berfungsi sebagai folder tujuan dan keluar dari sesi SSH:

mkdir /path/remote_destination_dir
exit
exit

Edit file konfigurasi

Struktur file konfigurasi akan tetap seperti yang dijelaskan di bagian sinkronisasi direktori lokal, tetapi beberapa perubahan akan dilakukan pada sync pernyataan:

  • default.rsync properti akan diubah menjadi default.rsyncssh untuk mengaktifkan rsync alat melalui SSH.
  • target properti akan diganti dengan dua properti untuk menentukan tujuan jarak jauh:host dan targetdir .

File konfigurasi akan terlihat seperti ini:

[...]
settings = {
    logfile = "/var/log/lsyncd/lsyncd.log",
    statusFile = "/var/log/lsyncd/lsyncd.status"
}

servers = {
 "REMOTE_IP"
}
sourceList =
{
        "PATH_TO_FOLDER_TO_BE_SYNCED",
}
for _, source in ipairs( sourceList ) do
        for _, server in ipairs(servers) do

sync {
    default.rsyncssh,
    source = "/path/source_dir",
    host = "DESTINATION_SERVER_IP",
    targetdir = "/path/remote_destination_dir"
}
[...]

Setelah perubahan dibuat pada file konfigurasi, mulailah layanan seperti yang dijelaskan di atas:

systemctl start lsyncd

Jika layanan Lsyncd sudah berjalan, restart saja:

sudo service lsyncd restart

PERINGATAN: Hanya aman untuk mengaktifkan Lsyncd untuk memulai saat boot jika Anda yakin bahwa direktori tujuan tidak pernah diubah oleh Lsyncd lainnya. Jika tidak, jangan aktifkan Lsyncd saat boot dan pastikan MOTD berisi baris untuk menunjukkan bahwa Lsyncd telah diinstal dan sedang digunakan. Misalnya:

Saat reboot, lakukan langkah-langkah berikut:

rsync memeriksa apakah Anda berada dalam situasi "jarak jauh/server"

rsync -n -avrc root@REMOTE_SERVER:/PATH_TO_FOLDER_TO_BE_SYNCED/* /PATH_TO_FOLDER/

Mulai Lsyncd dengan

systemctl start lsyncd.service

Mengecualikan direktori dari Lsyncd

Terkadang Anda perlu mengecualikan beberapa folder yang dipilih dalam direktori tertentu. Contohnya meliputi:

  • File media yang dipasang di NFS.
  • Mencatat file. Saat disinkronkan, file log membuat banyak obrolan dan penggunaan bandwidth yang tidak perlu. Dalam beberapa kasus, ini dapat menyebabkan penundaan sinkronisasi yang signifikan.
  • File sementara yang digunakan oleh proses yang sedang berjalan.

Untuk mengecualikan folder, Anda hanya perlu meletakkan jalur relatif dari folder yang dikecualikan. Misalnya:

  • /var/www adalah direktori tujuan sedang disinkronkan ke slave
  • /var/www/vhosts/www.example.com/wp-content/uploads adalah direktori yang dipasang dari server NFS Anda, atau yang tidak ingin Anda sinkronkan.
  • Buat pengecualian dalam konfigurasi lsyncd. Dengan asumsi Anda menggunakan Lsyncd 2.1.5 pada CentOS 6, pertama-tama pastikan Anda memiliki file yang dikecualikan di dalam konfigurasi Lsyncd seperti yang ditunjukkan di bawah ini di sebelah 'baris excludeFrom:
vim /etc/lsyncd/lsyncd.conf
[...]
sync {
    default.rsyncssh,
    source="/var/www/",
    host=server,
    targetdir="/var/www/",
    excludeFrom="/etc/lsyncd-excludes.txt",
    rsync = {

Selanjutnya, kecualikan jalur relatif terhadap direktori sumber yang ditentukan untuk sinkronisasi. Karena direktori target adalah /var/www, dan direktori yang ingin kita kecualikan adalah /var/www/vhosts/www.example.com/wp-content/uploads, entri kita adalah:

cat /etc/lsyncd-excludes.txt
vhosts/www.example.com/wp-content/uploads

PERHATIAN:Pastikan file yang dikecualikan tidak memiliki baris kosong di dalamnya. Jika ya, lsyncd memperlakukan ini sebagai "kecualikan /" dan kemudian semuanya akan dikecualikan.

Lsyncd pada solusi NFS

Lsyncd biasanya digunakan untuk mereplikasi file dalam arsitektur master-slave. Meskipun ini berfungsi baik untuk menangani pembaruan konten/kode, untuk file media atau kontribusi pengguna, sering kali lebih mudah menggunakan NFS untuk berbagi folder di antara berbagai server web. Berhati-hatilah untuk mengecualikan folder yang dibagikan melalui NFS dari Lsyncd. Dalam skenario terburuk, di mana server master Anda di-boot ulang tetapi bagian NFS gagal dipasang, hal ini dapat mengakibatkan Lsyncd menghapus konten bagian NFS Anda.

Ada beberapa cara untuk menangani ini.

Opsi 1:Mengecualikan direktori dari Lsyncd

Untuk detail lebih lanjut, lihat bagian 'Mengecualikan direktori dari Lsyncd'

Rsync secara default tidak bekerja dengan target tautan simbolik. Kami dapat menggunakan ini untuk melindungi konten yang dipasang di NFS.

Alih-alih:

/var/www <– folder root untuk replikasi Lsyncd/uploads <– Titik pemasangan berbagi NFS

Pasang share NFS di bawah folder yang berbeda, katakan /nfsmount, lalu lakukan hal berikut (dengan asumsi konten unggahan telah disalin ke /nfsmount/uploads):

cd /var/www
rm -Rf uploads
ln -s /nfsmount/uploads uploads

Sekarang konten yang dipasang di NFS Anda berada dengan aman di luar pohon direktori yang direplikasi Lsyncd.

Opsi 3:Setel parameter rsync

Rsync mendukung opsi -x yang memberi tahu rsync untuk tidak melewati batas sistem file. Namun sebelum melanjutkan, ada beberapa catatan yang perlu Anda perhatikan sebelum mencoba ini:

  • Ini tidak akan berfungsi dengan volume Cloud Block Storage, volume LVM ekstra, dll.
  • Ini tidak akan berfungsi jika Lsyncd berada di server yang sama dengan server NFS. Opsi ini mengasumsikan Anda memiliki server NFS khusus
  • Ini hanya berfungsi jika sumbernya adalah sistem file tunggal

Untuk Lsyncd 2.0.x:Tambahkan opsi ini ke opsi yang diteruskan Lsyncd ke rsync dengan mengedit baris rsyncOpts di /etc/lsyncd.lua:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsyncOpts="-avzx"
}

Untuk Lsyncd 2.1.x:Dengan Lsyncd 2.1.x, rsyncOpts telah diubah menjadi rsync={options} dengan penggunaan opsi dengan nama lengkap dan bukan hanya huruf seperti sebelumnya. Tambahkan yang berikut ini ke /etc/lsyncd.conf:

sync{
        default.rsyncssh,
        source="/var/www",
        host="10.x.x.x",
        targetdir="/var/www",
        delete="running",
        rsync={ one_file_system=true }
 }

Kesimpulan

Menggunakan Lsyncd untuk menyinkronkan folder lokal dan jauh adalah alternatif yang ekonomis dan efisien dan, berkat beberapa opsi yang tersedia untuk file konfigurasi, file tersebut dapat dipersonalisasi untuk memenuhi kebutuhan Anda.

  • Menggunakan rsync untuk Menyinkronkan File

Gunakan tab Umpan Balik untuk memberikan komentar atau mengajukan pertanyaan. Anda juga dapat memulai percakapan dengan kami.


Linux
  1. Cara Mengunduh dan Mengunggah File melalui SSH

  2. Cara menginstal dan mengatur server sftp di Ubuntu 20.04

  3. ZFS mengirim/menerima melalui ssh di linux tanpa mengizinkan login root

  1. Cara Mengatur Zona Waktu dan Menyinkronkan Waktu Server dengan NTP di Linux

  2. Cara Menyinkronkan Direktori Lokal Dan Jarak Jauh Di Linux

  3. Cara mengatur ssh tanpa kata sandi dengan kunci RSA

  1. Cara Mengatur Tunneling SSH

  2. Cara Mengatur Kunci SSH

  3. Nonaktifkan Login Root Langsung dan Akses Pengguna melalui SSH ke Server