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 file9

Bạn làm tương tụ trên RHEL và CentOS.

Hy vọng bài viết giúp ích cho các bạn đồng bộ dữ liệu giữa các máy Linux

Chúc các bạn thành công!

Bài viết liên quan

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *