Cách đồng bộ hóa thư mục bằng Lsyncd trên Ubuntu 20.04

theanh

Administrator
Nhân viên
Lsyncd là một công cụ đơn giản và nhẹ cho phép bạn sao chép thư mục cục bộ của mình sang một thư mục khác trên máy chủ từ xa. Công cụ này hoạt động bằng cách liên tục theo dõi thư mục được chỉ định để tìm các thay đổi sau mỗi vài giây và nếu có bất kỳ thay đổi nào được thực hiện, chúng sẽ được đồng bộ hóa với máy chủ từ xa. Công cụ này rất hữu ích để đồng bộ hóa dữ liệu từ vùng an toàn sang vùng không an toàn.

Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách cài đặt và sử dụng Lsyncd để đồng bộ hóa các thư mục cục bộ và thư mục từ xa.

Điều kiện tiên quyết​

  • Máy chủ chạy Ubuntu 20.04.
  • Mật khẩu gốc được thiết lập trên máy chủ của bạn.

Bắt đầu​

Trước khi bắt đầu, bạn nên cập nhật gói hệ thống lên phiên bản mới nhất. Bạn có thể cập nhật chúng bằng lệnh sau:
Mã:
apt-get update -y
apt-get upgrade -y
Sau khi tất cả các gói được cập nhật, hãy khởi động lại hệ thống để áp dụng các thay đổi.

Cài đặt Lsyncd​

Theo mặc định, gói Lsyncd có sẵn trong hầu hết các hệ điều hành Linux. Bạn có thể cài đặt nó chỉ bằng cách chạy lệnh sau:
Mã:
apt-get install lsyncd -y
Sau khi Lsyncd được cài đặt, bạn có thể xác minh phiên bản Lsyncd đã cài đặt bằng lệnh sau:
Mã:
lsyncd --version
Bạn sẽ nhận được kết quả sau:
Mã:
Phiên bản: 2.2.3

Cấu hình Lsyncd để Đồng bộ hóa Thư mục Cục bộ​

Trong phần này, chúng tôi sẽ cấu hình Lsyncd để đồng bộ hóa thư mục /etc/ với thư mục /mnt/ trên hệ thống cục bộ.

Đầu tiên, tạo một thư mục cho Lsyncd bằng lệnh sau:
Mã:
mkdir /etc/lsyncd
Tiếp theo, tạo một tệp cấu hình Lsyncd mới và xác định thư mục nguồn và đích mà bạn muốn đồng bộ hóa.
Mã:
nano /etc/lsyncd/lsyncd.conf.lua
Thêm các dòng sau:
Mã:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false}sync { default.rsync, source = "/etc/", target = "/mnt"}
Lưu và đóng tệp khi bạn hoàn tất.
Mã:
systemctl start lsyncd
systemctl enable lsyncd
Bạn cũng có thể kiểm tra trạng thái của dịch vụ Lsyncd bằng lệnh sau:
Mã:
systemctl status lsyncd
Bạn sẽ thấy đầu ra sau:
Mã:
? lsyncd.service - LSB: lsyncd daemon init script Đã tải: đã tải (/etc/init.d/lsyncd; đã tạo) Đang hoạt động: đang hoạt động (đang chạy) kể từ Thứ sáu 2020-05-01 03:31:20 UTC; 9 giây trước Tài liệu: man:systemd-sysv-generator(8) Quy trình: 36946 ExecStart=/etc/init.d/lsyncd start (code=exited, status=0/SUCCESS) Nhiệm vụ: 2 (giới hạn: 4620) Bộ nhớ: 12,5M CGroup: /system.slice/lsyncd.service ??36921 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua ??36952 /usr/bin/lsyncd -pidfile /var/run/lsyncd.pid /etc/lsyncd/lsyncd.conf.lua01/05 03:31:20 ubuntu20 systemd[1]: lsyncd.service: Đã thành công.01/05 03:31:20 ubuntu20 systemd[1]: Đã dừng LSB: tập lệnh khởi tạo daemon lsyncd.01/05 03:31:20 ubuntu20 systemd[1]: Đang khởi động LSB: tập lệnh khởi tạo daemon lsyncd...01/05 03:31:20 ubuntu20 lsyncd[36946]: * Đang khởi động daemon đồng bộ hóa lsyncd01/05 03:31:20 ubuntu20 lsyncd[36951]: 03:31:20 Bình thường: --- Đang khởi động, đang khởi tạo daemon ---01/05 03:31:20 ubuntu20 lsyncd[36946]: ...xong.01/05 03:31:20 ubuntu20 systemd[1]: Đã bắt đầu LSB: tập lệnh khởi tạo daemon lsyncd.
Bạn có thể kiểm tra tệp nhật ký Lsyncd để biết thêm chi tiết như được hiển thị bên dưới:
Mã:
tail -f /var/log/lsyncd/lsyncd.log
Bạn sẽ thấy đầu ra sau:
Mã:
/lsyncd/lsyncd.conf.luaThứ sáu, ngày 01 tháng 05 03:30:57 2020 Bình thường: Hoàn thành danh sách sau mã thoát: 0Thứ sáu, ngày 01 tháng 05 03:31:20 2020 Bình thường: --- Khởi động, đang chạy daemon ---Thứ sáu, ngày 01 tháng 05 03:31:20 2020 Bình thường: khởi động đệ quy rsync: /etc/ -> /mnt/Thứ sáu, ngày 1 tháng 5 năm 2020 03:31:20 Bình thường: Khởi động /etc/ -> /mnt/ đã hoàn tất.
Bạn cũng có thể kiểm tra trạng thái đồng bộ hóa bằng lệnh sau:
Mã:
tail -f /var/log/lsyncd/lsyncd.status
Bạn sẽ có thể thấy những thay đổi trong thư mục /mnt bằng lệnh sau:
Mã:
ls /mnt/
Bạn sẽ thấy rằng tất cả các tệp và thư mục từ thư mục /etc đều được thêm vào thư mục /mnt:
Mã:
acpi dconf hosts logrotate.conf newt rc2.d subuid-adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoersalternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.dapache2 default init lsyncd ntp.conf rc5.d sysctl.confapparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.dapparmor.d depmod.d initramfs-tools lvm opt rcS.d systemdapport dhcp inputrc machine-id os-release resolv.conf terminfoapt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezoneat.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.dbash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantagebash_completion e2scrub.conf vấn đề mailcap.order pam.d rsyslog.d ucf.confbash_completion.d vấn đề môi trường.net manpath.config passwd screenrc udevbindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufwbinfmt.d phông chữ kernel-img.conf mime.types perl bảo mật update-managerbyobu fstab landscape mke2fs.conf php selinux update-motd.dca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifierca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfgcalendar gai.conf ld.so.conf modules-load.d polkit-1 services vimconsole-setup groff ld.so.conf.d mtab pollinate shadow vmware-toolscron.d group legal multipath popularity-contest.conf shadow- vtrgbcron.daily group- letsencrypt multipath.conf profile shells vulkancron.hourly grub.d libaudit.conf mysql profile.d skel wgetrccron.monthly gshadow libnl-3 nanorc protocols sos.conf X11crontab gshadow- locale.alias netplan pulse ssh xattr.confcron.weekly gss locale.gen network python3 ssl xdgcryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_foundcrypttab host.conf logcheck NetworkManager rc0.d subgid-dbus-1 hostname login.defs networks rc1.d subuid

