zoukankan      html  css  js  c++  java
  • inotify+rsync目录实时同步

    两台linux服务器系统CentOS7
    一台Apache    IP:192.168.155.130(发布文件服务器,也可以叫rsync客户端)
    一台nginx     IP:192.168.155.131(同步镜像文件服务器,也可以叫rsync服务器端)
    
    
    Apache服务器同步文件夹路径
    /usr/local/apache/htdocs
    
    
    nginx服务器同步文件夹路径
    /usr/local/nginx/html
    
    
    nginx服务器
    rsync
    下载地址https://rsync.samba.org/
    wget下载路径https://download.samba.org/pub/rsync/src/rsync-3.1.2.tar.gz
    这里用到的是
    rsync-3.1.2.tar.gz
    
    
    用 WinSCP上传到指定的目录下,这里是
    /usr/local/src
    
    
    shell端
    进入到安装包目录
    cd /usr/local/src
    
    
    解压缩rsync到当前文件夹,这里解压缩时也不能加 z 参数
    tar -xvf rsync-3.1.2.tar.gz
    
    
    进入解压缩目录
    cd rsync-3.1.2
    
    
    配置安装目录
    ./configure --prefix=/usr/local/rsync
    
    
    编译
    make
    
    
    安装
    make install
    
    
    安装后rsyncd配置文件存放在/etc/rsyncd.conf
    编辑删除原有内容改成如下内容,uid参数到timeout参数部分为全局参数,[rsyncserver]开始及以后部分为模块参数
    uid = root
    gid = root
    port = 873
    max connections = 0
    motd file = /usr/local/rsync/rsyncd.motd
    log file = /usr/local/rsync/rsyncd.log
    pid file = /usr/local/rsync/rsyncd.pid
    lock file = /usr/local/rsync/rsyncd.lock
    address = 192.168.155.131
    transfer logging = true
    log format = %t %a %m %f %b
    timeout = 900
    hosts allow = 192.168.155.130 192.168.155.129
    hosts deny = *
    syslog facility = local3
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
    [rsyncserver]
    path = /usr/local/nginx/html/
    exclude = lost/ found/
    comment = rsync from 192.168.155.130
    ignore errors
    read only = false
    list = true
    use chroot = false
    auth users = rsyncuser
    secrets file = /usr/local/rsync/rsyncd.secrets
    esc+:wq保存
    vim /etc/rsyncd.conf
    
    
    新建rsync用户名,密码文件输入以下内容,用户名与密码用:分开,一行一个用户,这里只设一个用户
    rsyncuser:123456
    vim /usr/local/rsync/rsyncd.secrets
    
    
    设置权限
    因为rsyncd.secrets存储了rsync服务的用户名和密码,所以非常重要。要将rsyncd.secrets设置为root拥有, 权限为600
    chmod 600 /usr/local/rsync/rsyncd.secrets
    
    
    启动rsync服务
    rsync全局参数的值也可在执行rsync时设值,例如下
    --daemon  : 启动一个守护进程执行rsync
    --address : 及--port作用参考全局rsync配置文件的全局参数信息,这俩参数可加可不加
    --config  : 指定配置文件位置,不加的话默认就是/etc/rsyncd.conf
    /usr/local/rsync/bin/rsync --daemon --address=192.168.155.131 --port=873 --config=/etc/rsyncd.conf
    
    
    查看rsync端口是否有对应服务
    lsof -i:873
    
    
    开启防火墙873端口的外部访问
    firewall-cmd --zone=public --add-port=873/tcp --permanent
    
    
    重启防火墙
    firewall-cmd --reload
    
    
    
    
    
    Apache服务器
    rsync
    这里用到的rsync和nginx服务器一样
    rsync-3.1.2.tar.gz
    
    
    inotify-tools
    下载地址http://inotify-tools.sourceforge.net/
    wget下载路径https://cloud.github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
    这里用到的是
    inotify-tools-3.14.tar.gz
    
    
    用 WinSCP上传到指定的目录下,这里是
    /usr/local/src
    
    
    shell端
    进入到安装包目录
    cd /usr/local/src
    
    
    解压缩rsync到当前文件夹,这里解压缩时也不能加 z 参数
    tar -xvf rsync-3.1.2.tar.gz
    
    
    进入解压缩目录
    cd rsync-3.1.2
    
    
    配置安装目录
    ./configure --prefix=/usr/local/rsync
    
    
    编译
    make
    
    
    安装
    make install
    
    
    创建存放服务器端密码文件,只需要输入服务器端密码即可,不用输入用户名
    这里填写上面服务器端密码文件里设定的密码,用户名在命令行里指定
    123456
    vim /usr/local/rsync/rsyncd.pass
    
    
    设置权限,而且只能设成600
    chmod 600 /usr/local/rsync/rsyncd.pass
    
    
    向服务器端上传同步文件
    /usr/local/apache/htdocs/ 本地客户端要同步的文件夹
    rsyncuser                 服务器端rsync服务中设定允许执行该模块的用户名
    192.168.155.131           服务器端IP地址
    ::rsyncserver             表示服务器端需要同步的模块名称
    命令行参数
    -v : verbose
    -z : 压缩
    -r : recursive
    -t : 表示保持原文件创建时间
    -o : 表示保持原文件属主
    -p : 表示保持原文件的参数
    -g : 表示保持原文件的所属组
    -a : 存档模式
    -P : 表示代替-partial和-progress两者的选项功能
    -e : ssh建立起加密的连接。
    --partial       : 阻止rsync在传输中断时删除已拷贝的部分(如果在拷贝文件的过程中,传输被中断,rsync的默认操作是撤消前操作,即从目标机上删除已拷贝的部分文件。)
    --progress      : 是指显示出详细的进度情况
    --delete        : 客户端上删除,服务器端也删除,保持真正的一致。
    --exclude       : 不包含/ins目录
    --size-only     : 这个参数用在两个文件夹中的差别仅是源文件夹中有一些新文件,不存在重名且被修改过的文件,因为这种文件有可能会因为内容被修改可大小一样,而被略过。这个参数可以大大地提高同步的效率,因为它不需要检查同名文件的内容是否相同。
    --password-file : 指定包含server端认证用户的密码文件,不加此选项连接服务器端时会提示手动输入密码。
    /usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsyncd.pass  /usr/local/apache/htdocs/ rsyncuser@192.168.155.131::rsyncserver
    
    
    安装inotify前需要先安装gcc与gcc-c++
    yum install -y gcc gcc-c++
    
    
    cd /usr/local/src
    
    
    tar -zxvf inotify-tools-3.14.tar.gz
    
    
    cd inotify-tools-3.14
    
    
    ./configure --prefix=/usr/local/inotify
    
    
    编译
    make
    
    
    安装
    make install
    
    
    编写执行inotify的脚本填写以下内容,使inotify实时监控指定目录并做相应操作
    #!/bin/bash
    #同步接收方ip
    client=192.168.155.131
    #本地要监视的文件夹路径
    local_folder=/usr/local/apache/htdocs/
    #同步接收方配置的rsync模块名
    module=rsyncserver
    #同步接收方鉴权时的用户
    user=rsyncuser
    /usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e create,move,delete,modify,attrib $local_folder | while read files
    do
    /usr/local/rsync/bin/rsync -vzrtopg --delete --progress --password-file=/usr/local/rsync/rsyncd.pass  $local_folder $user@$client::$module
    done
    inotify部分参数
    -m 是保持一直监听
    -r 是递归查看目录
    -q 是打印出事件
    -e create,move,delete,modify,attrib 是指 监听“创建 移动 删除 修改 属性” 事件
    vim /usr/local/inotify/inotify.sh
    
    
    设置脚本权限
    chmod 755 /usr/local/inotify/inotify.sh
    
    
    后台执行脚本开始监听并同步
    /usr/local/inotify/inotify.sh&
    
    
    将 sh /usr/local/inotify/inotify.sh & 这段代码写在 /etc/rc.d/rc.local 文件的最后一行,使开机后台执行 /usr/local/inotify/inotify.sh 脚本
    nginx服务器端的rsync也用用此方法写入脚本再添加到开机启动
    echo "/usr/local/inotify/inotify.sh &" >> /etc/rc.d/rc.local
    
    
    
    
    附录
    uid = root                                                   # 运行rsync守护进程的用户
    gid = root                                                   # 运行rsync守护进程的组
    port = 873                                                   # 默认端口873
    max connections = 0                                          # 最大连接数无限制,指定该模块的最大并发连接数量以保护服务器,超过限制的连接请求将被告知随后再试。
    motd file = /usr/local/rsync/rsyncd.motd                     # 用来指定一个消息文件,当客户连接服务器时该文件的内容显示给客户,默认是没有motd文件的。
    log file = /usr/local/rsync/rsyncd.log                       # 指定 rsync 守护进程的日志文件存放位置,而不将日志发送给 syslog。
    pid file = /usr/local/rsync/rsyncd.pid                       # 守护进程将其 PID写入文件的存放位置
    lock file = /usr/local/rsync/rsyncd.lock                     # 指定支持 max connections 参数的锁文件存放位置。
    address = 192.168.155.131                                    # 在独立运行时,将此服务绑定到指定的 IP 地址运行(这里也就是本机IP地址)。由 xinetd 运行时将忽略此参数,使用命令行上的 --address 选项替代。
    transfer logging = true                                      # 使 rsync 服务器将传输操作记录到传输日志文件。
    log format = %t %a %m %f %b                                  # 通过该选项用户在使用transfer logging可以自己定制日志文件的字段。其格式是一个包含格式定义符的字符串,可以使用的格式定义符如下所示:
    timeout = 900                                                # 单位秒,该选项可以覆盖客户指定的 IP 超时时间。从而确保 rsync 服务器不会永远等待一个崩溃的客户端。
    hosts allow = 192.168.155.130 192.168.155.129                # 运行访问本rsync服务器的IP地址,或网段,或者用*表示允许全部,多IP用空格分隔
    hosts deny = *                                               # 不允许访问本rsync服务器的IP地址,赋值规则同hosts allow
    syslog facility = local3                                     # 指定rsync发送日志消息给syslog时的消息级别,常见的消息级别是:uth, authpriv, cron, daemon, ftp, kern, lpr, mail, news, security, sys-log, user, uucp, local0, local1, local2, local3,local4, local5, local6和local7。默认值是daemon。
    dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2 # 用来指定那些在传输之前不进行压缩处理的文件。
    
    [rsyncserver]                                                # 这里是认证的模块名,在客户端(这里是Apache服务器)端需要指定
    path = /usr/local/nginx/html/                                # 需要做镜像的目录
    exclude = lost/ found/                                       # 不包含的目录,多目录用空格分开,这里就是不同步/usr/local/nginx/html/目录下的lost/和found/两个文件夹
    comment = rsync from 192.168.155.130                         # 给模块指定一个描述,该描述连同模块名在客户连接得到模块列表时显示给客户
    ignore errors                                                # 忽略错误
    read only = false                                            # 指定是否允许客户上传文件。若为 true 则不允许上传;若为 false 并且服务器目录也具有读写权限则允许上传。
    list = true                                                  # 指定当客户请求列出可以使用的模块列表时,该模块是否应该被列出。如果设置该选项为 false,可以创建隐藏的模块。默认值是true。
    use chroot = false                                           # 若为 true,则 rsync 在传输文件之前首先 chroot 到 path 参数所指定的目录下。这样做的原因是实现额外的安全防护,但是缺点是需要 root 权限。
    auth users = rsyncuser                                       # 指定由空格或逗号分隔的用户名列表,只有这些用户才允许连接该模块,如果没有这行则表明是匿名,此用户与系统无关,是secrets file参数指定文件里保存的用户名
    secrets file = /usr/local/rsync/rsyncd.secrets               # 指定一个 rsync 认证口令文件。只有在 auth users 被定义时,该文件才起作用
  • 相关阅读:
    c++坐标移动
    c++字串的连接最长路径查找
    c++句子逆序——堆栈实现
    c++句子逆序——substr函数
    c++计数法解决统计不同字符个数
    c++提取不重复的整数-计数
    C++取近似值简单算法
    c++排序去重
    c++计数排序例子
    分布式服务框架 Zookeeper
  • 原文地址:https://www.cnblogs.com/dreamhome/p/5156085.html
Copyright © 2011-2022 走看看