rsync + inotify 实现实时同步
rsync 简介
Rsync是一款开源的、快速的、多功能的、可实现全量及增量的本地或远程数据同步备份的优秀工具。并且可以不进行改变原有数据的属性信息,实现数据的备份迁移特性。Rsync软件适用于unix/linux/windows等多种操作系统平台。
Rsync是一个快速和非常通用的文件复制工具。它能本地复制,远程复制,或者远程守护进程方式复制。它提供了大量的参数来控制其行为的各个方面,并且允许非常灵活的方式来实现文件的传输复制。它以其delta-transfer算法闻名。
rsync监听端口:873
rsync运行模式:C/S
#安装 rsync
[root@localhost ~]# yum -y install rsync
1.rsync 三种模式
本地模式
1.单文件数据同步
[root@localhost ~]# rsync /etc/hosts /opt
2.目录同步
[root@localhost ~]#rsync -avz /opt/ /mut ("/" 代表目录下所有文件,不包括目录本身)
3.--delete同步
[root@localhost ~]# rsync -avz /opt/ /mnt --delete (会将opt目录下的文件和mnt目录对比,会将mnt目录中opt不存在的文件删除,)
远程模式
1.[root@localhost ~]# rsync -avz --bwlimit=100 --delete /backup/ 172.16.1.12:/backup
#--bwlimit (限速)
守护进程模式
#服务端设置
[root@localhost ~]#cat cat intify.sh
uid = rsync
gid = rsync
use chroot = no (一个安全机制)
max connections = 200 (最大支持200个客户端向我推送)
timeout = 300 (如果300毫秒都没给我推送我就放弃他)
pid file = /var/run/rsyncd.pid (pid 文件的位置,每个进程都有一个保存了pid号的文件)
lock file = /var/run/rsync.lock (进程锁 ,如果有多个客户端同时向我推送,按照先后顺序一个一个来晚来的锁住排队)
log file = /var/log/rsyncd.log (程序日志的位置)
[ backup ]
path = /backup (接受到数据保存在这个路径下)
ignore errors (如果出现错误 忽略)
read only = false (权限 只读是否,可以读写)
list = false (禁止客户端以远程列表的方式查看我备份服务器上的东西)
hosts allow = 192.168.100.0/24 (允许这个网段的客户端的推送)
hosts deny = 0.0.0.0/32 (拒绝谁推送)
auth users = rsync_backup (虚拟用户 为了做验证的)
secrets file = /etc/rsync.password (rsync认可账号密码存放路径)
#创建程序用户,创建密码
[root@localhost ~]#useradd -< -s /sbin/nologin rsync
[root@localhost ~]#mkdir /backup
[root@localhost ~]#chown rsync /backup
[root@localhost ~]#echo "rsync_backup:123123" > /etc/rsync.password ; chomd 600 /etc/rsync.password
#客户端设置
[root@localhost ~]#echo "rsync_backup:123123" > /etc/rsync.password;chomd 600 /etc/rsync.password
#客户端推送
[root@localhost ~]#rsync -avz /backup/ rsync_backup@192.168.100.1::backup --password-file=/etc/rsync.password
# ::backup 表示服务端配置文件所设置的模块,进行引用
# --password-file (密码本存放路径)
详细命令
-a #归档模式传输, 等于-tropgDl
-v #详细模式输出, 打印速率, 文件数量等
-z #传输时进行压缩以提高效率
-r #递归传输目录及子目录,即目录下得所有目录都同样传输。
-t #保持文件时间信息
-o #保持文件属主信息
-p #保持文件权限
-g #保持文件属组信息
-l #保留软连接
-P #显示同步的过程及传输时的进度等信息
-D #保持设备文件信息
-L #保留软连接指向的目标文件
-e #使用的信道协议,指定替代 rsh 的 shell 程序
--exclude=PATTERN #指定排除不需要传输的文件模式
--exclude-from=file #文件名所在的目录文件
--bwlimit=100 #限速传输
--partial #断点续传
--delete #让目标目录和源目录数据保持一致
inotfy 简介
Inotify 是一种强大的、异步的文件系统事件监控机制,通过Inotify可以监控文件系统中添加、删除,修改、移动等各种细微事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况
详细参数
-r #递归查询目录
-q #打印很少的信息,仅仅打印监控时间的信息
-m #始终保持事件监听状态
--exclude #排除文件或者目录时,不许分大小写
--format #打印使用指定的输出类似格式字符串
-e #通过此参数可以指定需要监控的时间,如下一个列表所示
access #文件或者目录被读取
modify #文件或者目录内容被修改
attrib #文件或者目录属性被改变
close #文件或者目录封闭,无论读写模式
open #文件或者目录被打开
moved_to #文件或者目录被移动到另一个目录
move #文件或者目录被移动到里一个目录或者从一个目录移动到当前目录
create #文件或者目录被创建到当前目录
umount #文件系统被卸载
delete #文件或者目录被删除--timefmt 指定时间输出的格式
安装
[root@localhost ~]#yum -y install epel-release
[root@localhost ~]#yum -y install inotify-tools
两台主机同步
ip | service |
---|---|
192.168.100.150 | rsync service |
192.168.100.151 | rsync client+inotify |
192.168.100.150 操作 |
[root@localhost ~]#systemctl stop firewalld
[root@localhost ~]#systemctl stop NetworkManager
[root@localhost ~]#systemctl disable firewalld
[root@localhost ~]#systemctl disable NetworkManager
[root@localhost ~]#yum -y install rsync
[root@localhost ~]#vim /etc/rsyncd.conf
uid= root
gid= root
use chroot = no
max connections = 10
strict modes = yes
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
[data]
path = /backup #备份路径
comment = my data #给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户。默认没有描述定义
ignore errors #跳过错误
read only = no #读
write only = no #写
hosts allow = 192.168.2.7 #备份源ip
list = false
auth users = rsync_user #用户
secrets file = /etc/rsync.password #密码路径
#创建认证用户密码文件,修改文件权限
[root@localhost ~]#echo "rsync_user:123456" > /etc/rsync.password
[root@localhost ~]#chmod 600 /etc/rsync.password
#创建备份目录
[root@localhost ~]#mkdir /backup
#开机自启动
[root@localhost ~]#systemctl start rsyncd
[root@localhost ~]#systemctl enable resyncd
#检查端口
[root@localhost ~]#ss -lntp | grep 873
192.168.100.151 操作
[root@localhost ~]#yum -y install epel-release
[root@localhost ~]#yum -y install inotify-tools rsync
#创建密码文件
[root@localhost ~]#echo "123456" > /etc/rsync.password
[root@localhost ~]#chmod 600 /etc/rsync.password
#编辑监控脚本
[root@localhost ~]#cat intify.sh
#!/bin/bash
ip=192.168.100.150 #备份端ip
src=/data #数据目录
dst=data #模块名
user=rsync_user #用户
/usr/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f' -e modify,delete,create,attrib ${src} | while read file
do
rsync -vzrtopg --delete --progress $src $user@$ip::$dst --password-file=/etc/rsync.password > /dev/null && echo "$src was rsyncd"
done
#创建备份目录
[root@localhost ~]#mkdir /data
[root@localhost ~]#sh inotify.sh
#创建文件查看备份端是否同步
[root@localhost ~]#mkdir -P /data/wangyulong
[root@localhost ~]#touch /data/1111
[root@localhost ~]#touch /data/2222