Cấu hình Lsyncd để đồng bộ hóa các thư mục từ xa​

Trong phần này, chúng ta sẽ cấu hình Lsyncd để đồng bộ hóa thư mục /etc/ trên hệ thống cục bộ với thư mục /opt/ trên hệ thống từ xa.

Trước khi bắt đầu, bạn sẽ cần thiết lập xác thực dựa trên khóa SSH giữa hệ thống cục bộ và máy chủ từ xa để hệ thống cục bộ có thể kết nối với máy chủ từ xa mà không cần mật khẩu.

Trên hệ thống cục bộ, hãy chạy lệnh sau để tạo khóa công khai và khóa riêng tư:
Mã:
ssh-keygen -t rsa
Bạn sẽ thấy đầu ra sau:
Mã:
Tạo cặp khóa rsa công khai/riêng tư.Nhập tệp để lưu khóa (/root/.ssh/id_rsa):Nhập mật khẩu (để trống nếu không có mật khẩu):Nhập lại mật khẩu tương tự:Thông tin nhận dạng của bạn đã được lưu trong /root/.ssh/id_rsaKhóa công khai của bạn đã được lưu trong /root/.ssh/id_rsa.pubDấu vân tay khóa là:SHA256:c7fhjjhAamFjlk6OkKPhsphMnTZQFutWbr5FnQKSJjE root@ubuntu20Hình ảnh randomart của khóa là:+---[RSA 3072]----+| E .. || ooo || oo= + ||=.+ % o . . ||[emailprotected] oSo. o ||ooo=B o .o o o ||=o.... o o ||+. o .. o || . ... . |+----[SHA256]-----+
Lệnh trên sẽ tạo khóa riêng tư và khóa công khai bên trong thư mục ~/.ssh.

Tiếp theo, bạn sẽ cần sao chép khóa công khai vào máy chủ từ xa. Bạn có thể sao chép nó bằng lệnh sau:
Mã:
ssh-copy-id root@remote-server-ip
Bạn sẽ được yêu cầu cung cấp mật khẩu của người dùng root từ xa như hiển thị bên dưới:
Mã:
Mật khẩu của [emailprotected]:Số lượng khóa đã thêm: 1Bây giờ hãy thử đăng nhập vào máy, với: "ssh '[emailprotected]'"và kiểm tra để đảm bảo rằng chỉ có khóa bạn muốn được thêm vào.
Sau khi người dùng được xác thực, khóa công khai sẽ được thêm vào tệp authorized_keys của người dùng từ xa và kết nối sẽ bị đóng.

