sersync+rsync实现文件自动同步
1、rsync介绍
rsync是类unix系统下的数据备份工具。其首先通过对数据文件进行块划分(通常512字节为一个数据块),然后计算每一个数据块的校验码(有两个校验码:一强一弱,弱校验码用来证明不同,强校验码用来证明相同),远程主机记录每次同步后各数据块的校验码,在下次同步时进行校验码的比较,依此来实现真正的增量备份。rsync的增量同步算法原理可参考下面这篇博客,里边有很详细的介绍。
rsync算法原理和工作流程分析 – 骏马金龙 – 博客园www.cnblogs.com/f-ck-need-u/p/7226781.html编辑
rsync有多种工作模式:
1)借用ssh推送或拉取文件(和scp的用法差不多),示例如下:
# 将本机/opt/test/目录下的所有内容同步至远程主机的/opt/test/目录下,但是rsync只支持向下创建一层目录 # 如果/opt/目录存在,则会在远程主机向下创建test目录,如果/opt/目录不存在,则会直接报错 rsync -av /opt/test/ root@192.168.10.1:/opt/test/
2)作为客户端,拉取远程rsync服务test模块监控目录下的文件到本机的/opt/backup/test目录下,实例如下:
/usr/bin/rsync --port=8100 -avz --delete --password-file=/opt/rsync.pass iparking@192.168.10.1::test /opt/backup/test/
3)作为服务端(服务的搭建见下文),接收远程主机推送其/opt/source/test目录下的文件至test模块监控的目录下,实例如下:
/usr/bin/rsync -avz --delete /opt/source/test/ --port=8100 iparking@192.168.10.1::test --password-file=/opt/rsync.pass
2、sersync介绍
sersync是借用inotify对文件系统的操作监控和rsync工具,实现文件的远程实时同步。
先简单介绍一下inotify,它是一个Linux的内核特性,通过inode实现对文件系统的监控,常见的事件监听类型有:
- access:读取文件或目录内容
- modify:修改文件或目录内容
- attrib:文件或目录的属性改变
- close_write:修改真实文件内容
- close_nowrite:文件或目录关闭,在只读模式打开之后关闭的
- close:文件或目录关闭,不管读或是写模式
- open:文件或目录被打开
- moved_to:文件或目录移动到
- moved_from:文件或目录从移动
- move:移动文件或目录移动到监视目录
- create:在监视目录下创建文件或目录
- delete:删除监视目录下的文件或目录
- delete_self:文件或目录被删除,目录本身被删除
检验Linux内核是否支持inotify,通过以下命令:
grep CONFIG_INOTIFY_USER /boot/config-xxx # 如果返回【CONFIG_INOTIFY_USER=y】,则代表支持inotify
sersync就是通过inotify机制实现对指定目录的实时监控,然后借用rsync客户端推送文件到指定的rsync服务端,实现文件的自动同步。
安装包下载地址:https://code.google.com/archive/p/sersync/downloads
3、实践操作
假设有A(192.168.10.1)、B(192.168.10.2)两台主机,A作为源文件存储主机,B作为备份主机。需要在B主机启动一个rsync服务,在A主机配置sersync。下面开始配置(均用root):
主机B配置(备份目录为/opt/backup_data,rsync服务根目录为/opt/rsync):
# 0、进入服务根目录,没有就创建 cd /opt/rsync # 1、将用户名和密码写入密码文件,该文件权限必须是600 echo abc:123456 > rsyncd.secrets chmod 600 rsyncd.secrets # 2、完善配置文件(可参考/etc/rsyncd.conf) cat >rsyncd.conf<<EOF #数据传输所使用的用户,普通用户启动时不用指定 uid = root #数据传输所使用的用户组,普通用户启动时不用指定 gid = root #若为yes,需要用root权限进行chroot设置,将根映射到path参数路径下 use chroot = no #并发连接数 max connections = 4 #进程号保存文件 pid file = /opt/rsync/rsyncd.pid #日志文件 log file = /opt/rsync/rsyncd.log #监听端口 port = 8100 #IP地址 address = 192.168.10.2 #是否允许客户端上传数据,yes表示不允许 read only = no #允许连接服务器的账户,即密码文件中的用户 auth users = abc #密码验证文件,仅在设置auth users后有效 secrets file = /opt/rsync/rsyncd.secrets #允许同步主机列表 hosts allow = 192.168.10.1 #拒绝列表 hosts deny = * [test] # test模块所监控的目录 path = /opt/backup_data EOF # 3、启动服务,可以查看8100端口是否启用判断服务是否启动成功 /usr/bin/rsync --daemon --config=/opt/rsync/rsyncd.conf
主机A配置(待同步目录为/opt/source_data,sersync服务根目录为/opt/sersync):
# 0、进入根目录,没有则创建
cd /opt/sersync
# 1、将至前下载的安装包解压至该目录(安装包中两个文件:sersync2和confxml.xml)
# 2、创建B主机rsync服务的密码文件,权限同样必须是600
echo 123456 > rsync.pass
chmod 600 rsync.pass
# 3、修改配置文件confxml.xml,替换标记内的内容如下
# 4、启动服务
/opt/sersync/sersync2 -r -d -o /opt/sersync/confxml.xml
至此,就可以实现当A主机/opt/source_data目录下的文件发生变化时,实时将变化同步至B主机的/opt/backup_data目录下。
同样,也可以在A主机搭建rsync服务,在B主机启动sersync,实现A、B主机的双向实时同步。
本文来自网络,不代表协通编程立场,如若转载,请注明出处:https://net2asp.com/eaf142be22.html
