实战经验分享,一招教你Linux下实时同步

316人浏览   2024-05-17 14:36:02

在程序员的日常场景中经常会经常碰到文件共享同步的问题,比如:

  • 集群,提供高可用服务(需要网站代码或者目录实时同步,保证数据的一致性)
  • 迁移数据 (实时增量传输)
  • 文件备份(实时将数据备份到其他设备,防止数据丢失)

今天跟大家分享一下针对以上场景实现在 Linux 系统下实现文件实时同步

黄金搭配:Rsync + Inotify

1. Rsync

Rsync 是 Linux 系统下的数据镜像备份工具,使用快速增量备份工具 Remote Sync 可以远程同步,支持本地复制,或者与其他SSH、Rsync 主机同步

1.1 Server端配置

环境介绍

操作系统:CentOS 6.8 rsync: rsync-3.0.6 (yum 源默认安装)

安装方式

sudo apt-get install rsync #debian、ubuntu 等在线安装方法;
yum install rsync #Fedora、Redhat 等在线安装方法;
rpm -ivh rsync # Fedora、Redhat 等rpm包安装方法;
rpm -qa | grep rsync # 查看安装的版本

配置

创建相关配置目录和文件

mkdir -p /etc/rsync.d # rsync 配置文件目录,默认没有
touch /etc/rsync.d/rsyncd.conf # rsync服务端配置文件
touch /etc/rsync.d/rsyncd.pass # 客户端拉取文件时使用的用户密码
chmod 600 /etc/rsync.d/rsyncd.conf
chmod 600 /etc/rsync.d/rsyncd.pass

编写主配置文件 rsyncd.conf

vim /etc/rsync.d/rsyncd.conf

(以下是配置文件)

log file=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
motd file = /etc/rsyncd/rsyncd.motd
uid=root
gid=root
max connections=5
hosts allow=192.168.1.167 # 允许访问的IP地址,我这里填写的是测试的客户端地址
hosts deny=*
secrets file = /etc/rsync.d/rsyncd.pass
log = /var/log/rsyncd.log l
og format = %t %a %m %f %b
syslog facility = local3 timeout = 300
[handbook]
path=/handbook/
comment= handbook
test auth users=rsync

编写用户认证文件

vim /etc/rsync.d/rsyncd.pass

输入以下内容:

rsync:cloudcare

启动服务

rsync --daemon --config=/etc/rsync.d/rsyncd.conf

确认服务启动

ps -ef | grep rsync
netstat -nltp | grep 7589
注:rsync 服务默认端口是 873

1.2 Rsync客户端

客户端配置很简单,只需要安装 rsync 工具即可

安装方式

sudo apt-get install rsync # debian、ubuntu 等在线安装方法;
yum install rsync # Fedora、Redhat 等在线安装方法;
rpm -ivh rsync # Fedora、Redhat 等rpm包安装方法;
rpm -qa | grep rsync # 查看安装的版本

验证

示例: 将192.168.1.176 服务器上的 handbook (这里是定义的项目名称,可以参考rsync server 端的配置)项目同步到 192.168.1.167 的 /tmp 下

rsync -avzP rsync@192.168.1.176::handbook /tmp
说明: -a 参数,相当于-rlptgoD,-r 是递归 -l 是链接文件,意思是拷贝链接文件;-p 表示保持文件原有权限;-t 保持文件原有时间;-g 保持文件原有用户组;-o 保持文件原有属主;-D 相当于块设备文件; -z 传输时压缩; -P 传输进度; -v 传输时的进度等信息

如果想每隔一段时间同步一次,可以配合 crontab 来实现;但是如果想实时同步,那就需要用到 inotify 工具了。

2.Inotify

Inotify 是 Linux 核心子系统之一,做为文件系统的附加功能,它可监控文件系统并将异动通知应用程序。摘自维基百科 可以配合Rsync 做实时同步,Inotify 通过监控文件的变化,然后触发同步脚本,实现实时同步。

实现的原理:


实验目的

将 192.168.1.167 的 /handbook 目录下的内容实时同步到 192.168.1.176 定义的 “handbook” 目录下(实验环境依旧采用上面的老环境)

拓扑环境

安装

yum install -y inotify-tools
注:inotify 其实不需要任何的配置,安装好之后默认有两个命令;inotifywait : 在被监控的文件或目录上等待特定文件系统事件(open close delete等)发生inotifywatch :收集被监控的文件系统使用的统计数据,指文件系统事件发生的次数统计

使用

检测创建事件

inotifywait -mrq /handbook/ cd /handbook/ touch 1

检测删除事件

inotifywait -mrq /handbook --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事 件 息: %e" -e delete cd /handbook/ rm -rf 1 4

编写实时同步脚本

more rsync-handbook.sh

#!/bin/bash
inotifywait -mrq /handbook/ --format "%w%f" -e create,delete,moved_to,close_write | while read line do rsync -az /handbook/ rsync@192.168.1.176::handbook --password-file=/root/handbook.pw done
注: 其中--password-file 是指定 “handbook” 模块认用户认证的密码文件

验证


相关推荐