作者:有些疯癫的小红帽 | 来源:互联网 | 2024-12-11 16:23
本文介绍了一种使用inotifywait和rsync工具在两台服务器之间实现自动且高效的文件同步方案。通过设置SSH无密码登录,安装必要的软件,并配置inotify以优化性能,最终构建了一个实时响应文件变动并自动同步至备份节点的系统。
为了实现从主服务器向备份服务器的数据同步,我们设计了如下的步骤:
- 首先,在主服务器a1上生成SSH密钥对,并将其公钥复制到备份服务器a2,以支持无密码登录。
ssh-keygen -t rsa # 在a1上执行
ssh-copy-id root@backup_ip # 将公钥发送给a2,其中backup_ip是a2的IP地址
- 接着,在a1上安装inotify工具,这通常需要从源代码编译:
tar zxvf inotify-tools-*.tar.gz
./configure
make && make install
- 为了提高inotify的性能,可以在a1上调整几个关键的内核参数:
echo 'fs.inotify.max_queued_events = 16384' >> /etc/sysctl.conf
echo 'fs.inotify.max_user_instances = 1024' >> /etc/sysctl.conf
echo 'fs.inotify.max_user_watches = 1048576' >> /etc/sysctl.conf
sysctl -p # 应用更改
- 选择或创建一个需要被监控的目录,例如:
mkdir /data/synced_folder # 在a1上创建一个名为synced_folder的目录
- 编写一个bash脚本来监控上述目录的变化,并使用rsync命令将更新推送到a2:
vi /root/auto_sync.sh
#!/bin/bash
MONITORED_DIR="/data/synced_folder"
BACKUP_SERVER="root@backup_ip:/remote/path"
inotifywait -mrq --format '%w%f' -e modify,create,delete $MONITORED_DIR | while read FILE;
do
rsync -avz --delete $MONITORED_DIR/ $BACKUP_SERVER
echo "File $FILE has been synchronized at $(date)" >> /var/log/sync.log
done
- 使脚本在后台持续运行:
nohup bash /root/auto_sync.sh &
- 最后,可以通过在a1的监控目录中创建或修改文件来测试整个流程是否工作正常。例如:
touch /data/synced_folder/testfile.txt
- 随后,检查a2上对应的目录,确认文件是否已被正确同步。