Hướng dẫn đồng bộ dữ liệu trên Linux dùng lsyncd
Bài viết này mình chia sẻ cách đồng bộ hóa các thư mục cục bộ và từ xa trong Linux bằng Lsyncd (Daemon đồng bộ hóa trực tiếp). Sử dụng Lsyncd, chúng ta có thể nhân bản cục bộ đến các thư mục cục bộ hoặc cục bộ đến các thư mục từ xa. Nó rất hữu ích khi bạn muốn đồng bộ dữ liệu giữa các thư mục thường xuyên được cập nhật nội dung mới. Lsyncd được thiết kế để đồng bộ hóa cây thư mục cục bộ với cấu hình thấp về các thay đổi dự kiến đối với máy nhân bản từ xa.
Cài đặt Lsyncd trên Linux
Trên Debian cũng như Ubuntu, Linux Mint chạy lệnh sau để cài đặt Lsyncd:
$ sudo apt-get install lsyncd
Trên CentOS, cần cài EPEL trước.
$ sudo yum install epel-release
Và cài lệnh sau:
$ sudo yum install lsyncd
Cấu hình Lsyncd trên Debian và Ubuntu
Vào thư mục “/usr/share/doc/lsyncd-*/examples” và xem file cấu hình
cat /usr/share/doc/lsyncd/examples/lrsync.lua
Cấu hình file mẫu
---- -- User configuration file for lsyncd. -- -- Simple example for default rsync. -- settings = { statusFile = "/tmp/lsyncd.stat", statusInterval = 1, } sync{ default.rsync, source="src", target="trg", }
Cấu hình Lsyncd trên RHEL vàCentOS
Xem nội dung file cấu hình
$ cat /etc/lsyncd.conf
Xem các file mẫu cấu hình
$ ls /usr/share/doc/lsyncd-2.1.5/examples/
Như giới thiệu, Lyncd có thể đồng bộ nội dung hai thư mục cục bộ và một thư mục cục bộ vào một thư mục từ xa. Đầu tiên, chúng ta sẽ xem cách đồng bộ hóa các thư mục cục bộ.
1. Synchronize local directories on Debian, Ubuntu
Chúng ta tạo 2 thưc mục với nội dung như sau.
$ sudo mkdir source_dir
$ sudo mkdir dest_dir
Tạo ngẫu nhiên files trong thư mục source_dir :
$ sudo touch source_dir/file{1..10}
Tạo thư mục log file cho Lysyncd. Có thể bỏ qua nếu không cần thiết.
$ sudo mkdir /var/log/lsyncd
$ sudo touch /var/log/lsyncd/lsyncd.{log,status}
Tạo file cấu hình cho Lsyncd:
$ sudo mkdir /etc/lsyncd
$ sudo nano /etc/lsyncd/lsyncd.conf.lua
Chỉnh lại đường dẫn bên dưới:
settings {
logfile = "/var/log/lsyncd/lsyncd.log",
statusFile = "/var/log/lsyncd/lsyncd.status"
}
sync {
default.rsync,
source = "/home/sk/source_dir",
target = "/home/sk/dest_dir",
}
Thay source và target đúng đường dẫn đã tạo. Lưu lại và thoát.
Khởi động lại lsyncd và cài đặt cho phép khởi động cùng hệ thống:
$ sudo systemctl enable lsyncd
$ sudo systemctl restart lsyncd
Bây giờ kiểm tra trong source_dir và dest_dir directories.
$ ls source_dir/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Kiểm tra dest_dir:
$ ls dest_dir/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Ta thấy files trong source_dir directory only và nội dung đã tự động đồng bộ sang dest_dir directory.
Xem log file.
$ tail -10 /var/log/lsyncd/lsyncd.log
Sat Apr 15 17:07:34 2017 Normal: recursive startup rsync: /home/sk/source_dir/ -> /home/sk/dest_dir/ Sat Apr 15 17:07:34 2017 Normal: Startup of "/home/sk/source_dir/" finished.
Kiểm tra Lsyncd status file:
$ more /var/log/lsyncd/lsyncd.status
Lsyncd status report at Sat Apr 15 17:07:44 2017 Sync1 source=/home/sk/source_dir/ There are 0 delays Excluding: nothing. Inotify watching 1 directories 1: /home/sk/source_dir/
2. Synchronize local directories on RHEL, CentOS
Sửa cấu hình Lsyncd :
$ sudo nano /etc/lsyncd.conf
Chỉnh lại các đường dẫn sau:
---- -- 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.log", statusFile = "/var/log/lsyncd.status" } sync { default.rsync, source = "/root/source_dir", target = "/root/dest_dir",
Thay source và target đúng đường dẫn đã tạo. Lưu lại và thoát.
Khởi động lại lsyncd và cài đặt cho phép khởi động cùng hệ thống::
$ sudo systemctl enable lsyncd
$ sudo systemctl start lsyncd
Kiểm tra nội dung source_dir và dest_dir directories.
$ ls source_dir/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Kiểm tra dest_dir contents:
$ ls dest_dir/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file9
Ta thấy nội dung source_dir đã đồng bộ sang dest_dir directory.
Xem log file.
$ tail -10 /var/log/lsyncd.log
Kiểm tra trạng thái Lsyncd file:
$ more /var/log/lsyncd.status
3. Synchronize remote directories on Debian, Ubuntu systems
Chúng ta cần setup password-less SSH login.
$ sudo su
# ssh-keygen -t rsa
Nhấn ENTER ENTER ENTER…
Generating public/private rsa key pair. Enter file in which to save the key (/root/.ssh/id_rsa): Created directory '/home/sk/.ssh'. Enter passphrase (empty for no passphrase): Enter same passphrase again: Your identification has been saved in /root/.ssh/id_rsa. Your public key has been saved in /root/.ssh/id_rsa.pub. The key fingerprint is: SHA256:dHc2aKk5F2wBq7CIc5sVHJwYNjoPdwgxDKb1KuBBkgs sk@ubuntuserver The key's randomart image is: +---[RSA 2048]----+ |o*=.++.. ... | |E..*.+o. o + | |+o+ + = . o O + | |+ .B o = o * + . | |..+ + o S + . | | . o + o | | o | | | | | +----[SHA256]-----+
Tại máy local chép SSH public key đến máy remote ở đây máy 192.168.43.150:
# ssh-copy-id root@192.168.43.150
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub" The authenticity of host '192.168.43.150 (192.168.43.150)' can't be established. ECDSA key fingerprint is SHA256:U7I0O1OOzzbHFlhIG0HoGDr1usHzLBju6Jmr6bUB9Es. Are you sure you want to continue connecting (yes/no)? yes /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 root@192.168.43.150's password: Number of key(s) added: 1 Now try logging into the machine, with: "ssh 'root@192.168.43.150'" and check to make sure that only the key(s) you wanted were added.
SSH vào máy remote:
# ssh root@192.168.43.150
Tạo một thư mục đồng bộ:
# mkdir remotesync
Thoát ssh máy remote:
# exit
Chỉnh Lsyncd cấu hình lsyncd từ máy local:
$ sudo nano /etc/lsyncd/lsyncd.conf.lua
Chỉnh lại các đường dẫn sau:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status" } sync { default.rsync, source = "/home/sk/source_dir", host = "192.168.43.150", targetdir = "/root/remotesync", }
Ở đây, 192.168.43.150 IP là máy remote. Và /root/remotesync/ là thư mục destination của máy remote. Lưu lại và thoát.
Khởi động lại Lsyncd.
$ sudo systemctl restart lsyncd
Bây giờ SSH vào máy remote:
$ ssh root@192.168.43.150
Kiểm tra nội dung thư mục /root/remotesync/. Bạn sẽ thấy có file được đồng bộ sang.
root@server1 ~]# ls remotesync/
file1 file10 file2 file3 file4 file5 file6 file7 file8 file
إرسال تعليق