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 menjadidefault.rsyncssh
untuk mengaktifkanrsync
alat melalui SSH.target
properti akan diganti dengan dua properti untuk menentukan tujuan jarak jauh:host
dantargetdir
.
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'
Opsi 2:Gunakan tautan simbolik
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.
Artikel terkait
- Menggunakan rsync untuk Menyinkronkan File
Gunakan tab Umpan Balik untuk memberikan komentar atau mengajukan pertanyaan. Anda juga dapat memulai percakapan dengan kami.