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/ [email protected]:/opt/test/

2)作为客户端,拉取远程rsync服务test模块监控目录下的文件到本机的/opt/backup/test目录下,实例如下:

/usr/bin/rsync --port=8100 -avz --delete --password-file=/opt/rsync.pass [email protected]::test /opt/backup/test/

3)作为服务端(服务的搭建见下文),接收远程主机推送其/opt/source/test目录下的文件至test模块监控的目录下,实例如下:

/usr/bin/rsync -avz --delete /opt/source/test/ --port=8100 [email protected]::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<

主机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主机的双向实时同步。

你可能感兴趣的:(运维,linux)