Rsync文件同步与inotify实现文件同步功能

Rsync文件同步与inotify实现文件同步功能

Rsync
  1. rsync是linux系统下的数据镜像备份工具。使用快速增量备份工具Remote Sync可以远程同步,支持本地复制,或者与其他SSH、rsync主机同步。
  2.  # 使用的参数说明:
     v: 显示详细信息
     z: 传输过程中对数据进行压缩
     r: 递归
     t: 保留修改时间属性
     o: 保留文件所有者属性
     p: 保留文件权限属性
     g: 保留文件所属组属性
     a: 归档模式,主要保留文件属性,等同于-rlptgoD
     --progress: 显示数据传输的进度信息
     --password-file=FILE: 指定密码文件,将密码写入文件,实现非交互式数据同步,这个文件名也需要修改权限为600
     --delete: 删除那些仅在目标路径中存在的文件(源路径中不存在),在脚本中的数据同步经常加上此参数
     --list-only: 仅列出服务器模块列表,需要rsync服务器设置list=true
    
  3. rsync -e "ssh -p22" -avz --delete ./ root@11.22.33.44:/tmp 使用rsync将当前目录下的内容同步到远程服务器11.22.33.44的tmp目录下,并且删除远程服务器上在本地没有的文件,-a 归档模式,主要保留文件属性,等同于-rlptgoD;-v 能显示详细步骤;-z 表示在传输过程中压缩;-e 表示指定要使用的远程shell。
  4. rsync -avz --delete ./ root@11.22.33.44:/tmp 上面命令的精简

Rsync 虚拟账户登录同步文件

该模式需要在服务端安装rsync

1. 服务端Rsync
  1. yum -y install rsync 在服务端安装rsync
  2. 编辑/etc/rsyncd.conf
    # 设置服务器信息提示文件,在该文件中编写提示信息
    motd file = /etc/rsync/rsyncd.motd
    # 开启rsync数据传输日志功能
    transfer logging = yes
    # 设置日志文件名,可通过log format参数设置日志格式
    log file = /var/log/rsyncd.log
    # 设置rsync进程号保存文件名称
    pid file = /var/run/rsyncd.log
    # 设置锁文件名称
    lock file = /var/run/rsync.lock
    # 设置服务器监听的端口号,默认是873
    port = 873
    # 设置本服务器所监听网卡接口的ip地址
    address = 0.0.0.0
    # 设置进行数据传输时所使用的帐户名或ID号,默认使用nobody
    uid = root
    # 设置进行数据传输时所使用的组名或GID号,默认使用nobody
    gid = root
    # 若为yes, rsync会首先进行chroot设置,将根映射在下面的path参数路径下,对客户端而言,系统的根就是path参数指定的路径。但这样做需要root权限,并且在同步符号连接资料时只会同步名称,不会同步内容。
    use chroot = no
    # 是否允许客户端上传数据,yes表示不允许
    read only = no
    # 设置并发连接数,0表示无限制
    max connections = 50
    
    [common]
    # 自定义模块名,rsync通过模块定义同步的目录,可定义多个
    # 定义注释说明字串
    comment = web content
    # 同步目录的真是路径通过path指定
    path = /home/www/composer
    # 忽略一些IO错误
    ignore errors
    # exclude指定common目录下某个目录可以不同步数据
    # exclude = test/
    # 设置允许连接服务器的账户,此账户可以是系统中不存在的用户
    auth users = rsync
    # 密码验证文件名,该文件权限要求为只读,建议为600,仅在设置auth users后有效
    secrets file = /etc/rsync/rsyncd.secrets
    # 设置哪些主机可以同步数据,多ip和网段之间使用空格分隔
    # hosts allow = 11.22.33.44
    # 除了hosts allow定义的主机外,拒绝其他所有
    # hosts deny=*
    # 客户端请求显示模块列表时,本模块名称是否显示,默认为true
    list = false
    
  3. 在命令行执行
    echo "tom:123" > /etc/rsync/rsyncd.secrets
    chmod 600 /etc/rsync/rsyncd.secrets
    echo "welcome to access" > /etc/rsync/rsyncd.motd  #此项客户端不需要做
    rsync --daemon    # --daemon表示后台执行,客户端开启rsync不需要--daemon选项
    echo "/usr/bin/rsync --daemon" >> /etc/rc.local    #开机启动rsync服务
    
  4. 这项待定
    # groupadd --system --gid 102 rsync
    # useradd --system -g rsync --no-create-home --home /nonexistent --comment "rsync user" --shell /sbin/nologin --uid 102 rsync
    
  5. 开放873默认端口
