镜像解决方案 - lsyncd
先决条件¶
- 运行 Rocky Linux 的计算机
- 能够从命令行修改配置文件
- 了解如何使用命令行编辑器(此处使用
vi
,但可以使用你喜欢的编辑器) - 你需要 root 权限或
sudo
权限(从一开始使用sudo -s
是个好主意) - 公钥和私钥 SSH 密钥对
- 来自 Fedora 的 EPEL(企业 Linux 附加软件包)存储库
- 你需要熟悉 *inotify*,这是一个事件监控接口
- 可选:熟悉 *tail*
介绍¶
如果你想自动同步计算机之间的文件和文件夹,lsyncd
是一个不错的选择。但是,你必须从命令行配置所有内容。
对于任何系统管理员来说,这是一个值得学习的程序。
lsyncd
最好的描述来自它的手册页。稍微改写一下,lsyncd
是一个轻量级的实时镜像解决方案,安装起来并不难。它不需要新的文件系统或块设备,也不会影响本地文件系统性能。简而言之,它会镜像文件。
lsyncd
会监视本地目录树的事件监控接口 (inotify)。它会聚合和合并事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下,这是 rsync
。
对于本指南,你将把具有原始文件的系统称为“源”;你与之同步的系统将被称为“目标”。使用 lsyncd
,你可以通过仔细指定要同步的目录和文件来完全镜像服务器。
你还需要设置 Rocky Linux SSH 公钥和私钥对 用于远程同步。这里的示例使用 SSH(端口 22)。
安装 lsyncd
¶
安装 lsyncd
有两种方法。下面包括对每种方法的描述。RPM 往往比源代码包落后一点,但只是落后一点。在撰写本文时,RPM 方法安装的版本为 2.2.3-5,而源代码版本现在为 2.3.1。选择你最熟悉的方法。
安装 lsyncd
- RPM 方法¶
安装 RPM 版本很简单。你只需要先安装 Fedora 的 EPEL 软件库。使用以下命令进行操作
dnf install -y epel-release
现在安装 lsyncd
以及任何缺少的依赖项
dnf install lsyncd
设置服务在启动时启动,但现在不要启动它
systemctl enable lsyncd
安装 lsyncd
- 源代码方法¶
从源代码安装并不困难。
安装依赖项¶
你需要一些 lsyncd
的依赖项,以及从源代码构建软件包的依赖项。在你的 Rocky Linux 计算机上使用以下命令来确保你有必要的依赖项。如果你要从源代码构建,最好安装所有开发工具
dnf groupinstall 'Development Tools'
对于 Rocky Linux 9.0
lsyncd
已在 Rocky Linux 9.0 中经过充分测试,并且可以正常工作。但是,要安装所有必需的依赖项,你需要启用一个额外的存储库
dnf config-manager --enable crb
在执行以下步骤之前执行这九个步骤将允许你完成构建而无需回溯。
以下是 lsyncd
所需的依赖项
dnf install lua lua-libs lua-devel cmake unzip wget rsync
下载 lsyncd
并构建¶
接下来,你需要源代码
wget https://github.com/axkibe/lsyncd/archive/master.zip
解压缩 master.zip
文件
unzip master.zip
这将创建一个名为“lsyncd-master”的目录。你需要切换到这个目录并创建一个名为 build 的目录
cd lsyncd-master
然后
mkdir build
切换目录以访问 build 目录
cd build
运行以下命令
cmake ..
make
make install
完成后,你将安装 lsyncd
二进制文件,它可以随时在 * /usr/local/bin* 中使用
lsyncd
systemd 服务¶
使用 RPM 安装方法,systemd 服务将为你安装,但如果你从源代码安装,你需要创建 systemd 服务。虽然你可以在没有 systemd 服务的情况下启动二进制文件,但你需要确保它在启动时*确实*启动。如果没有,服务器重启将停止你的同步工作。如果你忘记手动启动它,那将是一个问题!
创建 systemd 服务相对容易,从长远来看会节省你的时间。
创建 lsyncd
服务文件¶
你可以在任何地方创建此文件,甚至在服务器的根目录中。创建完成后,你可以将其移动到正确的位置。
vi /root/lsyncd.service`
此文件的内容将是
[Unit]
Description=Live Syncing (Mirror) Daemon
After=network.target
[Service]
Restart=always
Type=simple
Nice=19
ExecStart=/usr/local/bin/lsyncd -nodaemon -pidfile /run/lsyncd.pid /etc/lsyncd.conf
ExecReload=/bin/kill -HUP $MAINPID
PIDFile=/run/lsyncd.pid
[Install]
WantedBy=multi-user.target
将你刚刚创建的文件安装到正确的位置
install -Dm0644 /root/lsyncd.service /usr/lib/systemd/system/lsyncd.service
最后,重新加载 systemctl
守护进程,以便 systemd 可以“看到”新的服务文件
systemctl daemon-reload
lsyncd
配置¶
无论使用哪种 lsyncd
安装方法,你都需要一个配置文件:* /etc/lsyncd.conf*。以下部分将告诉你如何构建和测试配置文件。
用于测试的示例配置¶
以下是一个将 * /home* 同步到另一台计算机的简单配置示例。我们的目标计算机将是一个本地 IP 地址:*192.168.1.40*
settings {
logfile = "/var/log/lsyncd.log",
statusFile = "/var/log/lsyncd-status.log",
statusInterval = 20,
maxProcesses = 1
}
sync {
default.rsyncssh,
source="/home",
host="root@192.168.1.40",
excludeFrom="/etc/lsyncd.exclude",
targetdir="/home",
rsync = {
archive = true,
compress = false,
whole_file = false
},
ssh = {
port = 22
}
}
分解一下这个文件
logfile
和statusFile
在服务启动时会自动创建statusInterval
是写入状态文件前等待的秒数。maxProcesses
是允许生成的lsyncd
进程数量。 除非您在繁忙的计算机上运行它,否则一个进程就足够了。- 在同步部分,
default.rsyncssh
表示使用rsync
通过 SSH 进行同步。 source=
是您要从其同步的目录路径。host=
是您要同步到的目标计算机。excludeFrom=
告诉lsyncd
排除文件在哪里。 它必须存在,但可以为空。targetdir=
是您发送文件的目录。 这通常等于源目录,但有时不等于。rsync =
部分,以及您运行rsync
所用的选项。ssh =
部分,指定目标计算机上监听的 SSH 端口。
如果您添加多个目录进行同步,则必须重复整个 "sync" 部分,包括每个目录的所有开始和结束括号。
lsyncd.exclude 文件¶
如前所述,excludeFrom
文件必须存在。 现在创建它。
touch /etc/lsyncd.exclude
例如,如果您正在同步计算机上的 /etc
文件夹,那么在 lsyncd
进程中您可能要排除许多文件和目录。 每个被排除的文件或目录都在文件中,每行一个。
/etc/hostname
/etc/hosts
/etc/networks
/etc/fstab
测试和启动¶
完成所有设置后,您可以测试它。 确保我们的 systemd lsyncd.service
将启动。
systemctl start lsyncd
如果执行此命令后没有出现错误,请检查服务的状况,以确保一切正常。
systemctl status lsyncd
如果显示服务正在运行,请使用 tail 查看两个日志文件的末尾,并确保所有内容都正常显示。
tail /var/log/lsyncd.log
tail /var/log/lsyncd-status.log
假设所有内容看起来都正确,请导航到 /home/[user]
目录(其中 [user]
是一个计算机用户),并在其中使用 touch 创建一个文件。
touch /home/[user]/testfile
转到目标计算机,查看该文件是否出现。 如果是,则说明一切正常。 使用以下命令将 lsyncd.service
设置为开机启动:
systemctl enable lsyncd
请记住要小心¶
在将一组文件或目录同步到另一台计算机时,请仔细考虑其对目标计算机的影响。 假设您返回到我们上面示例中的 **The lsyncd.exclude File**,您能想象如果您没有排除 /etc/fstab 会发生什么吗?
fstab
是配置任何 Linux 计算机上的存储驱动器的文件。 磁盘和标签在不同的机器上几乎肯定是不一样的。 目标计算机的下一次重启可能会失败。
结论和参考资料¶
lsyncd
是一个功能强大的工具,用于在计算机之间进行目录同步。 正如您所见,它安装起来并不难,维护起来也不复杂。
您可以通过访问 官方网站 了解有关 lsyncd
的更多信息。
作者:Steven Spencer
贡献者:Ezequiel Bruni, tianci li, Ganna Zhyrnova