Bây giờ, bạn sẽ có thể đăng nhập vào máy chủ từ xa mà không cần nhập mật khẩu.

Để kiểm tra, chỉ cần thử đăng nhập vào máy chủ từ xa của bạn qua SSH:
Mã:
ssh root@remote-server-ip
Nếu mọi thứ diễn ra tốt đẹp, bạn sẽ được đăng nhập ngay lập tức.

Tiếp theo, bạn sẽ cần để chỉnh sửa tệp cấu hình Lsyncd và xác định các biến máy chủ rsyncssh và mục tiêu:
Mã:
nano /etc/lsyncd/lsyncd.conf.lua
Thay đổi tệp như hiển thị bên dưới:
Mã:
settings { logfile = "/var/log/lsyncd/lsyncd.log", statusFile = "/var/log/lsyncd/lsyncd.status", statusInterval = 20, nodaemon = false}sync { default.rsyncssh, source = "/etc/", host = "remote-server-ip", targetdir = "/opt"}
Lưu và đóng tệp khi bạn hoàn tất. Sau đó, khởi động lại dịch vụ Lsyncd để bắt đầu đồng bộ.
Mã:
systemctl restart lsyncd
Bạn có thể kiểm tra trạng thái đồng bộ hóa bằng lệnh sau:
Mã:
tail -f /var/log/lsyncd/lsyncd.log
Bạn sẽ thấy đầu ra sau:
Mã:
Thứ sáu, ngày 1 tháng 5 năm 2020 04:32:05 Bình thường: --- Khởi động, chạy daemon ---Thứ sáu, ngày 1 tháng 5 năm 2020 04:32:05 Bình thường: khởi động đệ quy rsync: /etc/ -> 45.58.38.21:/opt/Thứ sáu, ngày 1 tháng 5 năm 2020 04:32:06 Bình thường: Khởi động "/etc/" đã hoàn tất: 0
Bạn sẽ có thể thấy những thay đổi trong thư mục /opt trên máy chủ từ xa bằng lệnh sau:
Mã:
ls /opt
Bạn sẽ thấy rằng tất cả các tệp và thư mục từ thư mục /etc đều được thêm vào thư mục /opt của máy chủ từ xa:
Mã:
acpi dconf hosts logrotate.conf newt rc2.d subuid-adduser.conf debconf.conf hosts.allow logrotate.d nginx rc3.d sudoersalternatives debian_version hosts.deny lsb-release nsswitch.conf rc4.d sudoers.dapache2 default init lsyncd ntp.conf rc5.d sysctl.confapparmor deluser.conf init.d ltrace.conf openal rc6.d sysctl.dapparmor.d depmod.d initramfs-tools lvm opt rcS.d systemdapport dhcp inputrc machine-id os-release resolv.conf terminfoapt dnsmasq.d insserv.conf.d magic overlayroot.conf rmt timezoneat.deny docker iproute2 magic.mime PackageKit rpc tmpfiles.dbash.bashrc dpkg iscsi mailcap pam.conf rsyslog.conf ubuntu-advantagebash_completion e2scrub.conf vấn đề mailcap.order pam.d rsyslog.d ucf.confbash_completion.d environment vấn đề.net manpath.config passwd screenrc udevbindresvport.blacklist ethertypes kernel mdadm passwd- securetty ufwbinfmt.d phông chữ kernel-img.conf mime.types perl security update-managerbyobu fstab landscape mke2fs.conf php selinux update-motd.dca-certificates fuse.conf ldap modprobe.d pki sensors3.conf update-notifierca-certificates.conf fwupd ld.so.cache modules pm sensors.d vdpau_wrapper.cfgcalendar gai.conf ld.so.conf modules-load.d polkit-1 services vimconsole-setup groff ld.so.conf.d mtab pollinate shadow vmware-toolscron.d group legal multipath popularity-contest.conf shadow- vtrgbcron.daily group- letsencrypt multipath.conf profile shells vulkancron.hourly grub.d libaudit.conf mysql profile.d skel wgetrccron.monthly gshadow libnl-3 nanorc protocols sos.conf X11crontab gshadow- locale.alias netplan pulse ssh xattr.confcron.weekly gss locale.gen network python3 ssl xdgcryptsetup-initramfs hdparm.conf localtime networkd-dispatcher python3.8 subgid zsh_command_not_foundcrypttab host.conf logcheck NetworkManager rc0.d subgid-dbus-1 hostname login.defs networks rc1.d subuid

Kết luận​

Trong hướng dẫn trên, chúng ta đã tìm hiểu cách cài đặt và cấu hình Lsyncd để đồng bộ hóa cục bộ và đồng bộ hóa từ xa. Bây giờ bạn có thể sử dụng Lsyncd trong môi trường sản xuất cho mục đích sao lưu. Hãy thoải mái hỏi tôi nếu bạn có bất kỳ câu hỏi nào.
 
Back
Bên trên