2. 客户端Rsync
  1. yum -y install rsync 安装rsync
  2. 命令行执行
    echo "123456789" > /etc/rsyncd.secrets #客户端只需要把密码写入文件
    chmod 600 /etc/rsyncd.secrets
    
3. 执行同步操作
  1. rsync -avz --progress --password-file=/etc/rsyncd.secrets tom@11.22.33.44::common /tmp
    上面命令的含义为使用 /etc/rsyncd.secrets 里面设定的密码配置,使用tom虚拟账号(tom账号可以为linux系统中没有到账户),使用公共模块common,同步客户端 /tmp 下文件到服务端,具体到服务端什么地方,可以查看服务端配置。

inotify

  1. Inotify是一种强大的、细粒度的、异步的文件系统事件监控机制,linux内核从2.6.13起,加入了inotify支持,通过Inotify可以监控文件系统添加、删除、移动、修改等各种事件,利用这个内核接口,第三方软件就可以监控文件系统下文件的各种变化情况
  2. 安装 inotify-tools 该软件包共安装了两个工具(命令),即inotifywait和inotifywatch
  3. inotifywait:在被监控的文件或目录上等待特定文件系统事件(open、close、delete等)发生,执行后处于阻塞状态,适合在脚本中使用
  4. inotifywatch:收集被监视的文件系统使用度统计数据,指文件系统事件发生的次数统计
  5. inotifywait命令常用参数详解
    参数说明含义
    -r–recursive递归查询目录
    -q–quiet打印很少的信息,仅仅打印监控事件的信息
    -m–monitor始终保持事件监听状态
    –format打印使用指定的输出类似格式字符串
    –timefmt指定事件输出的格式
    -e–event通过此参数可以指定要监控的事件
    access文件或目录被读取
    modify文件或目录的内容被修改
    attrib文件或目录的属性被改变
    close文件或目录被封闭,无论读/写模式
    open文件或目录被打开
    move_to文件或目录被移动至另外一个目录
    move文件或目录被移动至另外一个目录或从另一个目录移动至当前目录
    create文件或目录被创建在当前目录
    delete文件或目录被删除
    umount文件系统被卸载
    在这里插入图片描述
  6. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e create /backup 监控/backup目录下文件的创建,新开一个窗口创建一个文件,返回原来窗口,查看反馈,如下
    监控文件创建
  7. inotifywait -mrq --timefmt '%d%m%y %H:%M' --format '%T %w%f' -e delete,close_write,modify /backup/ 同时测试create、modify、delete,效果如下
    测试create、modify、delete
  8. inotifywait -mrq --format '%w%f' -e create /backup 简化事件输出
    简化事件输出

rsync + inotify实时监控脚本,构建服务器文件同步工具

  1. 通过rsync文件同步工具和inotify文件监控工具,可以构建出一个实时监控文件改动的同步工具。
  2. 自动化脚本
    #!/bin/sh
    FILE=/data
    IP=11.22.33.44
    /usr/bin/inotifywait -mrq --format '%w%f' -e close_write,delete $
    FILE \
    | while read file
    do
    	cd $FILE &&\
    	rsync -az “$file” --delete rsync_backup@$IP::nfsbackup \
    	--password-file=/etc/rsync.password &
    done
    
  3. docker运行脚本
    #!/bin/bash
    
    if [ $# -eq 1 ]
    then
        # 第一个参数为本地同步路径
        LocalPath=${1}
    else
        echo "\033[5;34m Usage: \033[0m sh ${0} LocalPath" | grep "LocalPath" --color
        exit 0
    fi
    
    # rsync密码存放路径
    RsyncPass=/home/www/rsync
    
    (docker run -it --rm -v $LocalPath:/mnt decezz/inotify inotifywait -mrq --format '%w%f' -e create,modify,delete,attrib,move /mnt) | while read act_log
    do
        docker run -i --rm -v $RsyncPass:/tmp -v $LocalPath:/mnt decezz/app rsync -avz --progress --password-file=/tmp/rsyncd.secrets --delete /mnt/ rsync@11.22.33.44::common
    done
    
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值