Sersync实时同步
# Sersync介绍
Sersync用于实时同步数据,它通过将inotify服务和rsync服务建立联系,实现实时同步数据的功能。
inotify用于监控存储服务器目录的数据的变化。
rsync用于数据发生变化则使用rsync进行传输。
# 部署方法
# 部署rsync服务
参考往期Rsync文章。
服务端配置:配置文件、备份目录、用户密码文件
客户端配置:备份目录、密码文件
# 部署inotify监控服务
# 需要安装epel源
yum install -y inotify-tools
1
2
2
inotifywait命令用于监控目录数据信息变化。
inotifywatch命令用于对监控的的变化信息进行统计,没什么用。
# 部署sersync服务
首先要确保inotify服务和rsync服务已经部署完成。
# 创建放置软件包的目录,如:/data/tools
# 下载部署sersync软件:https://github.com/wsgzao/sersync
# 解压压缩包,进行部署
# 将解压的软件移动到/usr/local目录
# 编写sersync配置文件
# 添加文件路径到PATH环境变量或创建软链接到PATH中的目录
# 添加命令可执行权限
# 执行sersync命令,默认会使用无差异同步--delete
sersync -dro /usr/local/sersync/confxml.xml
# 设为开机自动启动,命令添加到rc.local文件中,并使rc.local源文件拥有执行权限
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# inotifywait命令
用于监控目录数据信息变化。
inotifywait [参数] [监控的目录]
-m 持续监控目录的数据变化
-r 进行递归监控目录下的子目录下...
-q 尽量减少信息的输出
--format '[格式]' 指定输出信息的格式
- %T 代表时间信息
- %w 代表目录信息
- %f 代表文件名信息
- %e 代表事件信息
--timefmt '[格式]' 指定输出的时间信息的格式
- 如%F、%T等
-e 仅监控指定的事件
- 一般监控CREATE、DELETE、MOVED_TO、CLOSE_WRITE事件
- 指定多个可 -e "CREATE,DELETE......"
-d 后台运行,需要指定 –outfile
-o 输出事情到一个文件而不是标准输出
监控事件说明,可用来看文件操作命令的执行原理。
- ACCESS - 读取文件内容
- MODIFY - 修改文件内容
- ATTRIB - 修改文件属性
- OPEN - 打开文件
- CLOSE - 关闭文件
- CLOSE_WRITE - 保存并关闭文件
- CLOSE_NOWRITE - 不保存并关闭文件
- CREATE - 创建文件
- DELETE - 删除文件
- MOVED - 文件被移动
- MOVED_FROM - 文件或目录被移入到目录的源文件
- MOVED_TO - 文件或目录被移动到目录的目标文件
- ISDIR - 操作对象是目录
# 事件监控的企业应用
防止系统重要文件被破坏,使用inotify监控一些重要的目录,如/etc、/var/spool/cron/root
等,并将inotify的屏幕信息输出到文件中。
# Sersync命令
# sersync [参数]
-d 启用守护进程模式
-r 服务启动时立即同步一次
- 确保监控时 监控目录与远程主机数据一致
- 测试是否可以正常同步
-o 指定配置文件 默认是confxml.xml文件
可编写多个配置文件 来实时同步多个目录
sersync启动后默认没有停止命令,我们可以安装psmisc软件包,然后使用killall sersync终止进程。
# sersync配置文件
- 软件目录内 confxml.xml 文件
# 排除指定数据不进行实时传输同步 # true开启 false关闭 <filter start="false"> # 排除.gz结尾的文件 <exclude expression="(.*)\.gz"></exclude> </filter> # 定义inotify监控的事件 <inotify> <delete start="true"/> ... ... <modify start="false"/> </inotify> # 定义rsync同步的参数 # 指定监控实时同步的目录rsync时默认会加上./同等于/data/ <localpath watch="/data"> # 备份服务器的地址 和 模块信息 <remote ip="127.0.0.1" name="tongbu1"/> # 指定其他多台服务器 <!--<remote ip="192.168.8.39" name="tongbu"/>--> # 指定rsync命令参数 <commonParams params="-az"/> # 指定是否开启认证用户 指定认证用户名 指定认证密码文件 <auth start="true" users="root" passwordfile="/etc/rsync.pas"/> # 是否指定端口 指定的端口号 <userDefinedPort start="false" port="874"/><!-- port=874 --> # 如果没有数据传输 多久断开 <timeout start="false" time="100"/><!-- timeout=100 -->
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29