zoukankan      html  css  js  c++  java
  • linux文件实时同步

    参考博客:https://www.cnblogs.com/MacoLee/p/5633650.html

    一、文件同步很简单
    服务端:被动的接收传输过来的数据
    客户端:主动提供数据给服务端
    安装思路:服务端和客户端都需要安装rsync软件。因为我这里理解的客户端是提供数据给服务端,所以客户端需要实时监测文件的变动,这里的客户端需要安装inotify软件。
    安装演示思路:这里按照常规的思路。在服务端安装完rsync软件后,编辑相关的配置文件,并启动rsync。在客户端安装完rsync软件后,不做任何操作,只需要执行相关的同步命令即可。
    二、安装rsync软件
    1、两种安装方式:(1)、直接使用yum命令安装(本人采用)
    yum -y install rsync
    (2)、使用编译安装

    [root@www ~]# cd /usr/local/src/
    [root@www src]# wget http://rsync.samba.org/ftp/rsync/src/rsync-3.0.9.tar.gz 
    [root@www src]# tar zxvf rsync-3.0.9.tar.gz 
    [root@www src]# cd rsync-3.0.9
    [root@www rsync-3.0.9]# ./configure --prefix=/usr/local/rsync
    [root@www rsync-3.0.9]# make
    [root@www rsync-3.0.9]# make install

    2、设置密码认证文件和配置文件
    (1)、建立用户和密码认证文件(编译安装时的位置)
    (只在服务端做配置文件的修改)

    [root@www rsync-3.0.9]# echo "web:123" > /usr/local/rsync/rsyncd.passwd

    (只在客户端做配置文件的修改)

    [root@www rsync-3.0.9]# echo "123" > /usr/local/rsync/rsync.passwd

    设置权限为只读

    [root@www rsync-3.0.9]# cd /usr/local/rsync
    [root@www rsync]# chmod 600 rsyncd.passwd

    (2)、建立rsync配置文件(只在服务端做配置文件的修改)
    安装方式不同引发的配置文件区别:
    <1>、直接使用yum命令安装时

    [root@www rsync]# vi /etc/rsyncd.conf
    # /etc/rsyncd: configuration file for rsync daemon mode
    # See rsyncd.conf man page for more options.
    uid = root
    gid = root
    use chroot = no
    max connections = 200
    timeout = 1000
    transfer logging = yes
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsyncd.lock
    log file = /var/log/rsyncd.log
    log format = %t %a %m %f %b
    port = 873
    ignore errors
    #read only = yes
    #address = 192.168.248.136
    
    [web]
    path = /home
    read only = false
    write only = yes
    hosts allow = 192.168.248.138 192.168.248.136
    hosts deny = *
    list = false
    auth users = web
    secrets file = /usr/local/rsync/rsyncd.passwd
    #read only = yes
    #exclude = test/ #不同步的目录

    <2>、使用编译安装(举例)

    [root@www rsync]# vi /usr/local/rsync/rsyncd.conf
    uid = root
    gid = root
    use chroot = no
    max connections = 4
    strict modes = yes
    hosts allow = 192.168.1.101 #可以空格,允许多个
    port = 873
    pid file = /var/run/rsyncd.pid
    lock file = /var/run/rsync.lock
    log file = /var/log/rsyncd.log
    
    [test]
    path = /home/test
    ignore errors
    read only = false
    list = false
    auth users = backup
    secrets file = /usr/local/rsync/rsyncd.passwd

    PS:注意这里要将read only 修改为 false, 因为是要将文件同步到该模块的,必须可写

    (3)、以守护进程方式启动rsync服务器(客户端不需要启动,就是没有修改配置文件的客户端)
    <1>、使用yum命令安装时

    rsync --daemon

    <2>、使用编译安装时

    rsync --daemon --config=/usr/local/rsync/rsyncd.conf

    (4)、加入开机自启动

    echo "/usr/local/rsync/bin/rsync --daemon --config=/usr/local/rsync/rsyncd.conf" >> /etc/rc.local

    三、安装inotify软件
    在客户端(就是要监测文件变化的那端)安装inotify。
    (1)、验证rsync是否安装成功
    举例1:客户端上执行,客户端向服务端复制文件

    /usr/bin/rsync -vzrtopg --progress --password-file=/etc/web.passwd /home/fan web@192.168.248.136::web

    举例2:客户端上执行,服务端向客户端复制文件

    [root@www rsync]# rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsync.passwd backup@192.168.1.102::test /home/test

    (2)、安装inotify

    [root@www rsync]# cd /usr/local/src/
    [root@www src]# wget http://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz 
    [root@www src]# tar zxvf inotify-tools-3.14.tar.gz 
    [root@www src]# cd inotify-tools-3.14 
    [root@www inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify 
    [root@www inotify-tools-3.14]# make 
    [root@www inotify-tools-3.14]# make install 

    (3)、创建rsync复制脚本
    此项功能主要是将客户端的目录/home/fan/里的内容,如果修改了(无论是添加、修改、删除文件)能够通过inotify监控到,并通过rsync实时的同步给服务端的/home里,下面是通过shell脚本实现的。

    #!/bin/bash
    host=192.168.248.136
    src=/home/fan
    des=web
    user=web
    
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e modify,delete,create,attrib $src | while read files 
    do
    /usr/bin/rsync -vzrtopg --progress --delete --password-file=/etc/web.passwd $src $user@$host::$des
    echo "${files} was rsynced" >>/data/logs/rsync.log 2>&1
    done

    其中host是client的ip,src是客户端要实时监控的目录,des是认证的模块名,需要与client一致,user是建立密码文件里的认证用户。

    运行脚本

    [root@www rsync]# sh /tmp/rsync.sh & 

    把rsync.sh脚本加入到开机启动项里

    [root@www rsync]# echo "setsid /usr/local/rsync/rsync.sh &" >> /etc/rc.local




  • 相关阅读:
    【博弈论】囚徒困境
    【LTE与5G】
    【现代通信技术】绪论
    【操作系统】 逻辑结构
    【密码学】
    【计算机网络】网络应用
    部署docker仓库-Harbor
    ELK+filebeat收集K8S平台日志
    istio-http流量管理
    K8S集群部署istio
  • 原文地址:https://www.cnblogs.com/zzf0305/p/9319962.html
Copyright © 2011-2022 走看看